2013-08-19 1 views
3

Я следую методу, описанному в this post, для создания записи DNS для нового сервера в качестве шеф-повара. Я создал зашифрованный элемент мешка данных для моего учетного AWS:EncryptedDataBagItem.load производит «не может преобразовать nil в String»

$ knife data bag show passwords aws --secret-file .chef/encryted_data_bag_secret 
aws_access_key: <my_access_key> 
aws_secret_key: <my_secret_key> 
id:    aws 

Однако, когда я запускаю клиент шефа, эту линию ...

aws_creds = Chef::EncryptedDataBagItem.load('passwords', 'aws') 

производит эту ошибку:

TypeError: can't convert nil into String 

Я попытался найти ошибку, но пока я вижу доказательства того, что другие люди столкнулись с этим, неясно, какова их проблема и как она была решена. Что здесь происходит, и как я могу это исправить?

ответ

4

Я тоже сегодня попал в эту ошибку. Для меня узел отсутствовал encrypted_data_bag_secret.

В соответствии с этой ошибкой (http://tickets.opscode.com/browse/CHEF-4441), погрешность (в моем случае) был бы понятнее в Chef 11.4.4:

No such file or directory - file not found '/etc/chef/encrypted_data_bag_secret' 

Я надеюсь, что это полезно.

+1

Это определенно часть проблемы. У меня был рецепт, который будет копировать секретный файл (ранее в run_list, чем этот), но, видимо, файл ключа должен быть на месте * до запуска chef-client *. – MrTheWalrus

1

Что касается порядка выполнения рецептов, (комментарий к ответу rgnever), вы правы, что некоторые вещи выглядят не по порядку. Вот Opscode article on Chef Recipe execution:

Chef processes recipes in two phases, Compile and Execute.

  1. During the compile phase, the recipes are evaluated as Ruby code and recognized resources are added to the resource collection.
  2. During the execute phase, Chef takes the appropriate Provider action on each resource.

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

Мы смогли обойти это с помощью трюка, описанного в этом документе (адаптированного к ресурсу cookbook_file).

cb_file = cookbook_file "/etc/chef/encrypted_data_bag_secret" do 
    source "chef_secret_file" 
    mode 0755 
    owner "root" 
    group "root" 
end 

cb_file.run_action(:create) 

Обратите внимание, что :nothing действие не поддерживается для cookbook_file resource, и отсутствие действия в ресурсном блоке будет по умолчанию :create, который будет на самом деле переписывает секретный файл во время выполнения фазы рецепта как Что ж.

Смежные вопросы