Я использую подготовку Chef для создания машин в AWS. При создании машины я добавляю к ней атрибут, представляющий собой массив файлов JSON. В рецептах, которые я запускаю, я хочу перебрать этот массив и создать файл шаблона на машине. Машина инициализируется, но при повторении атрибута массива я получаю сообщение об ошибке:
неопределенный метод "каждый" для nil:NilClass
Я попытался просмотреть файл узла, который был создан на моем сервере, и знаете что? Массив файлов JSON был добавлен в файл узла! Я не уверен, почему тогда он продолжает выдавать эту ошибку. Любые идеи?
Пример кода выглядит следующим образом:
machines.rb
def get_cluster_json(domain_number)
clusters = []
@@environment_template['domains'][domain_number]['clusters'].each do |cls|
clusters << JSON.parse(::File::read(new_resource.template_path + cls))
end
return clusters
end
provisioning_xyz_machine "test-admin" do
tag "usage:keep"
attribute "clusters_json", get_cluster_json(domain_counter)
recipe admin_role
machine_options get_machine_options()
ohai_hints ohai_hints
action $provisioningAction
end
admin_role.rb
managed_details = []
node["clusters_json"].each do |cls|
managed_details << "#{cls['cluster']['name']}"
end
Журнал
* template[/tools/appsw/appsautm/config/INTFIN_config] action create[2015-05-12T10:24:13-07:00] INFO: Processing template[/tools/appsw/appsautm/config/INTFIN_config] action create (xyz-environment-cookbook::build_admin line 32)
================================================================================
Error executing action `create` on resource 'template[/tools/appsw/appsautm/config/INTFIN_config]'
================================================================================
Chef::Mixin::Template::TemplateError
------------------------------------
undefined method 'each' for `nil:NilClass`
Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/xyz-environment-cookbook/recipes/build_admin.rb
32: template "/tools/appsw/appsautm/config/#{env_name}_config" do
33: source "#{env_name}_config.conf.erb"
34: cookbook "appsautm-template"
35: owner node['xyz-dir-library']['user']
36: mode "0755"
37:
38: variables({
39: :admin_servers=> admin_details,
40: :managed_servers=> managed_details
41: })
42: end
43:
Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/xyz-environment-cookbook/recipes/build_admin.rb:32:in `from_file'