nise-bosh-vagrant 0.4.3 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nise-bosh-vagrant +2 -2
- data/lib/nise-bosh-vagrant.rb +4 -2
- data/lib/nise-bosh-vagrant/cli.rb +7 -1
- data/lib/nise-bosh-vagrant/network_interface.rb +58 -0
- data/lib/nise-bosh-vagrant/runner.rb +5 -0
- data/lib/nise-bosh-vagrant/version.rb +1 -1
- data/resources/Vagrantfile.erb +5 -0
- data/scripts/bridge_interface.sh +25 -0
- metadata +5 -3
data/bin/nise-bosh-vagrant
CHANGED
data/lib/nise-bosh-vagrant.rb
CHANGED
@@ -27,19 +27,25 @@ EOS
|
|
27
27
|
opt :memory, "Amount of memory to allocate to the VM in MB", :type => :integer, :default => 512
|
28
28
|
opt :preinstall, "Preinstall hook script", :type => :string
|
29
29
|
opt :postinstall, "Postinstall hook script", :type => :string
|
30
|
-
opt :address, "IP address for the VM", :type => :string
|
30
|
+
opt :address, "IP address for the VM", :type => :string
|
31
|
+
opt :bridge, "Use bridged network interface"
|
31
32
|
end
|
32
33
|
|
33
34
|
Trollop::die :manifest, "must provide a manifest file" if opts[:manifest].nil?
|
34
35
|
Trollop::die :manifest, "must exist" unless File.exist?(opts[:manifest])
|
35
36
|
Trollop::die :preinstall, "must exist" unless opts[:preinstall].nil? || File.exist?(opts[:preinstall])
|
36
37
|
Trollop::die :postinstall, "must exist" unless opts[:postinstall].nil? || File.exist?(opts[:postinstall])
|
38
|
+
Trollop::die :address, "must exist" if opts[:bridge] && opts[:address].nil?
|
37
39
|
|
38
40
|
opts[:release] = ARGV[0]
|
39
41
|
|
40
42
|
if opts[:start]
|
41
43
|
opts[:install] = true
|
42
44
|
end
|
45
|
+
if ! opts[:bridge]
|
46
|
+
opts[:address] ||= "192.168.10.10"
|
47
|
+
end
|
48
|
+
|
43
49
|
|
44
50
|
# Generate, start and prepare a fresh VM
|
45
51
|
runner = NiseBOSHVagrant::Runner.new(opts)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module NiseBOSHVagrant
|
2
|
+
|
3
|
+
class NetworkInterface
|
4
|
+
def self.detect
|
5
|
+
device_list = `VBoxManage list bridgedifs`
|
6
|
+
raise "VBoxManage command not found" unless $?.success?
|
7
|
+
|
8
|
+
device_list.split(/^$\n/).inject([]) { |devices, device|
|
9
|
+
device = Hash[*device.split("\n").map { |line| line.match(/^([^:]+): *(.*)/).captures }.flatten]
|
10
|
+
kernel_device_name = device["Name"].split(":")[0]
|
11
|
+
|
12
|
+
ifconfig = `ifconfig #{kernel_device_name}`
|
13
|
+
if match = ifconfig.match(/inet ([.0-9]+) netmask 0x([0-9a-f]+) broadcast/) # BSD
|
14
|
+
address = match[1]
|
15
|
+
mask = match[2].unpack("a2a2a2a2").map { |block| block.hex }.join(".")
|
16
|
+
gateway = `route -n get -ifscope #{kernel_device_name} 0.0.0.0 | grep gateway | awk '{print $2}'`.strip
|
17
|
+
elsif match = ifconfig.match(/inet addr:([.0-9]+) Bcast:[.0-9]+ Mask:([.0-9]+)/) # Linux
|
18
|
+
address = match[1]
|
19
|
+
mask = match[2]
|
20
|
+
gateway = `ip route show oif #{kernel_device_name} | grep 'default via' | awk '{print $3}'`.strip
|
21
|
+
else
|
22
|
+
next devices
|
23
|
+
end
|
24
|
+
|
25
|
+
devices << self.new(device["Name"], address, mask, gateway)
|
26
|
+
devices
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.find(ip_address)
|
31
|
+
self.detect.find do |device|
|
32
|
+
device.same_network?(ip_address)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
attr_reader :name, :vbox_name, :ip_address, :network_mask, :gateway
|
37
|
+
|
38
|
+
def initialize(vbox_name, ip_address, network_mask, gateway)
|
39
|
+
@vbox_name = vbox_name
|
40
|
+
@ip_address = ip_address
|
41
|
+
@network_mask = network_mask
|
42
|
+
@gateway = gateway
|
43
|
+
end
|
44
|
+
|
45
|
+
def name()
|
46
|
+
vbox_name.split(":")[0]
|
47
|
+
end
|
48
|
+
|
49
|
+
def same_network?(address)
|
50
|
+
(self.class.ip_address_to_int(@ip_address) & self.class.ip_address_to_int(@network_mask)) ==
|
51
|
+
(self.class.ip_address_to_int(address) & self.class.ip_address_to_int(@network_mask))
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.ip_address_to_int(ip_address)
|
55
|
+
ip_address.split(".").map{|s|s.to_i}.pack("C*").unpack("N")[0]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -19,6 +19,7 @@ module NiseBOSHVagrant
|
|
19
19
|
@postinstall_file = opts[:postinstall]
|
20
20
|
@memory = opts[:memory]
|
21
21
|
@ip_address = opts[:address]
|
22
|
+
@bridge = opts[:bridge]
|
22
23
|
|
23
24
|
copy_file_prefix = '.nise-bosh'
|
24
25
|
@copy_name = {
|
@@ -28,6 +29,10 @@ module NiseBOSHVagrant
|
|
28
29
|
:install_script => "#{copy_file_prefix}-install.sh",
|
29
30
|
}
|
30
31
|
|
32
|
+
if @bridge
|
33
|
+
@bridge_if = NetworkInterface.find(@ip_address)
|
34
|
+
raise "No available interface found" if @bridge_if.nil?
|
35
|
+
end
|
31
36
|
end
|
32
37
|
|
33
38
|
def generate_vagrantfile(output_path=@vagrantfile_path)
|
data/resources/Vagrantfile.erb
CHANGED
@@ -9,7 +9,12 @@ Vagrant.configure("2") do |config|
|
|
9
9
|
v.customize ["modifyvm", :id, "--memory", "<%= @memory %>"]
|
10
10
|
end
|
11
11
|
|
12
|
+
<% if @bridge %>
|
13
|
+
config.vm.network :public_network, :bridge => "<%= @bridge_if.vbox_name %>"
|
14
|
+
config.vm.provision :shell, :path => "<%= File.expand_path("../scripts/bridge_interface.sh", __FILE__) %>", :args => "<%= @ip_address %> <%= @bridge_if.network_mask %> <%= @bridge_if.gateway %>"
|
15
|
+
<% else %>
|
12
16
|
config.vm.network :private_network, ip: "<%= @ip_address %>"
|
17
|
+
<% end %>
|
13
18
|
|
14
19
|
<% if not @nise_path.nil? %>config.vm.synced_folder "<%= @nise_path %>", "/home/vagrant/nise_bosh"<% end %>
|
15
20
|
config.vm.synced_folder "./", "/home/vagrant/release"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
sudo /sbin/ifconfig eth1 ${1} netmask ${2} up
|
3
|
+
sudo /sbin/route add default gw ${3} eth1
|
4
|
+
# drop the defalt gataway of eth0
|
5
|
+
sudo /sbin/route del default dev eth0
|
6
|
+
|
7
|
+
sudo cat <<EOF | sudo tee /etc/network/interfaces > /dev/null
|
8
|
+
# Generated by nise-bosh-vagrant
|
9
|
+
|
10
|
+
# The loopback network interface
|
11
|
+
auto lo
|
12
|
+
iface lo inet loopback
|
13
|
+
|
14
|
+
# The primary network interface
|
15
|
+
auto eth0
|
16
|
+
iface eth0 inet dhcp
|
17
|
+
post-up /bin/sleep 5; /sbin/route del default dev \$IFACE
|
18
|
+
|
19
|
+
# Bridge interface
|
20
|
+
auto eth1
|
21
|
+
iface eth1 inet static
|
22
|
+
address ${1}
|
23
|
+
netmask ${2}
|
24
|
+
gateway ${3}
|
25
|
+
EOF
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nise-bosh-vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.5'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: trollop
|
@@ -43,11 +43,13 @@ files:
|
|
43
43
|
- bin/nise-bosh-vagrant
|
44
44
|
- lib/nise-bosh-vagrant.rb
|
45
45
|
- lib/nise-bosh-vagrant/cli.rb
|
46
|
+
- lib/nise-bosh-vagrant/network_interface.rb
|
46
47
|
- lib/nise-bosh-vagrant/runner.rb
|
47
48
|
- lib/nise-bosh-vagrant/version.rb
|
48
49
|
- nise-bosh-vagrant.gemspec
|
49
50
|
- resources/Vagrantfile.erb
|
50
51
|
- resources/install_release.sh.erb
|
52
|
+
- scripts/bridge_interface.sh
|
51
53
|
- scripts/prepare.sh
|
52
54
|
- scripts/start.sh
|
53
55
|
- scripts/stop.sh
|
@@ -65,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
67
|
version: '0'
|
66
68
|
segments:
|
67
69
|
- 0
|
68
|
-
hash:
|
70
|
+
hash: -3310966476080707238
|
69
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
72
|
none: false
|
71
73
|
requirements:
|