我正在尝试编写一个脚本来设置vagrant中的动态节点数。
所以它以
运行# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
$num_instances = 3
(1..$num_instances).each do |i|
$ip = "10.1.10.#{i}+80"
config.vm.define "node#{i}" do |node|
node.vm.box = "generic/ubuntu1604"
node.vm.provider :libvirt do |domain|
domain.memory = 1024
domain.cpus = 1
domain.nic_model_type = "virtio"
domain.kvm_hidden = true
end
node.vm.hostname = "t2-node#{i}"
node.vm.network "public_network",
:ip => $ip,
:type => "bridge" ,
:dev => "br1",
:mode => "bridge",
:use_dhcp_assigned_default_route => true
end
end
end
但是我收到了错误:
Unknown interface eth1
Error: ??? prefix is expected rather than "10.1.10.3+80/255.255.255.0".
所以我想$1p
变量的添加没有正确完成?
任何想法?
答案 0 :(得分:1)
这是一个红宝石问题,而不是一个流浪汉问题但是你的字符串插值错误所以语句
$ip = "10.1.10.#{i}+80"
返回10.1.10.3+80
的字符串,当然这不是有效的IP。
你正在看的是
ip = "10.1.10.#{i+80}"
将进行正确的数学运算。
您可以在命令行上轻松检入irb
irb(main):001:0> num_instances = 3
=> 3
irb(main):002:0> (1..num_instances).each do |i|
irb(main):003:1* ip = "10.1.10.#{i+80}"
irb(main):004:1> p ip
irb(main):005:1> end
"10.1.10.81"
"10.1.10.82"
"10.1.10.83"
=> 1..3
PS:注意,当你在ruby中声明变量时,你不需要所有的$
。