Chef infra 在JSON中使用属性

Chef infra 在JSON中使用属性,chef-infra,chef-solo,Chef Infra,Chef Solo,可以在Chef Solo的JSON中指定属性值吗?我有一个带有运行列表的solo.json,我想在那里指定属性。厨师长文档似乎表明我可以做以下事情: { "hostname": { "test": "value2" }, "default_attributes": { "hostname": { "test": "value3" } }, "override_attributes":

可以在Chef Solo的JSON中指定属性值吗?我有一个带有运行列表的solo.json,我想在那里指定属性。厨师长文档似乎表明我可以做以下事情:

{
    "hostname": {
        "test": "value2"
    },
    "default_attributes": {
        "hostname": {
            "test": "value3"
        }
    },
    "override_attributes": {
        "hostname": {
            "test": "value4"
        }
    },
    "default": {
        "hostname": {
            "test": "value5"
        }
    },
    "run_list": [
        "recipe[hostname::default]"
    ]
}
但是,每当我尝试访问配方中的值时:

p node['hostname']['test']
我只得到attributes/default.rb中定义的值,如果我没有在那里定义它,我会得到一个nil值


有没有方法引用这些值?

节点数据中唯一可以存储的属性级别是
普通
,其他所有属性都在聚合开始时重置,并从角色、环境和食谱中重建。您想要的东西如下所示:

{
  "normal": {
    "hostname": {
      "test": "something"
    }
  },
  "run_list": [
    "recipe[hostname::default]"
  ]
}

我尝试使用上面的示例为chef solo在JSON文件中设置属性,而
“normal”:{…}
块被完全忽略。已读取运行列表,但属性似乎从未起作用

我的命令是:

chef-solo -c /path/to/config_file.rb -j /path/to/file.json
我的JSON文件:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "normal": {
    "my_cookbook": {
      "git_branch": "staging"
    }
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}
在聚合过程中,Chef直接返回到
attributes/default.rb
中的默认值。输入的JSON值是否正确?到目前为止,我唯一的解决方法是为每个
“git_分支”创建一个新的配方:
属性,我希望使用chef solo进行测试,并将更新的运行列表添加到不同的JSON文件中。基本上,复制整个配方以更改单个
节点。正常['my_cookbook']['git_branch']
值。不用说,这不应该是一个解决方案

使用Chef 14.0.202进行跟进:

不使用Chef Solo works在JSON文件中设置属性优先级。JSON的外观应与此类似:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "my_cookbook": {
    "git_branch": "staging"
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}

不包括
“normal”:{…}
“default_attributes”:{…}
等,将传递属性供chef solo使用。

一个更简单的方法(至少对我来说)是创建“覆盖”只有一个带有
节点的属性文件的cookbook.override
值,然后运行
chef solo-c~/.chef/solo.rb-j~/.chef/solo.json-o my_overrides_cookbook,recipe[recipe_to_run]
,以保证它会覆盖您的默认提示。对于chef solo,在从角色文件中删除“default_attributes”:{…}之后,chef solo将尊重该角色文件中的所有属性。