2013-08-15 4 views
5

Ich benutze derzeit Vagrant mit Chef-Solo und es funktioniert super. Ich möchte die Magiermagie auf den Chefserver erweitern. Ich habe meine provisioner im Vagrantfile von Koch-Solo Koch-Client geschaltet und haben den notwendigen Code hinzugefügt:vagrant up Fehler beim Erstellen des Clients? chef-stacktrace: OpenSSL :: PKey :: RSAError: Privater Schlüssel benötigt

chef.chef_server_url  = "https://chef.mydomain.com" 
chef.validation_client_name = "chef-validator" 
chef.validation_key_path = "/Users/inigo/.chef/chef-validator.pem" 

Meine Frage ist, wie gehe ich über die Erstellung des Client zu automatisieren, damit ich nicht müssen die Messer-Befehle zum Erstellen des Clients und des entsprechenden client.pem-Schlüssels ausgeben. Dann muss ich später die Messerbefehle ausgeben, um den Client zu löschen, wenn ich damit fertig bin.

Ich hatte gehofft, dass dies etwas ist, was Vagrant tun kann und alles, was ich brauche, wäre ein zusätzlicher Code für die Vagrantfile, dann würden die "vagrant up" - "vagrant destroy" -Befehle alles handhaben. Leider habe ich nichts gegoogelt. Ich habe Posts darüber gesehen, wie ich einen Chef-Server mit Vagabund einrichten kann, aber ich bin an Chefküchen interessiert. Vielleicht ein Plugin für Vagabund oder vielleicht Berkshelf?

Eine weitere Frage .. gerade jetzt, wenn ich den Schlüssel client.pem erzeuge, lege ich es in das freigegebene Verzeichnis:/vagrant, damit die VM zu ihm gelangen kann. Gibt es einen besseren Weg?

Danke!

Hier ist die Ausgabe von vagrant up:

$ vagrant up 
Bringing machine 'default' up with 'virtualbox' provider... 
[default] Importing base box 'Berkshelf-CentOS-6.3-x86_64-minimal'... 
[default] Matching MAC address for NAT networking... 
[default] Setting the name of the VM... 
[default] Clearing any previously set forwarded ports... 
[Berkshelf] Uploading cookbooks to 'https://chef.mydomain.com:443/' 
[Berkshelf] Using testcookbook (0.0.1) 
[Berkshelf] Uploading testcookbook (0.0.1) to: 'https://chef.mydomain.com:443/' 
[default] Creating shared folders metadata... 
[default] Clearing any previously set network interfaces... 
[default] Preparing network interfaces based on configuration... 
[default] Forwarding ports... 
[default] -- 22 => 2222 (adapter 1) 
[default] Booting VM... 
[default] Waiting for VM to boot. This can take a few minutes. 
[default] VM booted and ready for use! 
[default] Setting hostname... 
[default] Configuring and enabling network interfaces... 
[default] Mounting shared folders... 
[default] -- /vagrant 
[default] Installing Chef 11.6.0 Omnibus package... 
[default] Running provisioner: chef_client... 
Creating folder to hold client key... 
Uploading chef client validation key... 
Generating chef JSON and uploading... 
Running chef-client... 
[2013-08-15T15:42:28+00:00] INFO: Forking chef instance to converge... 
[2013-08-15T15:42:28+00:00] INFO: *** Chef 11.6.0 *** 
[2013-08-15T15:42:28+00:00] INFO: Client key /etc/chef/client.pem is not present - registering 

==================================================================================== 
Chef encountered an error attempting to create the client "mytestcookbook-berkshelf" 
==================================================================================== 


[2013-08-15T15:42:29+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out 
[2013-08-15T15:42:29+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 
Chef never successfully completed! Any errors should be visible in the 
output above. Please fix your recipes so that they properly complete. 

Und hier ist es, was der Inhalt der Koch-stacktrace.out Datei wie über gescheiterten vagrant up aussieht:

Generated at 2013-08-16 03:42:20 +0000 
OpenSSL::PKey::RSAError: private key needed. 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/mixlib-authentication-1.3.0/lib/mixlib/authentication/signedheaderauth.rb:94:in `private_encrypt' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/mixlib-authentication-1.3.0/lib/mixlib/authentication/signedheaderauth.rb:94:in `sign' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest/auth_credentials.rb:51:in `signature_headers' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest.rb:322:in `authentication_headers' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest.rb:368:in `build_headers' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest.rb:166:in `raw_http_request' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest.rb:161:in `api_request' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/rest.rb:121:in `post' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/api_client/registration.rb:93:in `create' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/api_client/registration.rb:84:in `create_or_update' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/api_client/registration.rb:57:in `run' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/client.rb:376:in `register' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/client.rb:480:in `do_run' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/client.rb:199:in `block in run' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/client.rb:193:in `fork' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/client.rb:193:in `run' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/application.rb:183:in `run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/application/client.rb:302:in `block in run_application' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/application/client.rb:294:in `loop' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/application/client.rb:294:in `run_application' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/application.rb:66:in `run' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/bin/chef-client:26:in `<top (required)>' 
/usr/bin/chef-client:23:in `load' 
/usr/bin/chef-client:23:in `<main>' 

Und für eine gute Maßnahme .. Hier ist die aktuelle Vagrantfile abzüglich aller Kommentarzeilen:

Antwort

4

Das einzige, was in Ihrem Beispiel falsch ist, ist, dass chef.validation_key_path wahrscheinlich auf den falschen Platz zeigt.

Sie müssen das auf den Speicherort des Validierungsschlüssels in Ihrer Arbeitsstation (wahrscheinlich so etwas wie "#{ENV['HOME']}/.chef/validation.pem" oder ähnliches) festlegen.

Sobald Sie, dass an Ort und Stelle, wenn Sie vagrant up es wird die Validierung Schlüsseldatei an die VM kopieren und verwenden sie die client und node automatisch auf dem Chef-Server zu erstellen.

Wenn Sie nicht meine schamlose Werbung nichts, ich habe einen Vagrant Plugin Vagrant::Butcher, die sich mit der Streichung von node und client automatisch, wenn Sie einen vagrant destroy Ausgabe genannt geschrieben.

+0

Dieser Teil funktioniert tatsächlich. Es nimmt die validation.pem-Datei von meiner Workstation, die sich in '/ etc/chef' befindet, bootet dann die VM, installiert den Chef und führt den Chef-Client aus, der versucht, die neue VM zu registrieren, um den Server zu betreuen. Ich habe erwartet, dass es an diesem Punkt die client.pem-Datei erstellt, aber stattdessen klagt es nur, dass es es nicht finden kann. –

+0

Danke für das Plugin! .. das ist genau das, was ich brauche, wenn ich mit dem Testen fertig bin. Es wäre schön, wenn es ein Gegenstück dafür gäbe: "vagrant up". Ich bin neu zum Koch, also vermisse ich wahrscheinlich etwas, das sich um das kümmert, wonach ich schon suche. –

+0

Wie gesagt, 'vagrant up' sollte das Objekt auf dem Chef-Server erstellen und dann die' client.pem'-Datei erstellen. Wenn es scheitert, gibt es etwas Bestimmtes für Ihre Umgebung, das es nicht erlaubt. Haben Sie überprüft, dass der Client auf dem Server nicht existiert, bevor Sie 'up' ausführen? Wenn es existiert, löschen Sie es (und sein Gegenstück) vor und versuchen Sie es erneut. Wenn es immer noch fehlschlägt, fügen Sie den vollständigen Fehler irgendwo ein - das könnte uns einen Hinweis geben, was vor sich geht. :) – cassianoleal