使用Chef java cookbook时如何访问java_主页

使用Chef java cookbook时如何访问java_主页,java,certificate,chef-infra,keystore,self-signed,Java,Certificate,Chef Infra,Keystore,Self Signed,要在密钥库中导入证书,我需要访问属性java/java\u home 在Chef服务器上,我可以手动读取其值。它在属性选项卡上显示为/usr/lib/jvm/java-7-oracle-amd64 现在我想在我的厨师食谱中做同样的事情。当我检查节点['java]时,它会显示 node['java']: {"jdk_version"=>"7", "arch"=>"x86_64", "openjdk_packages"=>[], "openjdk_version"=>nil,

要在密钥库中导入证书,我需要访问属性
java/java\u home

在Chef服务器上,我可以手动读取其值。它在属性选项卡上显示为
/usr/lib/jvm/java-7-oracle-amd64

现在我想在我的厨师食谱中做同样的事情。当我检查
节点['java]
时,它会显示

node['java']: {"jdk_version"=>"7", "arch"=>"x86_64", "openjdk_packages"=>[], "openjdk_version"=>nil, "accept_license_agreement"=>false, "set_default"=>true, "alternatives_priority"=>1062, "set_etc_environment"=>false, "ark_retries"=>0, "ark_retry_delay"=>2, "install_flavor"=>"oracle", "oracle"=>{"accept_oracle_download_terms"=>true}, "jdk"=>{"6"=>{"bin_cmds"=>["appletviewer", "apt", "ControlPanel", "extcheck", "HtmlConverter", "idlj", "jar", "jarsigner", "java", "javac", "javadoc", "javah", "javap", "javaws", "jconsole", "jcontrol", "jdb", "jhat", "jinfo", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm", "keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"], "x86_64"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin", "checksum"=>"6b493aeab16c940cae9e3d07ad2a5c5684fb49cf06c5d44c400c7993db0d12e8"}, "i586"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-i586.bin", "checksum"=>"d53b5a2518d80e1d95565f0adda54eee229dc5f4a1d1a3c2f7bf5045b168a357"}}, "7"=>{"bin_cmds"=>["appletviewer", "apt", "ControlPanel", "extcheck", "idlj", "jar", "jarsigner", "java", "javac", "javadoc", "javafxpackager", "javah", "javap", "javaws", "jcmd", "jconsole", "jcontrol", "jdb", "jhat", "jinfo", "jmap", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm", "keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"], "x86_64"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz", "checksum"=>"bea330fcbcff77d31878f21753e09b30"}, "i586"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-i586.tar.gz", "checksum"=>"54899d0733d9a8697da59de79a02cc8f"}}, "8"=>{"bin_cmds"=>["appletviewer", "apt", "ControlPanel", "extcheck", "idlj", "jar", "jarsigner", "java", "javac", "javadoc", "javafxpackager", "javah", "javap", "javaws", "jcmd", "jconsole", "jcontrol", "jdb", "jdeps", "jhat", "jinfo", "jjs", "jmap", "jmc", "jps", "jrunscript", "jsadebugd", "jstack", "jstat", "jstatd", "jvisualvm", "keytool", "native2ascii", "orbd", "pack200", "policytool", "rmic", "rmid", "rmiregistry", "schemagen", "serialver", "servertool", "tnameserv", "unpack200", "wsgen", "wsimport", "xjc"], "x86_64"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-x64.tar.gz", "checksum"=>"e145c03a7edc845215092786bcfba77e"}, "i586"=>{"url"=>"http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-i586.tar.gz", "checksum"=>"b5b16247f66643727d9b6d4bc7c5efda"}}}}
我通过web界面看到的许多属性都是可访问的,但不幸的是,
java\u home
不存在

我可以通过厨师食谱读取该值吗?还是只有通过web界面才能看到

还有其他方法知道Java的位置吗

我尝试了环境变量
$JAVA_HOME
,该变量过去可以工作,但最近我注意到,对于Chef客户端运行来说,它现在也是零

在不知道Java的位置的情况下,使用Chef在密钥存储中导入证书的正确方法是什么

如果您正在使用,那么java\u主页应该在
节点['java']['java\u home']
上提供。这是您应该在所有厨师食谱中使用的,只要它们与将填充此值的java cookbook一起运行

我假设您在检查中看不到
节点['java']['java_home']
属性,因为您没有将其设置为chef服务器上的节点属性/环境属性

对于
$JAVA_HOME
环境变量,您应该将
节点['JAVA']['set_etc_environment']
设置为true(可以选择在/etc/environment中设置JAVA_HOME,默认为false)

如果您正在使用,那么java_主页应该在
节点['java']['java_home']
上可用。这是您应该在所有厨师食谱中使用的,只要它们与将填充此值的java cookbook一起运行

我假设您在检查中看不到
节点['java']['java_home']
属性,因为您没有将其设置为chef服务器上的节点属性/环境属性


对于
$JAVA_HOME
环境变量,您应该将
节点['JAVA']['set_etc_environment']
设置为true(可以选择在/etc/environment中设置JAVA_HOME,默认为false)

您的假设听起来不合逻辑,因为该值在chef_服务器上可见,节点将在运行开始时从该服务器获取值。嗯。。。不知道你为什么这么说。。。检查的输出已粘贴副本,但不包括java_home。。。是吗?不是。但是屏幕截图是这样的,所以这两个节点来自两个不同的节点,或者有什么问题。该属性不必位于chef服务器上,因为Java cookbook应该填充它(如您所说)。您的假设听起来不合逻辑,因为该值在chef_服务器上可见,节点将在运行开始时从该服务器获取值。嗯。。。不知道你为什么这么说。。。检查的输出已粘贴副本,但不包括java_home。。。是吗?不是。但是屏幕截图是这样的,所以这两个节点来自两个不同的节点,或者有什么问题。该属性不必位于chef服务器上,因为Java cookbook应该填充它(如您所说)。如何包含Java cookbook?如果你做得不好,你可能永远不会从版本配方中调用set_属性,但在这种情况下,java_主页不应该出现在chef_服务器上(除非你不是在谈论同一台机器,根据你的描述,这是我能看到的唯一解决方案)。如果我错了,请提供更多有关跑步列表的详细信息。回答您的一个问题:chef_服务器UI上的任何可见属性都是可访问的。我想我已经解决了这个问题,在尝试将java_读入主页的烹饪书之前加入了java烹饪书。我认为顺序并不重要。我确实很重要,因为java_home属性是由java cookbook中的一个菜谱填充的,而不是由属性文件填充的,因此,在编译来自_version的菜谱
set_attributes\u之前,该属性是未知的,因此如果您试图在编译时从以前的菜谱访问该属性,这行不通。最好的办法通常是在菜谱开始时加入“java”,这样你就可以确定在你尝试访问它们之前已经完成了任何必要的操作。你如何加入java菜谱?如果你做得不好,你可能永远不会从版本配方中调用set_属性,但在这种情况下,java_主页不应该出现在chef_服务器上(除非你不是在谈论同一台机器,根据你的描述,这是我能看到的唯一解决方案)。如果我错了,请提供更多有关跑步列表的详细信息。回答您的一个问题:chef_服务器UI上的任何可见属性都是可访问的。我想我已经解决了这个问题,在尝试将java_读入主页的烹饪书之前加入了java烹饪书。我认为顺序并不重要。我确实很重要,因为java_home属性是由java cookbook中的一个菜谱填充的,而不是由属性文件填充的,因此,在编译来自_version
的菜谱
set_attributes\u之前,该属性是未知的,因此如果您试图在编译时从以前的菜谱访问该属性,这行不通。最好的办法通常是在cookbok开始时包含“java”菜谱,这样您就可以在尝试访问它们之前确定已经完成了任何必要的操作。