Usando o conselho de @schlomoswidler sobre a localização do json personalizado no arquivo de instância ec2 em sua resposta acima, executei o seguinte para obter um shell de chef interativo que inclui os atributos de opsworks personalizados que estava procurando:
root@mongodb1:/opt/aws/opsworks/current/bin# /opt/aws/opsworks/current/bin/chef-shell -j /var/lib/aws/opsworks/chef/2014-10-27-13-46-53-01.json
loading configuration: none (standalone session)
Session type: standalone
Loading.....done.
This is the chef-shell.
Chef Version: 11.10.4
http://www.opscode.com/chef
http://docs.opscode.com/
run 'help' for help, 'exit' or ^D to quit.
Ohai2u [email protected]!
chef > node['opsworks']['instance']['layers']
=> ["mongodb"]
chef >
Você obviamente precisa substituir o json na pasta / var / lib / aws / opsworks / chef por um arquivo apropriado em seu sistema.
Atualização para as pilhas Linux OpsWorks do Chef 12 (2016)
As pilhas OpsWorks baseadas no Linux do Chef 12 funcionam de forma diferente do Chef 11 pilhas. Uma diferença é que a pesquisa do chef agora é a maneira correta de acessar os dados fornecidos pelo OpsWorks dentro de uma receita. Na instância, os dados de atributo agora são expostos por meio de sacos de dados (pilha migração & referência ). Você pode obter uma visão geral dos sacos de dados disponíveis, inspecionando o diretório de uma das suas execuções Chef. Cada pacote de dados tem seu próprio subdiretório abaixo de /var/chef/runs/<ID>/data_bags/
.
[root@asd1 ~]# ll /var/chef/runs/c7f67e3e-c15d-4159-bb14-5bde07751543/data_bags/
total 36
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_app
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_command
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_ecs_cluster
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_elastic_load_balancer
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_instance
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_layer
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_rds_db_instance
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_stack
drwxr-xr-x 2 root root 4096 Nov 23 21:19 aws_opsworks_user
[root@asd1 ~]#
Você não pode usar a mesma técnica chef-shell
que usei acima para as pilhas do Chef 11.
A melhor maneira que eu conheço para experimentar a pesquisa é usar uma sessão Pry para obter acesso ao ambiente de tempo de execução de o segundo chef que é dedicado aos clientes.
Sessão de Prova de Pesquisa
No exemplo a seguir, primeiro disparo o evento de ciclo de vida "Execute Recipes" na interface do usuário e uso "opsworks_cookbook_demo :: foo" como a receita a ser executada. Então eu SSH na minha instância e edite /var/chef/cookbooks/opsworks_cookbook_demo/recipes/foo.rb
, adicionando as duas linhas seguintes.
require "pry"
binding.pry
Em seguida, corro opsworks-agent-cli run
para repetir a última execução. A menos que a execução mais recente tenha sido do tipo "Atualizar livros de receitas personalizados", isso deixará as alterações locais em vigor.
A receita será executada novamente, mas agora temos um shell interativo para experimentar. Veja como você pode realizar duas pesquisas:
[root@asd1 ~]# opsworks-agent-cli run
[2015-11-23 21:46:35] INFO [opsworks-agent(3396)]: About to re-run 'execute_recipes' from 2015-11-23T21:43:15
... lots more output ...
From: /var/chef/runs/76ff2d58-ab8f-4cf6-8744-9562025321fd/local-mode-cache/cache/cookbooks/opsworks_cookbook_demo/recipes/foo.rb @ line 4 Chef::Mixin::FromFile#from_file:
1: Chef::Log.info "foo"
2:
3: require "pry"
=> 4: binding.pry
search(:aws_opsworks_stack)
=> [{"data_bag_item('aws_opsworks_stack', 'f24bd5ea-3ff2-4a1a-a4e4-9298495ae263')"=>
{"arn"=>"arn:aws:opsworks:us-west-2:153700967203:stack/f24bd5ea-3ff2-4a1a-a4e4-9298495ae263/",
"custom_cookbooks_source"=>{"type"=>"s3", "url"=>"redacted", "username"=>nil, "password"=>nil, "ssh_key"=>nil, "revision"=>nil},
"name"=>"susan",
"region"=>"us-west-2",
"stack_id"=>"f24bd5ea-3ff2-4a1a-a4e4-9298495ae263",
"use_custom_cookbooks"=>true,
"vpc_id"=>nil,
"id"=>"f24bd5ea-3ff2-4a1a-a4e4-9298495ae263",
"chef_type"=>"data_bag_item",
"data_bag"=>"aws_opsworks_stack"}}]
search(:aws_opsworks_instance, "self:true")
=> [{"data_bag_item('aws_opsworks_instance', 'asd1')"=>
{"ami_id"=>"ami-d93622b8",
"architecture"=>"x86_64",
"auto_scaling_type"=>nil,
"availability_zone"=>"us-west-2a",
"created_at"=>"2015-11-20T12:48:29+00:00",
"ebs_optimized"=>false,
"ec2_instance_id"=>"i-be823867",
"elastic_ip"=>nil,
"hostname"=>"asd1",
"instance_id"=>"42d28e39-29a8-4fdf-a327-afdc23668ff1",
"instance_type"=>"c3.large",
"layer_ids"=>["f08fb7e2-9278-498a-8c0d-7d1c1bae22aa"],
… lots more data …
A postagem no blog da aws Rapidamente Explore o Ambiente do Chef no AWS OpsWorks tem outros exemplos de como usar a alavanca em uma instância do OpsWorks.