2013-08-15 5 views
5

Obecnie używam Vagrant z Chef-solo i działa świetnie. Chciałbym rozszerzyć magię włóczęgów na serwer szefa kuchni. Mam włączone mój Provisioner w Vagrantfile od Chef-Chef-solowych do klienta i dodałem niezbędne kod:Błąd Vagrant Up podczas tworzenia klienta? chef-stacktrace: OpenSSL :: PKey :: RSAError: potrzebny klucz prywatny

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

Moje pytanie brzmi jak mogę iść o automatyzację tworzenia klienta, więc nie musieć wydać polecenia noża, aby utworzyć klienta i odpowiedni klucz client.pem. Później muszę wydać polecenia noża, aby usunąć klienta, gdy skończę.

Miałem nadzieję, że to jest coś, co Vagrant może zrobić, a wszystko, czego potrzebuję, to jakiś dodany kod do Vagrantfile, wtedy komendy "vagrant up" "vagrant destroy" poradzą sobie z tym wszystkim. Niestety moje szukanie w Google nie przyniosło niczego. Widziałem posty, jak skonfigurować serwer szefa kuchni z włóczęgą, ale interesują mnie klienci szefa kuchni. Być może wtyczka dla włóczęgi lub może berkshelf?

Jeszcze jedno pytanie ... teraz, kiedy generuję klucz client.pem, umieszczam go w katalogu współdzielonym:/vagrant, aby maszyna wirtualna mogła się do niego dostać. Czy istnieje lepszy sposób?

Dzięki!

Oto jest wyjście 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. 

A oto co zawartość pliku Chef-stacktrace.out wygląda na nieudanej 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>' 

A na dokładkę .. Oto aktualny Vagrantfile minus wszystkie linie komentarza:

# -*- 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 

Odpowiedz

4

Jedyną rzeczą, która jest błędna w twoim przykładzie jest to, że chef.validation_key_path prawdopodobnie wskazuje niewłaściwe miejsce.

Musisz ustawić to położenie klucza sprawdzania poprawności na twojej stacji roboczej (prawdopodobnie coś w rodzaju "#{ENV['HOME']}/.chef/validation.pem" lub podobnego).

Po zainstalowaniu, po skopiowaniu pliku klucza sprawdzania poprawności na maszynę wirtualną, zostanie ona automatycznie skopiowana na serwer VM i automatycznie utworzona na serwerze Chef.

Jeśli nie przeszkadza mój bezwstydny wtyczkę, pisałem wtyczki Vagrant nazwie Vagrant::Butcher który zajmuje się skreślenia node i client automatycznie po wydać vagrant destroy.

+0

Ta część działa właściwie. Zajmuje plik validation.pem z mojej stacji roboczej, który znajduje się w '/ etc/chef', następnie uruchamia VM, instaluje szefa kuchni i uruchamia klienta-szefa kuchni, który próbuje zarejestrować nową maszynę wirtualną dla szefa kuchni. Oczekiwałem, że w tym momencie utworzy plik client.pem, ale zamiast tego narzeka, że ​​nie może go znaleźć. –

+0

Dzięki za wtyczkę! ... dokładnie tego potrzebuję, kiedy skończę testować. Byłoby miło, gdyby był odpowiednik: "włóczęga w górę". Jestem nowy dla szefa kuchni, więc prawdopodobnie brakuje mi czegoś, co dba o to, czego już szukam. –

+0

Jak już powiedziałem, 'vagrant up' powinien utworzyć obiekt na serwerze Chef, a następnie utworzyć plik' client.pem'. Jeśli się nie powiedzie, jest coś specyficznego dla twojego środowiska, które nie pozwala na to. Czy sprawdziłeś, że klient nie istnieje na serwerze przed uruchomieniem 'up'? Jeśli istnieje, usuń go (i jego odpowiednik węzła) przed i spróbuj ponownie. Jeśli nadal się nie uda, wklej gdzieś cały błąd - to może nam dać wskazówkę, co się dzieje. :) – cassianoleal

Powiązane problemy