В качестве ножа у меня нож.rb:
log_level :info
log_location STDOUT
node_name 'user'
client_key '/home/user/.chef/user.pem'
validation_client_name 'chef-validator'
validation_key '~/.chef/validation.pem'
chef_server_url 'url:4000'
cache_type 'BasicFile'
cache_options( :path => '/home/user/.chef/checksums' )
cookbook_path [ './', './site-cookbooks' ]
Я могу делать «список поваренных ножей» и все эти забавные вещи, но когда я иду редактировать, я получаю:
# knife node edit test.domain.com -c knife.rb -e vim
ERROR: ArgumentError: Attribute chef_environment is not defined!
У меня настроена среда:
# knife environment list
_default
production
и узел, который я пытаюсь редактировать, находится в этой среде. Я пробовал использовать параметр -E, а также добавить параметр «environment» и «chef_environment» в свой Knife.rb (в документации немного двусмысленно, что мне следует использовать), но безрезультатно. У кого-нибудь есть совет по этому поводу?
Какую версию Chef вы установили в локальной системе, в которой вы используете Knife? Какая версия работает на Chef Server? (Я предполагаю, что с 'url: 4000' chef_server_url вы запускаете свой собственный сервер вместо Opscode).
Вы можете получить дополнительную информацию из Knife с помощью '-VV'.
knife node edit test.example.com -c knife.rb -e vim -VV
Настройка в Knife.rb для использования среды по умолчанию: environment
. На самом узле chef_environment
- это метод объекта Node, который возвращает значение среды узла, а не атрибут.
Также я бы порекомендовал положить Knife.rb в .chef
в вашем репозитории Chef или в вашем домашнем каталоге. Knife автоматически определит конфигурацию, выполнив поиск .chef/knife.rb
, аналогично git.
Knife также будет использовать редактор, указанный в переменной среды оболочки, EDITOR.
export EDITOR=`which vim`
Он будет использовать vim.