Как передать атрибут из сборки упаковщика в поваренную книгу? - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь предварительно установить атрибут chef из сборки упаковщика, но не могу заставить его работать:

    "provisioners": [
    {
      "chef_environment": "test_cookbook",

      "environments_path": "environments",
      "execute_command": "{{if .Sudo}}sudo {{end}}chef-solo --no-color --legacy-mode -c {{.ConfigPath}} -j {{.JsonPath}}",
      "json": {
          "test_cookbook": {
            "my_attr": "test"
          }
      },
      "run_list": [
        "test_cookbook"
      ],
      "type": "chef-solo",
    }
  ]

Это всегда передается как нулевое значение

output="#{Chef::Log.info(node['my_attr'])}"
log output
file "/tmp/#{node['my_attr']}" do
  content output
end

Я уже упоминал это Использование атрибутов в Chef Solo JSON уже.

1 Ответ

1 голос
/ 20 мая 2019

При использовании ключа json для поставщика Chef для Packer атрибуты, передаваемые Chef, будут парами ключ-значение, начиная с ключа, вложенного в ключ json.Таким образом, вы можете получить доступ к своим атрибутам из ключа test_cookbook, например:

output="#{Chef::Log.info(node['test_cookbook']['my_attr'])}"
log output
file "/tmp/#{node['test_cookbook']['my_attr']}" do
  content output
end

, и это должно присвоить String test локальной переменной output и поместить ее в качестве содержимого во временный файл.,Это связано с тем, что вы настроили отображение с помощью клавиши json как:

"test_cookbook": {
  "my_attr": "test"
}
...