我目前正在使用 Vagrant 通过 chef_solo 食谱安装 glassfish 服务器。一切安装正确,我可以访问服务器,但它需要我启用secure_admin才能从我的主机远程访问服务器。
问题在于我似乎无法找到或理解 Vagrant 的 JSON 语法来正确修改 secure_admin 的属性以启用。
我正在使用这本食谱:https ://github.com/realityforge/chef-glassfish
在说明中,它解释了修改此类属性以输入如下代码:
# Create a basic domain that logs to a central graylog server
glassfish_domain "my_domain" do
port 80
admin_port 8103
extra_libraries ['https://github.com/downloads/realityforge/gelf4j/gelf4j-0.9-all.jar']
logging_properties {
"handlers" => "java.util.logging.ConsoleHandler, gelf4j.logging.GelfHandler",
".level" => "INFO",
"java.util.logging.ConsoleHandler.level" => "INFO",
"gelf4j.logging.GelfHandler.level" => "ALL",
"gelf4j.logging.GelfHandler.host" => 'graylog.example.org',
"gelf4j.logging.GelfHandler.defaultFields" => '{"environment": "' + node.chef_environment + '", "facility": "MyDomain"}'
}
end
但是,如果我想修改端口或域名等功能,我必须使用以下语法编辑这些属性(我的 vagrantfile 中已经有什么):
chef.json = {
"glassfish" => {
"base_dir" => "/usr/local/glassfish",
"domains_dir" => "/usr/local/glassfish/glassfish/domains",
"domains" => {
"domain1" => {
"config" => {
"domain_name" => "domain1",
"admin_port" => 4848,
"username" => "root",
"password" => "admin",
}
}
}
}
}
正如我在本食谱的“attribute_driven_domain”配方中看到的那样,这段代码对我来说很有意义,open 语句就是这样描述的。意思是编辑域的最小内存,我会输入:
"glassfish" => {
"domains" => {
"domain1" => {
"config" => {
"min_memory" => 512
}
}
}
}
这 ^ 对应于:
['glassfish']
['domains']
['config']
['min_memory']
....在食谱的这一部分中找到:
gf_sort(node['glassfish']['domains']).each_pair do |domain_key, definition|
domain_key = domain_key.to_s
Chef::Log.info "Defining GlassFish Domain #{domain_key}"
admin_port = definition['config']['admin_port']
username = definition['config']['username']
secure = definition['config']['secure']
password_file = username ? "#{node['glassfish']['domains_dir']}/#{domain_key}_admin_passwd" : nil
system_username = definition['config']['system_user']
system_group = definition['config']['system_group']
if (definition['config']['port'] && definition['config']['port'] < 1024) || (admin_port && admin_port < 1024)
include_recipe 'authbind'
end
glassfish_domain domain_key do
min_memory definition['config']['min_memory'] if definition['config']['min_memory']
max_memory definition['config']['max_memory'] if definition['config']['max_memory']
max_perm_size definition['config']['max_perm_size'] if definition['config']['max_perm_size']
max_stack_size definition['config']['max_stack_size'] if definition['config']['max_stack_size']
port definition['config']['port'] if definition['config']['port']
但是,在定义安全管理员的部分,我看不到一个明确的位置来指示它应该放置在 chef.json 块中的位置。在本节中找到:
glassfish_secure_admin "#{domain_key}: secure_admin" do
domain_name domain_key
admin_port admin_port if admin_port
username username if username
password_file password_file if password_file
secure secure if secure
system_user system_username if system_username
system_group system_group if system_group
action ('true' == definition['config']['remote_access'].to_s) ? :enable : :disable
end
我似乎无法弄清楚 secure_admin 属性应该放在我的 vagrantfile 中的 chef.json 块中的位置。我尝试将其放置在不同的位置,例如 glassfish 级别下、域级别下、配置下。
我真的不知道我到底应该放什么,或者放在哪里。
我一直在使用这种变体:
"secure_admin" => {
"domain_name" => "domain1"
"action" => :enable
}
或者像这样,如果它在 domain1 下但在配置之上:
"secure_admin" => {
"action" => :enable
}
大多数情况下,它不会给出任何关于更改或错误的反馈,有时如果它放在某些位置它会失败,因为它试图将它作为一个单独的域来读取,但除此之外并不多。
我当前用于修改属性的语法是否不正确?我对这些东西很新鲜,所以我真的不知道。很抱歉这篇文章太长了。