vagrant用数学循环设置ip地址

时间:2018-04-24 08:20:42

标签: ruby vagrant

我正在尝试编写一个脚本来设置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变量的添加没有正确完成?

任何想法?

1 个答案:

答案 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中声明变量时,你不需要所有的$