Ambiente do Chef 11.10.4 em execução no AWS Opsworks.
Não consigo descobrir como passar o valor da variável de bloqueio "cada um", "lyr", abaixo, com o atributo do nó node['aws-tag'][#{lyr}]
?
O bloco de código abaixo funciona das linhas 02-06, mas NÃO das linhas 07-14.
[01] include_recipe "aws"
[02] unless node['aws-tag']['tags'].empty? || node['aws-tag']['tags'].nil?
[03] aws_resource_tag node['ec2']['instance_id'] do
[04] tags(node['aws-tag']['tags'])
[05] action :update
[06] end
[07] node['opsworks']['instance']['layers'].each do |lyr|
[08] unless node['aws-tag'][#{lyr}].empty? || node['aws-tag'][#{lyr}].nil?
[09] aws_resource_tag node['ec2']['instance_id'] do
[10] tags(node['aws-tag'][#{lyr}])
[11] action :update
[12] end
[13] end
[14] end
[15] end
Aqui estão os resultados do chef-shell mostrando os valores dos atributos mencionados no código acima:
chef > node ['opsworks'] ['instance'] ['camadas']
= > ["mongodb"]
chef > node ['aws-tag']
= > {"tags" = > {"aplicativo" = > "app1", "ambiente" = > "dev"}, "mongodb" = > {"serviço" = > "mongodb"}}
OBSERVAÇÃO: estou modificando o livro de receitas chef-aws-tag para marcar todas as instâncias do ec2 com as tags em node['aws-tag']['tags']
e, além disso, marca cada tag ec2 de instância opsworks que são incluídas no json personalizado passado para opsworks por camada, nesse caso, o conteúdo de node['aws-tag']['mongodb']
ou node['aws-tag']['LAYER']
, genericamente.
Se eu executar o código acima recebo um erro de compilação de receita: "keyword_do_block inesperado, esperando ']'" - veja abaixo a mensagem de erro detalhada do opsworks:
================================================================================
Recipe Compile Error in /var/lib/aws/opsworks/cache.stage2/cookbooks/chef-aws-tag/recipes/ec2.rb
================================================================================
SyntaxError
-----------
/var/lib/aws/opsworks/cache.stage2/cookbooks/chef-aws-tag/recipes/ec2.rb:9: syntax error, unexpected keyword_do_block, expecting ']'
/var/lib/aws/opsworks/cache.stage2/cookbooks/chef-aws-tag/recipes/ec2.rb:12: syntax error, unexpected keyword_end, expecting ']'
Cookbook Trace:
---------------
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/mixin/from_file.rb:30:in 'instance_eval'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/mixin/from_file.rb:30:in 'from_file'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/cookbook_version.rb:237:in 'load_recipe'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context.rb:151:in 'load_recipe'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context/cookbook_compiler.rb:139:in 'block in compile_recipes'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context/cookbook_compiler.rb:137:in 'each'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context/cookbook_compiler.rb:137:in 'compile_recipes'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context/cookbook_compiler.rb:74:in 'compile'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/run_context.rb:86:in 'load'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/policy_builder/expand_node_object.rb:75:in 'setup_run_context'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/client.rb:252:in 'setup_run_context'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/client.rb:413:in 'do_run'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/client.rb:200:in 'block in run'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/client.rb:194:in 'fork'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/client.rb:194:in 'run'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/application.rb:215:in 'run_chef_client'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/application/client.rb:314:in 'block in run_application'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/application/client.rb:306:in 'loop'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/application/client.rb:306:in 'run_application'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/application.rb:66:in 'run'
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/bin/chef-client:26:in '<top (required)>'
/opt/aws/opsworks/current/bin/chef-client:16:in 'load'
/opt/aws/opsworks/current/bin/chef-client:16:in '<main>'
Relevant File Content:
----------------------
/opt/aws/opsworks/releases/20141010064749_328/vendor/bundle/ruby/2.0.0/gems/chef-11.10.4/lib/chef/mixin/from_file.rb:
23:
24: # Loads a given ruby file, and runs instance_eval against it in the context of the current
25: # object.
26: #
27: # Raises an IOError if the file cannot be found, or is not readable.
28: def from_file(filename)
29: if File.exists?(filename) && File.readable?(filename)
30>> self.instance_eval(IO.read(filename), filename, 1)
31: else
32: raise IOError, "Cannot open or read #{filename}!"
33: end
34: end
35:
36: # Loads a given ruby file, and runs class_eval against it in the context of the current
37: # object.
38: #
39: # Raises an IOError if the file cannot be found, or is not readable.
[2014-10-28T17:43:22+00:00] ERROR: Running exception handlers
[2014-10-28T17:43:22+00:00] ERROR: Exception handlers complete
[2014-10-28T17:43:22+00:00] FATAL: Stacktrace dumped to /var/lib/aws/opsworks/cache.stage2/chef-stacktrace.out
[2014-10-28T17:43:22+00:00] ERROR: /var/lib/aws/opsworks/cache.stage2/cookbooks/chef-aws-tag/recipes/ec2.rb:9: syntax error, unexpected keyword_do_block, expecting ']'
/var/lib/aws/opsworks/cache.stage2/cookbooks/chef-aws-tag/recipes/ec2.rb:12: syntax error, unexpected keyword_end, expecting ']'
[2014-10-28T17:43:22+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)