使用yaml文件进行Vagrant时出现意外错误

时间:2016-04-22 14:30:28

标签: ruby docker vagrant yaml

我正在使用yaml

试验这个问题

我正在使用包含配置到我的Vagrantfile的yaml文件正常,经过多次更改(在Vagrant文​​件中添加迭代)后, vagrant up 意外地显示错误

我尝试恢复一个“正常工作”的旧提交,即使代码工作,错误仍然存​​在。

我尝试了很多选项,如:

    从头开始
  • 流浪汉(删除.vagrant,boxes and vagrant.d)
  • 卸载并安装vagrant

我决定删除yaml文件及其引用, vagrant up 再次工作。 最后

出于任何原因,vagrant显示此错误与ruby尝试转换为数组有关。

任何想法?

我的设置

  • mac:OS X Yosemite,版本10.10.5
  • vagrant:1.8.1
  • ruby​​:2.0.0p481
  • docker host:hashicorp / boot2docker

我的Vagrantfile

require 'yaml'
config = YAML.load_file('develop.yaml')
Vagrant.configure("2") do |config|
config.vm.define "machine1" do |a|
a.vm.provider "docker" do |d|
  d.image = config["image"]
... more 

我的develop.yaml

---
image: "registry/user/image:xx"
... more
$ vagrant up

Bringing machine 'author' up with 'docker' provider...
==> author: Docker host is required. One will be created if necessary...
author: Vagrant will now create or start a local VM to act as the Docker
author: host. You'll see the output of the `vagrant up` for this VM below.
author:  
dockerhost: Importing base box 'hashicorp/boot2docker'...
dockerhost: Matching MAC address for NAT networking...
dockerhost: Checking if box 'hashicorp/boot2docker' is up to date...
dockerhost: Setting the name of the VM: dockerHost_dockerhost_1461332944380_50015
dockerhost: Clearing any previously set network interfaces...
dockerhost: Preparing network interfaces based on configuration...
dockerhost: Adapter 1: nat
dockerhost: Forwarding ports...
dockerhost: 2375 (guest) => 2375 (host) (adapter 1)
dockerhost: 4502 (guest) => 4502 (host) (adapter 1)
dockerhost: 22 (guest) => 2222 (host) (adapter 1)
dockerhost: Running 'pre-boot' VM customizations...
dockerhost: Booting VM...
dockerhost: Waiting for machine to boot. This may take a few minutes...
dockerhost: SSH address: 127.0.0.1:2222
dockerhost: SSH username: docker
dockerhost: SSH auth method: password
dockerhost: Machine booted and ready!
==> author: Syncing folders to the host VM...
dockerhost: Installing rsync to the VM...
dockerhost: The machine you're rsyncing folders to is configured to use
dockerhost: password-based authentication. Vagrant can't script rsync to automatically
dockerhost: enter this password, so you'll likely be prompted for a password
dockerhost: shortly.
dockerhost: 
dockerhost: If you don't want to have to do this, please enable automatic
dockerhost: key insertion using `config.ssh.insert_key`.
dockerhost: Rsyncing folder: /Users/it/workspace/docker-provisioning/ => /var/lib/docker/docker_1461332968_17083
docker@127.0.0.1's password: 
==> author: Logging in to Docker server...
/opt/vagrant/embedded/gems/gems/vagrant-   1.8.1/plugins/providers/docker/driver.rb:96:in `flatten': can't convert Vagrant::Config::V2::DummyConfig to Array (Vagrant::Config::V2::DummyConfig#to_ary gives  Vagrant::Config::V2::DummyConfig) (TypeError)
from /opt/vagrant/embedded/gems/gems/vagrant- 1.8.1/plugins/providers/docker/driver.rb:96:in `login'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/login.rb:24:in `block in call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/provider.rb:116:in `block (2 levels) in host_vm_lock'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:561:in `lock'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/provider.rb:115:in `block in host_vm_lock'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/provider.rb:114:in `synchronize'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/provider.rb:114:in `host_vm_lock'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/login.rb:21:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/prepare_nfs_settings.rb:15:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/synced_folder_cleanup.rb:28:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/synced_folders/nfs/action_cleanup.rb:25:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/prepare_nfs_valid_ids.rb:14:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/host_machine_sync_folders.rb:41:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/host_machine_build_dir.rb:19:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/init_state.rb:15:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/call.rb:53:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/message.rb:17:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/call.rb:53:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/call.rb:53:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/destroy_build_image.rb:43:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/handle_box.rb:25:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/call.rb:53:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/providers/docker/action/host_machine.rb:35:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/config_validate.rb:25:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/handle_box.rb:25:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:95:in `block in finalize_action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builtin/call.rb:53:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/warden.rb:34:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/builder.rb:116:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `block in run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/util/busy.rb:19:in `busy'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:224:in `action_raw'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:199:in `block in action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:561:in `lock'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:185:in `call'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:185:in `action'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/batch_action.rb:82:in `block (2 levels) in run'

2 个答案:

答案 0 :(得分:2)

Vagrant.configure("2")块内,使用相同名称的block参数覆盖config变量。因此,在块内,config引用了vagrant配置对象而不是解析的YAML哈希。

如果您使用其他名称引用YAML哈希,例如

yaml_config = YAML.load_file('develop.yaml')

您可以毫不含糊地访问各种对象。

答案 1 :(得分:0)

这将解决它,但是:

require 'yaml'

config = YAML.load_file('develop.yaml')
Vagrant.configure("2") do |srv|
  srv.vm.define "machine1" do |a|
    a.vm.provider "docker" do |d|
      d.image = config["image"]
    end
  end
end

您确实应该这样做:

- name: machine1
  provider: docker
  image: "registry/user/image:xx"
- name: dbmachine
  provider: docker
  image: "path/to/db/image"
require 'yaml'

nodes = YAML.load_file('machines.yaml')
machines.each do |machine|
  srv.vm.define machine["name"] do |a|
    a.vm.provider machine["provider"] do |d|
      d.image = machine["image"]
    end
  end
end