我正在使用一个用于安装 IntelliJ IDEA 的第三方 Puppet 模块,并且我想自动验证安装是否有效。目前的解决方案由于没有许可证而失败:
$ make test
[...]
/usr/bin/vagrant ssh --command '/opt/idea/bin/inspect.sh "/home/user/dev/root" ~/.IntelliJIdea14/config/inspection/Default.xml /tmp -d "/home/user/dev/root/test/module"'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=350m; support was removed in 8.0
Sep 14, 2015 1:40:43 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Sep 14, 2015 1:40:43 AM java.util.prefs.FileSystemPreferences$6 run
WARNING: Prefs file removed in background /home/vagrant/.java/.userPrefs/prefs.xml
[ 1380] ERROR - nse.impl.GeneralLicenseManager - No valid license found
java.lang.Throwable
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:115)
at com.intellij.ide.a.g.cb.a(cb.java:107)
at com.intellij.idea.MainImpl$1.start(MainImpl.java:43)
at com.intellij.idea.StartupUtil.prepareAndStart(StartupUtil.java:117)
at com.intellij.idea.MainImpl.start(MainImpl.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.ide.plugins.PluginManager$2.run(PluginManager.java:91)
at java.lang.Thread.run(Thread.java:745)
[ 1389] ERROR - nse.impl.GeneralLicenseManager - IntelliJ IDEA 14.1.4 Build #IU-141.1532.4
[ 1389] ERROR - nse.impl.GeneralLicenseManager - JDK: 1.8.0_60
[ 1389] ERROR - nse.impl.GeneralLicenseManager - VM: OpenJDK 64-Bit Server VM
[ 1390] ERROR - nse.impl.GeneralLicenseManager - Vendor: Oracle Corporation
[ 1390] ERROR - nse.impl.GeneralLicenseManager - OS: Linux
Connection to 127.0.0.1 closed.
Makefile:198: recipe for target 'test-integrated-development-environment' failed
make: *** [test-integrated-development-environment] Error 255
我显然无法将自己的许可证文件放入存储库中。所以选项如下所示:
- 创建社区许可证文件,将其包含在存储库中,仅当该文件尚不存在时才将其写入许可证文件位置。我不确定那会有多hacky。
- 在与上述相同的条件下,动态生成社区许可证文件。不知道这是否可能。
- 运行一些完全不同的命令,不需要正在运行的 X 服务器或许可证。
这解决方法现在只是为了检查/opt/idea/bin/inspect.sh
是否存在,在我看来这不是一个好的指标。
如果没有可用的许可证文件,我不想执行诸如安装社区版本之类的操作。我想检查我真正要安装的软件包的安装情况。
答案1
第一个可能是最好的主意。木偶有一个属性对于file
内置类型;只是做类似的事情
file { "idea-license":
source => "puppet:///.../community-license",
replace => false,
}
如果许可证文件尚不存在,这将安装社区许可证,但如果存在则不触及它。