2014-10-02 45 views
0

我正在使用Vagrant創建一個廚師節點,並且它激活了映像,然後最初的廚師客戶端運行失敗。當我進入機器時,刪除/etc/chef/client.pem,並再次運行sudo chef-client,它成功了,但沒有從流浪漢傳入的run_list。這是失敗的樣子:流浪在廚師節點上創建不正確的client.pem(我認爲)

$ 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 /盒/ 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 

我試着在取消了在第二Vagrantfile的chef.client_key_path,沒有效果。這似乎工作得很好,當我把它全部放在一個Vagrantfile中時,但我想運行多臺機器而不需要將所有設置複製到每個Vagrantfile中。

我有一個完整的日誌與--debug標記,如果有人想要它。

回答

4

你有兩個問題回事

/etc/chef/client.pem

這聽起來像你的基地圖像具有/etc/chef/client.pem文件已經到位,這將無法驗證。您需要從基本映像中刪除該映像,以便首次運行時與主廚一起創建新的節點/客戶端。

或者(但我不建議這樣做),您可以在廚師客戶端配置器之前使用shell配置器,然後將其刪除。不利之處在於,每次打電話給流浪漢的提供都會導致嘗試用廚師服務器創建客戶端。

空運行列表

對於運行列表改變,創建一個新的廚師節點時,其運行列表僅當廚師運行成功保存。由於失敗,您的廚師服務器不存儲運行列表。當你直接登錄並運行chef-client時,它向服務器詢問你的運行列表,這個列表不存在,所以你運行了一個空的運行列表。

+0

我想空運行列表是因爲它失敗。但是,我非常確定我已經刪除了基本映像上的client.pem。我必須等待一個網絡管理員明天再次打開它,以便我可以檢查(呃)。 – Zook 2014-10-02 21:46:25

+0

看起來你可能是對的,我跑了'無所事事',並且機器上確實有'client.pem'。我明天會破解它。 – Zook 2014-10-02 21:49:50