【问题标题】:Chef Vagrant, Can't Find Folder厨师 Vagrant,找不到文件夹
【发布时间】:2015-03-30 04:49:59
【问题描述】:

厨师真的让我很困惑。你能帮我理解为什么它不起作用吗?

悬崖笔记

  • 我正在使用 Chef-Solo(不是 Berkshelf 或其他任何东西)
  • 当我从头开始设置时一切正常,我可以vagrant provision
  • 但如果我重新启动 HOST(我的主操作系统),它就会崩溃!
  • 它似乎正在查看我在 vagrant 配置中未指定的 .chef 文件夹。
  • 如果我重新启动,我必须执行 vmboxmanage box destroy ubuntu/trusty64 并重新下载所有内容并重做 vagrant up
  • 流浪者版本 1.7.2
  • 虚拟盒子版本 4.3.20r96996

Vagrant SSH 内部错误:

注意:这些文件不是指向.chef 文件夹,但它们在这里?

[2015-01-30T16:23:44+00:00] WARN: Did not find config file: 
/etc/chef/solo.rb, using command line options.

[2015-01-30T16:23:50+00:00] FATAL: None of the cookbook paths set in
Chef::Config[:cookbook_path], 
["/vagrant/.chef/cookbooks", "/vagrant/.chef/site-cookbooks"], 
contain any cookbooks

$vagrant up 和 $vagrant 配置错误:

==> default: Mounting shared folders...
default: /vagrant => /home/jesse/if/indieflix/vagrant
default: /home/vagrant/chef-recipes => /home/jesse/projects/if/vagrant/chef-recipes
default: /home/vagrant/chef-resources => /home/jesse/projects/if/vagrant/chef-resources

==> default: Running provisioner: chef_solo...
==> default: Detected Chef (latest) is already installed
Shared folders that Chef requires are missing on the virtual machine.
This is usually due to configuration changing after already booting the
machine. The fix is to run a `vagrant reload` so that the proper shared
folders will be prepared and mounted on the VM.

而且,vagrant reload 什么都不做。

流浪文件

# ...
config.vm.synced_folder "chef-recipes", "/vagrant/chef-recipes"
config.vm.synced_folder "chef-resources", "/vagrant/chef-resources"
# ...
config.vm.provision "chef_solo" do |chef|
    # Relevant to the Vagrantfile path
    chef.cookbooks_path = ["chef-recipes"]

    # This is just required by Chef, so it's minimal
    chef.environments_path = "chef-resources/environments"

    # This is the internal flag.
    chef.environment = "development"

    # This defines the cookbooks to run
    chef.roles_path = "chef-resources/roles"
    chef.add_role("development")
end

文件夹结构

chef-recipes/    (Git Submodule)
----python/
--------recipes/
------------default.rb
------------pip.rb
chef-resouces/   (Git Submodule)
----environments/
--------development.json
----roles/
--------development.json
Vagranfile

【问题讨论】:

  • 什么时候重启主机?哪个主机?虚拟机还是主机?难道是重启后virtualbox中机器的引用发生了变化?
  • 我不确定,但我怀疑机器的 .vagrant 目录中存储的 id 不是重新启动后 virtualbox 中来宾的 id,这就是为什么 vagrant 无法挂载共享带有 vagrant reload 的文件夹。您应该在重启后通过 vagrant 重启虚拟机(使用vagrant up,它会搜索虚拟机并打开电源,获取新的 ID 并安装我认为的正确文件夹)
  • 当你做一个 vagrant provision 时,它会生成一个 solo.rb 文件,一个 json 文件和一些其他的东西,然后用一些参数运行 chef-solo。当你简单地在命令行运行 chef-solo 时,它会搜索默认的配置文件,因为 vagrant 不会创建它。我没有使用 chef-solo 所以我可能错了,但路径似乎是:vagrant up; vagrant reload; vagrant provision(可能不需要 up)但是你必须让 vagrant 挂载共享文件夹并管理 chef 运行,否则你'必须在 ssh 会话中模仿它。
  • 我想补充一下,如果有人遇到此问题,似乎 Chef-Solo/Vagrant 中存在错误,主机上的挂载文件。我发现的唯一解决方法是:rm .vagrant/machines/default/virtualbox/synced_folders vagrant reload --provision
  • @JREAM 您的评论就是答案。我建议你应该回答你自己的问题并接受它作为答案。它将帮助其他 SOers 同事

标签: vagrant chef-infra chef-solo vagrantfile


【解决方案1】:

Anthony 在评论中建议我回答我的问题,因为它已在 cmets 中得到回答。在这里!

我没有使用 curl 安装,而是使用了omnibus,它在配置之前增加了另一个步骤:

$ vagrant plugin install vagrant-omnibus 

其次,Chef-Solo/Vagrant 从 Host 挂载文件存在问题。我发现的唯一解决方法是:

$ rm .vagrant/machines/default/virtualbox/synced_folders vagrant reload --provision 

可选:我创建了一个 bash 脚本以使上述操作更快一点:

reprovision.sh

#/bin/bash
rm .vagrant/machines/default/virtualbox/synced_folders
vagrant reload --provision

当然还有chmod +x reprovision.sh 和运行./reprovision.sh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多