测试食谱时,Chef-Solo 在 Vagrant 中找不到设备错误
Device not found error in Vagrant with Chef-Solo while testing cookbook
我在存储库中创建了一些说明书,这些说明书在 AWS 的实例中执行。我在 AWS 中的 dev/xvdb
位置手动创建一个 EBS 卷,然后使用以下厨师代码安装它:
mount "mount encrypted EBS volume at opt directory for app deployment" do
action [:mount, :enable]
device "/dev/xvdb"
fstype "ext3"
mount_point "/opt"
end
现在,为了在本地测试说明书,我配置了一个 vagrant box 并尝试 运行 包含上述代码的说明书。我有以下 Vagrant 配置:
Vagrant.configure("2") do |config|
config.vm.box = "precise32"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "cookbooks"
chef.data_bags_path = "databags"
chef.environments_path = "environments"
chef.environment = "dev"
chef.roles_path = "roles"
chef.add_role("webapp")
end
end
但是由于 Vagrant box 没有 /dev/xvdb
文件夹路径,它失败了:
==> default: Chef::Exceptions::Mount
==> default:
==> default: -----------------------
==> default:
==> default: Device /dev/xvdb does not exist
如何在我的 vagrant box 上启用本地测试?
添加类似 only_if { node['ec2'] }
的内容,这样它只会将该资源集中在实际的 EC2 机器上。您还可以使用 node['cloud']
或类似的东西来检查,或者如果您想以某种方式使其完全通用,only_if { ::File.exist?('/dev/xvdb') }
.
我在存储库中创建了一些说明书,这些说明书在 AWS 的实例中执行。我在 AWS 中的 dev/xvdb
位置手动创建一个 EBS 卷,然后使用以下厨师代码安装它:
mount "mount encrypted EBS volume at opt directory for app deployment" do
action [:mount, :enable]
device "/dev/xvdb"
fstype "ext3"
mount_point "/opt"
end
现在,为了在本地测试说明书,我配置了一个 vagrant box 并尝试 运行 包含上述代码的说明书。我有以下 Vagrant 配置:
Vagrant.configure("2") do |config|
config.vm.box = "precise32"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "cookbooks"
chef.data_bags_path = "databags"
chef.environments_path = "environments"
chef.environment = "dev"
chef.roles_path = "roles"
chef.add_role("webapp")
end
end
但是由于 Vagrant box 没有 /dev/xvdb
文件夹路径,它失败了:
==> default: Chef::Exceptions::Mount ==> default: ==> default: ----------------------- ==> default: ==> default: Device /dev/xvdb does not exist
如何在我的 vagrant box 上启用本地测试?
添加类似 only_if { node['ec2'] }
的内容,这样它只会将该资源集中在实际的 EC2 机器上。您还可以使用 node['cloud']
或类似的东西来检查,或者如果您想以某种方式使其完全通用,only_if { ::File.exist?('/dev/xvdb') }
.