![](/img/trans.png)
[英]Installing ruby sudo make command not found (Vagrant, Virtualbox)
[英]Vagrant Ruby Code for manage Virtualbox from shell
我在Debian shell中创建一个sh脚本,以自动化基于不同操作系统的Vagrantfile创建,例如管理存储控制器(用于Debian的Sata Controller或用于CentOS的IDE控制器)。 尝试管理磁盘大小,我分析了盒子默认磁盘(vmdk),转换为vdi以进行Virtualbox本机管理。
问题在于使用Ruby代码来分析VM数据。
storagecontroller = %x[VBoxManage showvminfo $machinename'-'master --machinereadable | grep storagecontrollername0 | cut -d '=' -f 2 | sed 's/\"//g']
storagecontrollertype = %x[VBoxManage showvminfo $machinename'-'master --machinereadable | grep storagecontrollertype0 | cut -d '=' -f 2 | sed 's/\"//g']
storagecontrollerportcount = %x[VBoxManage showvminfo $machinename'-'master --machinereadable | grep storagecontrollerportcount0 | cut -d '=' -f 2 | sed 's/\"//g']
机器已经创建并使用时,此代码有效:
vagrant reload
但是当我尝试做的时候
vagrant up
问题是机器目录中不存在机器。 我在shell中遇到错误。 错误:
Message: Errno::ENOENT: No such file or directory @ dir_chdir - /root/VirtualBox VMs/projectname/machinename-master
问题是,我想分析机器磁盘,但是这个Ruby代码在机器创建之前执行,我需要一种方法在创建机器之后执行此操作,但是在shell中调用vagrant up句子。
这是我生成的代码的一部分。
config.vm.define "machinename" do |machinename|
machinename.vm.box ="debian/contrib-jessie64"
machinename.vm.hostname = "machinename"
machinename.vm.provider "virtualbox" do |virtualbox|
virtualbox.memory = "2048"
virtualbox.cpus = "8"
virtualbox.name = "machinename-master"
virtualbox.customize [
"modifyvm", :id, "--groups", "/projectname"
]
storagecontroller = %x[VBoxManage showvminfo machinename'-'master --machinereadable | grep storagecontrollername0 | cut -d '=' -f 2 | sed 's/\"//g']
path = File.join [ENV["HOME"], 'VirtualBox VMs/','projectname','machinename-master']
Dir.chdir("#{path}")
storagecontroller = %x[VBoxManage showvminfo machinename'-'master --machinereadable | grep storagecontrollername0 | cut -d '=' -f 2 | sed 's/\"//g']
storagecontroller.delete!("\n")
storagecontrollertype = %x[VBoxManage showvminfo machinename'-'master --machinereadable | grep storagecontrollertype0 | cut -d '=' -f 2 | sed 's/\"//g']
storagecontrollertype.delete!("\n")
storagecontrollerportcount = %x[VBoxManage showvminfo machinename'-'master --machinereadable | grep storagecontrollerportcount0 | cut -d '=' -f 2 | sed 's/\"//g']
storagecontrollerportcount.delete!("\n")
require "find"
file=Dir['*.vmdk'].first
if !File.exist?('/root/VirtualBox VMs/projectname/machinename-master/machinename-box.vdi')
virtualbox.customize [
"storagectl", :id,
"--name", "#{storagecontroller}",
"--controller", "#{storagecontrollertype}",
"--portcount", "#{storagecontrollerportcount}",
"--hostiocache", "on"
]
virtualbox.customize [
"clonehd", "#{ENV["HOME"]}/VirtualBox VMs/projectname/#{virtualbox.name}/box-disk1.vmdk",
"#{ENV["HOME"]}/VirtualBox VMs/projectname/#{virtualbox.name}/ojocuidao-box.vdi",
"--format", "VDI"
]
virtualbox.customize [
"modifyhd", "#{ENV["HOME"]}/VirtualBox VMs/projectname/#{virtualbox.name}/machinename-box.vdi",
"--resize", 55 * 1024
]
virtualbox.customize [
"storageattach", :id,
"--storagectl", "#{storagecontroller}",
"--port", "0",
"--device", "0",
"--type", "hdd",
"--nonrotational", "on",
"--medium", "#{ENV["HOME"]}/VirtualBox VMs/projectname/#{virtualbox.name}/machinename-box.vdi"
]
调用shell的ruby句子在创建机器之前正在执行,因此我需要在下载框并创建VM之后立即找到这些句子和vagrantfile磁盘自定义句子。
有人可以帮帮我吗?
我已经解决了这个问题,阅读流浪函数调用句子参数。
写在红宝石:
if !(ARGV[0] == "up")
然后从shell脚本i exec vagrant reload
和我添加到Vagrantfile的提供。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.