Переопределение атрибутов в шеф-поваре программно

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

Обратите внимание, что я должен использовать сценарии и рецепты шеф-повара, которые использует наша операционная группа, как часть процедуры тестирования. У них есть рассматриваемые значения на уровне среды и на уровне поваренной книги default.rb. Они используют ruby-скрипт для настройки виртуальной машины с помощью ножа openstack и добавляют этот сервер к шеф-повару через REST API:

    Chef::Config.from_file("/root/.chef/knife.rb")  
    rest = Chef::REST.new(CHEF_API)
    newserver=
        {
          :name => server.hostname,
          :chef_type => "node",
          :chef_environment => server.environment,
          :json_class => "Chef::Node",
          :attributes => {
            :cobbler_profile => server.profile
          },
          :overrides => {
          },
          :defaults => {
          },
          :run_list => server.roles 
        }

    begin
        result = rest.post_rest("/nodes",newserver)
        ....

В идеале имя и местоположение файла должны быть переданы в приложение python в качестве параметров командной строки, а затем использовать нож или pychef (или ruby, если мне нужно...), чтобы установить/переопределить существующие атрибуты уровня узла.

Метод, который они используют для добавления сервера, исключает вариант -j, который я видел в других подобных вопросах.

Я пробовал knife node edit - но это требует использования редактора..

я пытался

node = chef.Node('myNode')  
node.override['testSoftware']['downloads']['testSoftwareInstaller'] = 'http://location/of/download'
node.save()

Но node.override['testSoftware']['downloads']['testSoftwareInstaller'] впоследствии возвращает исходное значение (и его можно увидеть как исходное в пользовательском интерфейсе). Похоже, таким образом можно только установить новые атрибуты, но нельзя редактировать/перезаписывать существующие.

Я подумываю просто динамически создать файл environment.json... но предпочел бы не отклоняться от того, какие операции используются.


person Gripp    schedule 23.05.2013    source источник


Ответы (1)


Я новичок в шеф-поваре, и вам, вероятно, это даже не понадобится через 3 года, но... Я думаю, вам следует использовать node['override']['attribute'] вместо node.override['attribute']. Первый предназначен для установки значений, второй — для получения значений.

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

person ilvidel    schedule 25.04.2016