Как я могу записывать выходные данные журнала шеф-повара в файл во время работы на кухне?

Я пытаюсь настроить chef-client для вывода журналов в файл при запуске тестовой кухни, но моя конфигурация в .kitchen.yml, похоже, не отражается в client.rb, подготовленном и введенном в тестовый узел.

Я использую ChefDK 0.3.6, поставщик chef_zero и бродячий драйвер поверх виртуального бокса.

Выдержка из моего файла .kitchen.yml:

...
provisioner:
  name: chef_zero
...
- name: install-only
    run_list:
    - recipe[my_cookbook::test_recipe]
    attributes:
      chef_client:
        config:
          log_location: "/var/log/chef/chef-client.log"
...

Еще одна выдержка из вывода kitchen diagnose:

...
provisioner:
  attributes:
    chef_client:
      config:
        log_location: "/var/log/chef/chef-client.log"
  chef_client_path: "/opt/chef/bin/chef-client"
  chef_omnibus_install_options: 
  chef_omnibus_root: "/opt/chef"
...

И, наконец, содержимое /tmp/kitchen/client.rb на тестовом узле:

[root@TRSTWPRTSTAPV99 log]# cat /tmp/kitchen/client.rb 
node_name "install-only-rhel65-x86-64"
checksum_path "/tmp/kitchen/checksums"
file_cache_path "/tmp/kitchen/cache"
file_backup_path "/tmp/kitchen/backup"
cookbook_path ["/tmp/kitchen/cookbooks", "/tmp/kitchen/site-cookbooks"]
data_bag_path "/tmp/kitchen/data_bags"
environment_path "/tmp/kitchen/environments"
node_path "/tmp/kitchen/nodes"
role_path "/tmp/kitchen/roles"
client_path "/tmp/kitchen/clients"
user_path "/tmp/kitchen/users"
validation_key "/tmp/kitchen/validation.pem"
client_key "/tmp/kitchen/client.pem"
chef_server_url "http://127.0.0.1:8889"
encrypted_data_bag_secret "/tmp/kitchen/encrypted_data_bag_secret"

Как видите, ожидаемая запись log_location не включается в client.rb, что, я думаю, является причиной того, что файл журнала не создается по указанному пути.

Помогите, пожалуйста, понять, как правильно включить логирование в файл через chef-client на кухне?

Ссылки, используемые до сих пор:

  1. client.rb ссылка: https://docs.chef.io/config_rb_client.html
  2. настройки шеф-клиента в .kitchen.yml: https://docs.chef.io/config_yml_kitchen.html#chef-client-specific-settings

person Allan Lang    schedule 25.03.2015    source источник
comment
Включаете ли вы поваренную книгу chef_client в свой список выполнения? IIRC упомянутые атрибуты предназначены для использования рецептом chef_client::config. (могу ошибаться, так как не использую тест-кухню)   -  person Tensibai    schedule 25.03.2015
comment
@Tensibai Я не включаю chef_client::config в свой список выполнения, так как поставщик (chef_zero) приносит свой собственный. Это тот самый шеф-клиент, встроенный в поставщик, для которого я пытаюсь настроить ведение журнала.   -  person Allan Lang    schedule 25.03.2015


Ответы (1)


Согласно документу Chef-Zero Provisionner и прочтению код поставщика:

Он не принимает во внимание атрибуты, и это звучит логично, поскольку это атрибуты, которые должны использоваться кулинарными книгами в реальном мире.

Что можно сделать (думаю, из кода), так это определить log_file в определении поставщика вместе с chef_omnibus_url (строка 42 кода поставщика выше):

вы .kitche.yml можете стать:

...
provisioner:
  name: chef_zero
  log_file: "/var/log/chef/chef-client.log"
...
- name: install-only
    run_list:
    - recipe[my_cookbook::test_recipe]
...

or

...
provisioner:
  name: chef_zero
...
- name: install-only
    run_list:
    - recipe[chef-client::config]
    - recipe[my_cookbook::test_recipe]
attributes:
  chef_client:
    config:
      log_location: "/var/log/chef/chef-client.log"
...

Если вы используете поваренную книгу chef_client для настройки шеф-повара на своем узле, я бы включил ее в список выполнения, чтобы она максимально соответствовала реальности.

person Tensibai    schedule 25.03.2015
comment
У меня сработало добавление атрибута log_file под провайдером, спасибо! - person Allan Lang; 25.03.2015