Vagrant создает неправильный client.pem на узле шеф-повара (я думаю)

Я использую Vagrant для создания узла шеф-повара, и он запускает образ, а затем первоначальный запуск клиента шеф-повара завершается сбоем. Когда я подключаюсь к машине по ssh, удаляю /etc/chef/client.pem и снова запускаю sudo chef-client, это удается, но без списка run_list, который я передал из vagrant. Вот как выглядит сбой:

$ vagrant up
Bringing machine 'default' up with 'vsphere' provider...
==> default: Calling vSphere CloneVM with the following settings:
==> default:  -- Template VM: myOrg/vm/myFolder/vagrantchefnode
==> default:  -- Target VM: myOrg/vm/myFolder/test2
==> default: Waiting for SSH to become available...
==> default: New virtual machine successfully cloned and started
==> default: Rsyncing folder: /home/user/.vagrant.d/boxes/test2/ => /vagrant
==> default: Running provisioner: chef_client...
==> default: Creating folder to hold client key...
==> default: Uploading chef client validation key...
Generating chef JSON and uploading...
==> default: Running chef-client...
==> default: stdin: is not a tty
==> default: [2014-10-02T16:11:19-05:00] INFO: Forking chef instance to converge...
==> default: [2014-10-02T16:11:19-05:00] INFO: *** Chef 11.16.2 ***
==> default: [2014-10-02T16:11:19-05:00] INFO: Chef-client pid: 6080
==> default: [2014-10-02T16:11:21-05:00] INFO: HTTP Request Returned 401 Unauthorized: error

==> default: Failed to authenticate to the chef server (http 401).

==> default: Failed to authenticate as 'test2'. Ensure that your node_name and client key are correct.

==> default: chef_server_url   "https://server.myorg.com"
==> default: node_name         "test2"
==> default: client_key        "/etc/chef/client.pem"

Это мои Vagrantfiles:

1) Vagrantfile в комплекте с коробкой:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.provider :vsphere do |vsphere|
    vsphere.host = 'vsphereserver.myorg.com'
    vsphere.compute_resource_name = 'TestDev'
    vsphere.user = 'vagrantadmin'
    vsphere.password = 'password'
    vsphere.insecure = true
  end

  config.ssh.username = 'auto'
  config.ssh.private_key_path = '~/.vagrant.d/id_rsa'
end

2) Vagrantfile в моем домашнем каталоге (~/.vagrant.d):

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = 'vsphere'

  config.vm.provider :vsphere do |vsphere|
    vsphere.template_name = 'vagrantchefnode'
  end

  config.vm.provision "chef_client", id: "chef" do |chef|
    chef.provisioning_path = "/etc/chef"
    chef.chef_server_url = "https://chefserver.myorg.com"
    chef.validation_key_path = "/home/user/.vagrant.d/chef/validation.pem"
#    chef.client_key_path = "/etc/chef/client.pem"
    chef.validation_client_name = "chef-validator"
    chef.custom_config_path = "/home/user/.vagrant.d/Vagrantfile.chef"
    chef.delete_node = true
    chef.delete_client = true
    chef.add_role "base"
  end
end

3) Vagrantfile из каталога проекта (~/.vagrant.d/boxes/chefnode1):

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.provider :vsphere do |vsphere|
#    vsphere.template_name = 'chefnode'
    vsphere.customization_spec_name = 'test2'
    vsphere.name = 'test2'
  end

  config.vm.provision "chef_client", id: "chef" do |chef|
    chef.node_name = "test2"
    chef.add_role "dev"
  end
end

Я пробовал раскомментировать chef.client_key_path во втором Vagrantfile, но безрезультатно. Это, казалось, работало просто отлично, когда у меня было все это в одном Vagrantfile, но я хочу запустить несколько машин, не копируя все настройки в каждый Vagrantfile.

У меня есть полный лог с тегом --debug, если кому надо.


person Zook    schedule 02.10.2014    source источник


Ответы (1)


У вас две проблемы

/etc/chef/client.pem

Похоже, что в вашем базовом образе уже есть файл /etc/chef/client.pem, который не сможет пройти аутентификацию. Вам нужно удалить это из вашего базового образа, чтобы новый узел/клиент был создан с помощью шеф-повара при первом запуске.

В качестве альтернативы (но я этого не предлагаю) вы можете использовать средство подготовки оболочки перед поставщиком шеф-клиента и просто удалить его вместе с ним. Недостатком является то, что каждый вызов vagrant provision будет приводить к новой попытке создать клиент с помощью chef-server.

Пустой список запусков

Что касается изменения списка выполнения, то при создании нового узла шеф-повара его список выполнения сохраняется только в случае успешного запуска шеф-повара. Поскольку это не удалось, ваш сервер chef не сохранил список выполнения. Когда вы затем входите напрямую и запускаете chef-client, он запрашивает у сервера ваш список выполнения, которого не существует, поэтому вы запускаете пустой список выполнения.

person Tejay Cardon    schedule 02.10.2014
comment
Я решил, что пустой список запусков был из-за того, что он терпел неудачу. Однако я был чертовски уверен, что уже удалил client.pem из базового образа. Мне придется подождать, пока сетевой администратор снова не откроет его завтра, чтобы я мог проверить (тьфу). - person Zook; 03.10.2014
comment
Похоже, вы можете быть правы, я запустил vagrant up --no-provision, и на машине действительно есть client.pem. Я взломаю его завтра. - person Zook; 03.10.2014