Назад | Перейти на главную страницу

«Сеть недоступна» с centos + chef + vagrant

Я пытаюсь написать Vagrantfile для установки nginx на образы CentOS 6.4.

В моем Vagrantfile у меня есть (ip отредактирован):

  config.vm.provision :shell,
   :inline => "echo \"export http_proxy=http://10.0.0.1:3128\; export https_proxy=https://10.0.0.1:3128\" >> /etc/profile"

  config.vm.provision :shell,
   :inline => "echo \"export HTTP_PROXY=http://10.0.0.1:3128\; export HTTPS_PROXY=https://10.0.0.1:3128\" >> /etc/profile"

   config.vm.provision :shell,
    :inline => "echo \"proxy=http://10.0.0.1:3128\" >> /etc/yum.conf"

  config.vm.provision "chef_solo" do |chef|
    chef.add_recipe "nginx"
    chef.json = {
      "http_proxy" => "http://10.0.0.1:3128",
      "https_proxy" => "https://10.0.0.1:3128",
      "nginx" => {
        "install_method" => "package"
      }
    }
  end

Когда я запускаю его, все в порядке, пока он не попытается запустить yum и не попытается установить файл GPG, когда я получаю сообщение об ошибке:

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'Base-CentOS-6.4'...

Progress: 10%
Progress: 20%
Progress: 40%
Progress: 60%
Progress: 80%
Progress: 90%
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[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] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Running provisioner: shell...
[default] Running: inline script
[default] Running provisioner: shell...
[default] Running: inline script
[default] Running provisioner: shell...
[default] Running: inline script
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
[2013-08-22T01:24:00+00:00] INFO: Forking chef instance to converge...
[2013-08-22T01:24:00+00:00] INFO: *** Chef 11.6.0 ***
[2013-08-22T01:24:00+00:00] INFO: Setting the run_list to ["recipe[nginx]"] from JSON
[2013-08-22T01:24:00+00:00] INFO: Run List is [recipe[nginx]]
[2013-08-22T01:24:00+00:00] INFO: Run List expands to [nginx]
[2013-08-22T01:24:00+00:00] INFO: Starting Chef Run for localhost
[2013-08-22T01:24:00+00:00] INFO: Running start handlers
[2013-08-22T01:24:00+00:00] INFO: Start handlers complete.
[2013-08-22T01:24:01+00:00] INFO: ohai plugins will be at: /etc/chef/ohai_plugins
[2013-08-22T01:24:01+00:00] INFO: remote_directory[/etc/chef/ohai_plugins] created directory /etc/chef/ohai_plugins
[2013-08-22T01:24:01+00:00] INFO: remote_directory[/etc/chef/ohai_plugins] mode changed to 755
[2013-08-22T01:24:01+00:00] INFO: cookbook_file[/etc/chef/ohai_plugins/README] created file /etc/chef/ohai_plugins/README
[2013-08-22T01:24:01+00:00] INFO: cookbook_file[/etc/chef/ohai_plugins/README] updated file contents /etc/chef/ohai_plugins/README
[2013-08-22T01:24:01+00:00] INFO: cookbook_file[/etc/chef/ohai_plugins/README] mode changed to 644
[2013-08-22T01:24:01+00:00] INFO: ohai[custom_plugins] reloaded
[2013-08-22T01:24:01+00:00] WARN: Cloning resource attributes for service[nginx] from prior resource (CHEF-3694)
[2013-08-22T01:24:01+00:00] WARN: Previous service[nginx]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/nginx/recipes/default.rb:44:in `from_file'
[2013-08-22T01:24:01+00:00] WARN: Current  service[nginx]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/nginx/recipes/default.rb:51:in `from_file'
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] created file /etc/chef/ohai_plugins/nginx.rb
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] updated file contents /etc/chef/ohai_plugins/nginx.rb
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] owner changed to 0
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] group changed to 0
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] mode changed to 755
[2013-08-22T01:24:01+00:00] INFO: template[/etc/chef/ohai_plugins/nginx.rb] sending reload action to ohai[reload_nginx] (immediate)
[2013-08-22T01:24:01+00:00] INFO: ohai[reload_nginx] reloaded
[2013-08-22T01:24:01+00:00] INFO: Adding RPM-GPG-KEY-EPEL-6 GPG key to /etc/pki/rpm-gpg/
[2013-08-22T01:24:12+00:00] INFO: remote_file[/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6] created file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

================================================================================
Error executing action `create` on resource 'remote_file[/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6]'
================================================================================


