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
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źć. –
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. –
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