Я использую шеф-повара для тестирования программного обеспечения. Таким образом, имя файла и место загрузки указанного программного обеспечения динамически/будут переданы в качестве атрибута.
Обратите внимание, что я должен использовать сценарии и рецепты шеф-повара, которые использует наша операционная группа, как часть процедуры тестирования. У них есть рассматриваемые значения на уровне среды и на уровне поваренной книги 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... но предпочел бы не отклоняться от того, какие операции используются.