Как задать, чтобы имя компьютера VirtualBox совпадало с именем хоста в Vagrantfile для нескольких компьютеров? - PullRequest
1 голос
/ 29 октября 2019

Следующая конфигурация Vagrantfile не будет работать, поскольку следующая виртуальная машина получит то же имя, что и предыдущая. (Кстати, не уверен на 100%, но я думаю, что это работало в предыдущих версиях Vagrant).

Vagrant.configure(2) do |config|

  config.vm.define "xfcevm" do |xfcevm|
    xfcevm.vm.box = "generic/ubuntu1904"
    xfcevm.vm.hostname = "xfcevm"
    config.vm.provider "virtualbox" do |vb|
      vb.name = "xfcevm"
    end
  end

  config.vm.define "gnomevm" do |gnomevm|
    gnomevm.vm.box = "generic/fedora30"
    gnomevm.vm.hostname = "gnomevm"
    config.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end
  end

  config.vm.provider "virtualbox" do |vb|
    # vb.name = config.vm.hostname
    vb.gui = true
    vb.memory = "3072"
    vb.cpus = 1
    vb.customize ["modifyvm", :id, "--vram", "32"]
  end

  config.vm.provision "ansible" do |ansible|
    ansible.verbose = "v"
    ansible.compatibility_mode = "2.0"
    ansible.playbook = "setup.yml"
  end

  config.vm.provision "ansible", run: 'always' do |ansible|
    ansible.verbose = "v"
    ansible.compatibility_mode = "2.0"
    ansible.playbook = "tests.yml"
  end

end

В строке # vb.name = config.vm.hostname назначение возвращает объект (оно печатается с помощью putsкак #<Object:0x0000000001c191d8>), и я недостаточно знаком с Ruby и Vagrant, чтобы получить от него строковый атрибут, если это возможно даже для этого объекта.

PS Обходной путь (альтернативный этому вопросу) будетчтобы получить имя работающей машины VirtualBox из PlaySbook Ansible, так как целью было вызвать VBoxManage на этой виртуальной машине как local_action из PlaySbook Ansible.

1 Ответ

1 голос
/ 29 октября 2019

Вы работаете с провайдером virtualbox на глобальном объекте config.

    # Wrong for multivm
    # This sets a default name for all vms
    config.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end

Просто вызовите его на текущем виртуальном сервере, который вы определяете (пример для gnomevm)

    # Correct
    # This sets the specific name for this vm only
    gnomevm.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...