Unter Verwendung der Ratschläge von @schlomoswidler zum Speicherort des benutzerdefinierten JSON in der ec2-Instanzdatei in seiner obigen Antwort habe ich Folgendes ausgeführt, um eine interaktive Chef-Shell zu erhalten, die die von mir gesuchten benutzerdefinierten opsworks-Attribute enthält:
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 >
Sie müssen natürlich den json im Ordner / var / lib / aws / opsworks / chef durch eine entsprechende Datei auf Ihrem System ersetzen.
Update für Chef 12 Linux OpsWorks Stacks (2016)
Chef 12 Linux-basierte OpsWorks-Stacks funktionieren anders als Chef 11-Stacks. Ein Unterschied besteht darin , dass Koch Suche ist jetzt der richtige Weg , um auf Daten zuzugreifen , die von OpsWorks innerhalb eines Rezeptes. Auf der Instanz wird nun durch Attributdaten ausgesetzt Daten Taschen (Stapel Migration & Referenz ). Sie können sich einen Überblick über die verfügbaren Datentaschen verschaffen, indem Sie das Verzeichnis auf einen Ihrer Chef-Läufe überprüfen. Jeder Datentasche hat unten ein eigenes Unterverzeichnis /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 ~]#
Sie können nicht die gleiche chef-shell
Technik verwenden, die ich oben für Chef 11-Stapel verwendet habe.
Der beste Weg, mit der Suche zu experimentieren, ist die Verwendung einer Pry-Sitzung , um Zugriff auf die Laufzeitumgebung des zweiten Kochlaufs zu erhalten, der für Kunden bestimmt ist.
Beispiel Pry Session
Im folgenden Beispiel löse ich zuerst das Lebenszyklusereignis "Rezepte ausführen" über die Benutzeroberfläche aus und verwende "opsworks_cookbook_demo :: foo" als das auszuführende Rezept. Dann SSH in meine Instanz und bearbeite /var/chef/cookbooks/opsworks_cookbook_demo/recipes/foo.rb
, indem ich die folgenden zwei Zeilen hinzufüge.
require "pry"
binding.pry
Dann laufe ich opsworks-agent-cli run
, um den letzten Lauf zu wiederholen. Sofern der letzte Lauf nicht vom Typ "Benutzerdefinierte Kochbücher aktualisieren" war, bleiben die lokalen Änderungen erhalten.
Das Rezept wird erneut ausgeführt, aber jetzt haben wir eine interaktive Shell zum Experimentieren. So können Sie zwei Suchvorgänge durchführen:
[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 …
Der aws-Blogbeitrag Quickly Explore the Chef Environment in AWS OpsWorks enthält weitere Beispiele für die Verwendung von pry in einer OpsWorks-Instanz.
[1] pry(#<Chef::CookbookVersion>)>
wo ich auf nichts zugreifen kann. Einstep
Wille bringt mich in[1] pry(#<Chef::RunContext::CookbookCompiler>):1>
das nicht hilfreich ist. Ein anderer,step
mit[1] pry(#<Chef::EventDispatch::Dispatcher>)>
dem Pry abstürztError: Cannot find local context. Did you use binding.pry?
- hat das jemand erlebt?