通过 Vagrant 进行 Chef 客户端服务器身份验证
Chef Client Server Authentication through Vagrant
我正在尝试通过连接到 Chef 服务器来提供带有 Chef 的 Vagrant 实例。
我的 Vagrantfile
看起来与此类似:
Vagrant.configure("2") do |config|
config.vm.box = "opentable/win-2012r2-standard-amd64-nocm"
config.vm.provider = "virtualbox"
config.vm.communicator = "winrm"
config.vm.guest = :windows
config.omnibus.chef_version = :latest
config.berkshelf.enabled = true
config.vm.provision :chef_client do |chef|
chef.chef_server_url = "https://chef.website.com"
chef.validation_key_path = "C:/chef/validation.pem"
chef.run_list = ["recipe[cookbook::default]"]
end
end
根据this documentation,这个Vagrantfile
应该包含我需要连接到Chef服务器并下载相关的cookbooks和databags的所有字段。
但是,当 运行使用 Chef 客户端配置程序时,我 运行 遇到以下错误:
The following berks command failed to execute:
C:\opscode\chefdk\embedded\bin/berks.BAT upload --berksfile C:/path/to/cookbook/Berksfile --no-freeze --force
The stdout and stderr are shown below:
stdout: E, [2015-08-10T17:02:57.654352 #8488] ERROR -- : Ridley::Errors::ClientKeyNotFoundOrInvalid: client key is not found or invalid or not found at: 'C:/chef/client.pem'
的确, client.pem
不存在。
虽然错误本身很容易解释,但我不明白为什么我需要在初始 Chef 客户端 运行.
上指定 client.pem
有没有办法让 Vagrant 自己创建它?更好的是,我可以让它根本不需要客户端标识符吗?
这只是一个 Vagrant 实例,因此我不需要将此节点保留在 Chef 服务器上。基于 the Chef client provisioner documentation,我不明白为什么我需要一个 client.pem
文件,因为说明中没有提到这一点。
感谢您的帮助!
尝试禁用 Berkshelf
config.berkshelf.enabled = false
针对 Chef 服务器引导新的 Chef 客户端不需要 Berkshelf。 Berkshelf 是 Chef 工作站 上用于管理 Chef 服务器上的食谱的工具。
PS
某一阶段的 Vagrant-berkshelf 插件是 deprecated in favour of Test kitchen。它似乎又回来了,但与此同时,我已经逐渐意识到测试驱动基础架构的好处!
我正在尝试通过连接到 Chef 服务器来提供带有 Chef 的 Vagrant 实例。
我的 Vagrantfile
看起来与此类似:
Vagrant.configure("2") do |config|
config.vm.box = "opentable/win-2012r2-standard-amd64-nocm"
config.vm.provider = "virtualbox"
config.vm.communicator = "winrm"
config.vm.guest = :windows
config.omnibus.chef_version = :latest
config.berkshelf.enabled = true
config.vm.provision :chef_client do |chef|
chef.chef_server_url = "https://chef.website.com"
chef.validation_key_path = "C:/chef/validation.pem"
chef.run_list = ["recipe[cookbook::default]"]
end
end
根据this documentation,这个Vagrantfile
应该包含我需要连接到Chef服务器并下载相关的cookbooks和databags的所有字段。
但是,当 运行使用 Chef 客户端配置程序时,我 运行 遇到以下错误:
The following berks command failed to execute:
C:\opscode\chefdk\embedded\bin/berks.BAT upload --berksfile C:/path/to/cookbook/Berksfile --no-freeze --force
The stdout and stderr are shown below:
stdout: E, [2015-08-10T17:02:57.654352 #8488] ERROR -- : Ridley::Errors::ClientKeyNotFoundOrInvalid: client key is not found or invalid or not found at: 'C:/chef/client.pem'
的确, client.pem
不存在。
虽然错误本身很容易解释,但我不明白为什么我需要在初始 Chef 客户端 运行.
上指定client.pem
有没有办法让 Vagrant 自己创建它?更好的是,我可以让它根本不需要客户端标识符吗?
这只是一个 Vagrant 实例,因此我不需要将此节点保留在 Chef 服务器上。基于 the Chef client provisioner documentation,我不明白为什么我需要一个 client.pem
文件,因为说明中没有提到这一点。
感谢您的帮助!
尝试禁用 Berkshelf
config.berkshelf.enabled = false
针对 Chef 服务器引导新的 Chef 客户端不需要 Berkshelf。 Berkshelf 是 Chef 工作站 上用于管理 Chef 服务器上的食谱的工具。
PS
某一阶段的 Vagrant-berkshelf 插件是 deprecated in favour of Test kitchen。它似乎又回来了,但与此同时,我已经逐渐意识到测试驱动基础架构的好处!