2013-08-15 10 views
5

Attualmente sto usando Vagrant con Chef-solo e funziona benissimo. Vorrei estendere la magia vagabonda al server dello chef. Ho acceso il mio provisioner nel Vagrantfile da cuoco-solo a chef-client e hanno aggiunto il codice necessario:errore vagabondo su durante la creazione del client? chef-stacktrace: OpenSSL :: PKey :: RSAErrore: necessaria chiave privata

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

mia domanda è come posso fare per automatizzare la creazione del client in modo da non fare devi impartire i comandi del coltello per creare il client e la chiave client.pem corrispondente. Successivamente, devo rilasciare i comandi del coltello per eliminare il client quando ho finito.

Speravo che questo fosse qualcosa che Vagrant può fare e tutto ciò di cui ho bisogno è un codice aggiunto al Vagrantfile, quindi i comandi "vagabondo" di "distruggere vagabondo" gestiscono tutto. Sfortunatamente il mio google su google non ha trovato niente. Ho visto post su come impostare chef-server con vagabondo ma sono interessato ai clienti dello chef. Forse un plugin per vagabondo o forse berkshelf?

Un'altra domanda .. proprio ora quando genero la chiave client.pem la metto nella directory condivisa:/vagrant in modo che la VM possa raggiungerla. C'è un modo migliore?

Grazie!

Ecco è l'uscita di 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. 

Ed ecco qual è il contenuto del file cuoco-stacktrace.out appare come il fallito vagrant up:

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>' 

E per buona misura .. ecco l'attuale Vagrantfile meno tutte le righe di commento:

# -*- mode: ruby -*- 
# vi: set ft=ruby : 
Vagrant.configure("2") do |config| 
    config.vm.hostname = "testcookbook-berkshelf" 
    config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal" 
    config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box" 
    config.vm.network :private_network, ip: "33.33.33.10" 
    config.ssh.max_tries = 40 
    config.ssh.timeout = 120 
    config.berkshelf.enabled = true 
    config.omnibus.chef_version = :latest 
    config.vm.provision :chef_client do |chef| 
    chef.chef_server_url  = "https://chef.mydomain.com" 
    chef.validation_client_name = "chef-validator" 
    chef.validation_key_path = "/Users/inigo/.chef/chef-validator.pem" 
    chef.run_list = [ 
     "recipe[testcookbook::default]" 
    ] 
    end 
end 

risposta

4

L'unica cosa che non va nel tuo esempio è che chef.validation_key_path sta probabilmente puntando al posto sbagliato.

È necessario impostarlo sul percorso della chiave di convalida nella workstation (probabilmente qualcosa come "#{ENV['HOME']}/.chef/validation.pem" o simile).

Una volta installato, quando si copia vagrant up, il file della chiave di convalida verrà copiato nella VM e verrà utilizzato per creare automaticamente client e node sul server Chef.

Se non ti dispiace la mia senza vergogna, ho scritto un plugin chiamato Vagrant Vagrant::Butcher che si occupa della cancellazione dei node e client automaticamente quando si emette un vagrant destroy.

+0

Questa parte funziona effettivamente. Prende il file validation.pem dalla mia stazione di lavoro che si trova in '/ etc/chef', quindi avvia la VM, installa lo chef ed esegue chef-client che tenta di registrare la nuova VM per gestire il server. Mi aspettavo che creasse il file client.pem a questo punto ma invece si lamenta solo che non riesce a trovarlo. –

+0

Grazie per il plugin! .. questo è esattamente quello di cui ho bisogno quando ho finito i test. Sarebbe bello se ci fosse una controparte per questo: 'vagabondo su '. Sono nuovo dello chef quindi probabilmente mi manca qualcosa che si prenda cura di quello che sto cercando già. –

+0

Come ho detto, 'vagrant up' dovrebbe creare l'oggetto sul server Chef e quindi creare il file' client.pem'. Se non funziona, allora c'è qualcosa di specifico nel tuo ambiente che non lo autorizza a farlo. Hai controllato che il client non esista sul server prima di eseguire 'up'? Se esiste, cancellarlo (e la relativa controparte del nodo) prima e riprovare. Se fallisce ancora, incolla l'errore completo da qualche parte - questo potrebbe darci un'idea di cosa sta succedendo. :) – cassianoleal