我有一个厨师角色:
{
"name": "my-role",
"description": "Defines a role",
"override_attributes": {
"cookbook_one" {
"key": "value"
}
}
"run_list": [
recipe["cookbook_one"],
recipe["cookbook_two"]
]
}
我在配置程序块中使用Packer调用它:
{
"variables": {
"my-variable": ""
},
"provisioners": [
{
"type": "chef-client",
"server_url": "https://mychefserver.com/",
"run_list": "role[my-role]",
...
}
我需要能够从Packer中为recipe_two添加一些属性。我读过我可以使用json block of the chef-client配置器向运行列表添加一些属性。我试过了
"type": "chef-client",
"server_url": "https://mychefserver.com/",
"run_list": "role[my-role]",
"json": {
"override_attributes": {
"cookbook_two": {
"some_key": "value"
}
}
}
当我运行打包机时,我可以在/tmp/packer-chef-client/first-boot.json中看到
{
"override_attributes": {
"cookbook_two": {
"some_key": "{{ user `my-variable` }}"
}
},
"run_list": [
"role[my-role]"
]
}
但recipe_two的override_attributes没有暴露给cookbook。我找不到任何如何以这种方式使它工作的例子,也没有找到正确的“json”:{}块格式。
通过从Packer调用的角色向我的cookbook公开重写属性的任何方向都将非常感激
你的问题与打包器本身无关,而是如何执行chef-client
并为chef-client run提供自定义属性。
您可以通过在--json-attributes
中包含chef-client
(我强烈建议您访问文档,因为它包含示例)来提供自定义属性
-j PATH, --json-attributes PATH
包含JSON数据的文件的路径。用于设置第一个客户端运行。对于将来使用选项-i进行的所有运行,预计属性将保留在chef-server中。
所以回到你的问题与packer ...创建一个json文件,其中包含您要覆盖的属性,并确保您使用--json-attributes
从packer调用chef-client并将其指向您创建的json文件。