Как передать переменную памяти в функцию ruby с помощью Vagrant для определения нескольких блоков - PullRequest
0 голосов
/ 01 февраля 2020

В Vagrant я пытаюсь использовать функцию для определения нескольких блоков. По какой-то причине, однако, невозможно установить память, передавая переменные, как у меня здесь, не имеет значения, если я использую ...

vb.memory = some_mem_var

или ...

vb.customize ["modifyvm", :id, "--memory", some_mem_var]

Вот пример, который работает, только если они не передаются как переменные, а значение mem вместо этого жестко запрограммировано.


def shared_config(host, setmemory = 2048, setcpu = 1, mac_string = 'none', disk = 'default', promisc = false)
  host.vm.box = "bento/ubuntu-16.04"
  host.vm.provider "virtualbox" do |vb|
      # fix time sync threshold to 10 seconds.  otherwise sleep on the host can cause time offset on wake.
      vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
      vb.gui = false
      # Customize the amount of memory on the VM:
      # this doesn't work-
      vb.memory = setmemory
      # neither does this-
      # vb.customize ["modifyvm", :id, "--memory", setmemory]
      vb.cpus = setcpu
      if promisc == true
          vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
          vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
      end
  end
end

Vagrant.configure("2") do |config|
  setmemory=4096
  setcpu=4

  # config.vbguest.iso_path = "https://download.virtualbox.org/virtualbox/6.0.16/VBoxGuestAdditions_6.0.16.iso"
  # config.vbguest.auto_update = false

  config.vm.define "sysa", primary: true do |sysa|
    shared_config(sysa, memory: 2048, cpus: 1, mac_string: 'none', disk: '65536MB', promisc: false)
  end

  config.vm.define "sysb" do |sysb|
    shared_config(sysb, memory: setmemory, cpus: setcpu, mac_string: 'none', disk: '65536MB', promisc: true)
  end
end

Это ошибка -

A customization command failed:

["modifyvm", :id, "--memory", {:memory=>1024, :cpus=>1, :mac_string=>"none", :disk=>"65536MB", :promisc=>false}]

The following error was experienced:

#<Vagrant::Errors::VBoxManageError: There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["modifyvm", "9262b024-1471-4a63-84c8-f970cdf997a8", "--memory", "{:memory=>1024, :cpus=>1, :mac_string=>\"none\", :disk=>\"65536MB\", :promisc=>false}"]

Stderr: Oracle VM VirtualBox Command Line Management Interface Version 6.0.16
(C) 2005-2020 Oracle Corporation
All rights reserved.

VBoxManage: error: >

Please fix this customization and try again.
...