Как передать атрибут из сборки упаковщика в кулинарную книгу шеф-повара?

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

    "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.


person user_dev    schedule 15.05.2019    source источник
comment
Похоже, что ключ my_attr вложен внутри ключа test_cookbook в сопоставлении. Вы пытались вместо этого получить доступ к ключу test_cookbook?   -  person Matt Schuchard    schedule 16.05.2019
comment
это ответ, спасибо!   -  person user_dev    schedule 19.05.2019


Ответы (1)


При использовании ключа 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

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

"test_cookbook": {
  "my_attr": "test"
}
person Matt Schuchard    schedule 20.05.2019