使用packer覆盖chef-client中的角色属性

问题描述 投票:0回答:1

我有一个厨师角色:

{
  "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 chef-recipe packer
1个回答
0
投票

你的问题与打包器本身无关,而是如何执行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文件。

© www.soinside.com 2019 - 2024. All rights reserved.