Errno::ENETUNREACH
------------------
Network is unreachable - connect(2)


Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/yum/providers/key.rb

 61:       remote_file "/etc/pki/rpm-gpg/#{new_resource.key}" do
 62:         source new_resource.url
 63:         mode "0644"
 64:         notifies :run, "execute[import-rpm-gpg-key-#{new_resource.key}]", :immediately
 65:       end
 66:     end



Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/yum/providers/key.rb:61:in `block in class_from_file'

remote_file("/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6") do
  provider Chef::Provider::RemoteFile
  action "create"
  retries 0
  retry_delay 2
  path "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6"
  backup 5
  atomic_update true
  source ["http://mirror.aarnet.edu.au/pub/epel/RPM-GPG-KEY-EPEL-6"]
  use_etag true
  use_last_modified true
  cookbook_name :yum
  mode "0644"
end



[2013-08-22T01:25:20+00:00] INFO: Running queued delayed notifications before re-raising exception
[2013-08-22T01:25:20+00:00] ERROR: Running exception handlers
[2013-08-22T01:25:20+00:00] ERROR: Exception handlers complete
[2013-08-22T01:25:20+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-08-22T01:25:20+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.
[Finished in 126.4s with exit code 127]

и трассировка стека (плюс трассировка стека):

[root@localhost ~]# cat /var/chef/cache/chef-stacktrace.out
Generated at 2013-08-22 01:25:20 +0000
Errno::ENETUNREACH: remote_file[/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6] (/tmp/vagrant-chef-1/chef-solo-1/cookbooks/yum/providers/key.rb line 61) had an error: Errno::ENETUNREACH: Network is unreachable - connect(2)

Когда я по ssh в бокс проверяю прокси и пытаюсь скрутить ключ, у меня нет проблем.

[drew@mymachine dev-environment]$ vagrant ssh
Last login: Thu Aug 22 01:25:36 2013 from 10.0.0.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ echo -e "$http_proxy"" - ""$https_proxy""\n""$HTTP_PROXY"" - ""$HTTPS_PROXY"
http://10.0.0.1:3128 - https://10.0.0.1:3128
http://10.0.0.1:3128 - https://10.0.0.1:3128

[vagrant@localhost ~]$ curl "http://mirror.aarnet.edu.au/pub/epel/RPM-GPG-KEY-EPEL-6"
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)

mQINBEvSKUIBEADLGnUj24ZVKW7liFN/JA5CgtzlNnKs7sBg7fVbNWryiE3URbn1
JXvrdwHtkKyY96/ifZ1Ld3lE2gOF61bGZ2CWwJNee76Sp9Z+isP8RQXbG5jwj/4B
...
XtfLk0W5Ab9pd7tKDR6QHI7rgHXfCopRnZ2VVQ==
=V/6I
-----END PGP PUBLIC KEY BLOCK-----
[vagrant@localhost ~]$

Я также с радостью могу использовать yum внутри коробки без каких-либо проблем.

Я за прокси-сервером в корпоративной сети, поэтому думаю, может быть, шеф-повар не обращает внимания на настройки прокси. Мой вопрос: кто-нибудь еще сталкивался с этим раньше или имел какое-либо представление о том, как управлять шеф-поваром за прокси-сервером, где они получают недоступные сети?

Я думаю, если я не смогу это исправить, просто скачаю и установлю ключ до того, как шеф-повар запустит, но я хотел бы знать, не происходит ли здесь что-то еще.

Вам нужно установить атрибуты прямо на объект шеф-повара:

config.vm.provision :chef_solo do |chef|
  chef.http_proxy = $http_proxy
  chef.https_proxy = $https_proxy
  chef.no_proxy = $no_proxy

Кроме того, вместо того, чтобы вручную вызывать сценарии оболочки для установки переменных среды, я бы рекомендовал использовать vagrant-proxyconf плагин. Обратите внимание, что это не распространяться на chef_solo, не удаляйте конфигурацию из приведенного выше фрагмента.

Конфигурация будет следующей:

$http_proxy  = "http://10.10.1.1:4128/"
$https_proxy = "http://10.10.1.1:4128/"
$no_proxy    =  "localhost,127.0.0.1,.ag.hermle.de"

Vagrant.configure("2") do |config|
  config.proxy.http     = $http_proxy
  config.proxy.https    = $https_proxy
  config.proxy.no_proxy = $no_proxy

Обновить: Вероятно, vagrant-proxyconf будет поддерживать конфигурацию прокси-сервера Chef в будущем, см. https://github.com/tmatilai/vagrant-proxyconf/issues/19.

Я думаю, что chef-solo не поддерживает настройку прокси. http://docs.opscode.com/config_rb_solo.html

Вы можете попытаться создать еще один полупустой рецепт повара, в котором ваши переменные http_proxy будут помещены в среду «vagrant up».

Что-то вроде:

  ENV['http_proxy'] = "http://10.0.0.1:3128"
  ENV['https_proxy'] = "https://10.0.0.1:3128"

А затем добавьте этот рецепт, чтобы он был на первых этапах выполнения вашего бродячего файла:

  chef.add_recipe '[my_http_recipe]'

Надеюсь это поможет