Vagrant-JSON属性语法/用法

Vagrant-JSON属性语法/用法,json,attributes,glassfish,vagrant,chef-solo,Json,Attributes,Glassfish,Vagrant,Chef Solo,我目前正在使用Vagrant通过chef_solo cookbook安装glassfish服务器。一切都正确安装,我可以访问服务器,但它要求我启用secure_admin从主机远程访问服务器 问题在于,我似乎无法找到或理解Vagrant的JSON语法,无法正确修改secure_admin的属性以启用 我正在使用这本食谱: 在说明中,它解释了如何修改这些属性以输入如下代码: # Create a basic domain that logs to a central graylog server

我目前正在使用Vagrant通过chef_solo cookbook安装glassfish服务器。一切都正确安装,我可以访问服务器,但它要求我启用secure_admin从主机远程访问服务器

问题在于,我似乎无法找到或理解Vagrant的JSON语法,无法正确修改secure_admin的属性以启用

我正在使用这本食谱:

在说明中,它解释了如何修改这些属性以输入如下代码:

# 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
但是,如果我希望修改端口或域名等功能,我必须使用此语法编辑这些属性(我的文件中已经有了哪些内容):

}

这段代码对我来说很有意义,因为我在本食谱中的“属性驱动的域”中看到,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']
我似乎不知道secure_admin属性应该放在我的文件的chef.json块中的什么位置。我试着把它放在不同的位置,比如在glassfish级别下,在domains级别下,在config下

我真的不知道我到底应该放什么,或者放在哪里

我一直在使用这种变体:

"secure_admin" => {
  "domain_name" => "domain1"
  "action" => :enable
}
或者,如果它位于domain1之下,但在config之上,则与此类似:

"secure_admin" => {
  "action" => :enable
}
大多数情况下,它不会给出任何更改或错误的反馈,有时,如果将其放在某些位置,它会失败,因为它试图将其作为一个单独的域来读取,但除此之外,不会太多


我当前用于修改属性的语法是否不正确?我对这些东西很熟悉,所以我真的不知道。抱歉,这篇文章太长了。

要启用远程访问,您需要将域['config']['remote_access']的节点属性设置为true。这只是基于三元运算符的猜测。因此,在您最初的示例中:

"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",
             "remote_access" => true
                }
            }
        }
    }

啊,我想我在密码里碰到了。我不确定我是否试过,但我会的,然后回到这里。谢谢设置(“远程访问”=>true)有效!非常感谢。
"secure_admin" => {
  "action" => :enable
}
"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",
             "remote_access" => true
                }
            }
        }
    }