vagrant-vminfo 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vagrant-vminfo/plugin.rb +100 -27
- data/lib/vagrant-vminfo/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3960cb4c45ffc61d4ef3c245fe2e542194b1918a
|
4
|
+
data.tar.gz: 1c2a06995dcd130043204caef0e7f8c8dc73e9ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d47741cb4586a6a7a484dce17ac421db1c1da5894cc5e322ab843b5c7ad6eb87003eb822ce7b542018ec5b3fdd097b71981ebc93aaac1122de1ce5756344127
|
7
|
+
data.tar.gz: 3ea642275c86306cc72809e444736f54aa043eae6f4e7b067049bf581cc7b473e3a312e2ec406b01deb10f2aa47a94972039b77661fa1afeecac046fac3828d8
|
@@ -28,6 +28,100 @@ module VagrantVminfo
|
|
28
28
|
class InfoCommand < Vagrant.plugin(2, :command)
|
29
29
|
include VagrantPlugins::CommandUp::StartMixins
|
30
30
|
|
31
|
+
def get_vm_info(vm)
|
32
|
+
# Get some provider specific details for vm
|
33
|
+
provider = vm.provider_name.id2name
|
34
|
+
if provider == 'virtualbox'
|
35
|
+
return get_vm_info_virtualbox(vm)
|
36
|
+
elsif provider == 'vmware_workstation'
|
37
|
+
return get_vm_info_vmware_workstation(vm)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_vm_info_virtualbox(vm)
|
42
|
+
# Get VM info by virtualbox provider
|
43
|
+
# All we need is network interfaces details
|
44
|
+
|
45
|
+
networks = []
|
46
|
+
begin
|
47
|
+
nic_count = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/Count")[/Value: (\d)/, 1]
|
48
|
+
rescue Exception => e
|
49
|
+
@logger.warn(e.message)
|
50
|
+
nic_count = 0
|
51
|
+
else
|
52
|
+
nic_count = Integer(nic_count)
|
53
|
+
end
|
54
|
+
# Check nic_count is not defined in case of VBox Guest Additions not install, or some other issue
|
55
|
+
if nic_count > 0
|
56
|
+
(0..(nic_count-1)).each do |i|
|
57
|
+
nic_ip = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/IP")[/Value: (.*)/, 1]
|
58
|
+
nic_mac = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/MAC")[/Value: (.*)/, 1]
|
59
|
+
nic_broadcast = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/Broadcast")[/Value: (.*)/, 1]
|
60
|
+
nic_netmask = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/Netmask")[/Value: (.*)/, 1]
|
61
|
+
# Get the number of this network device based on the mac address
|
62
|
+
# TODO: probably just should just get a hash of all of this info somehow, my ruby foo is weak
|
63
|
+
nic_number = vm.provider.driver.execute("showvminfo", vm.id, "--machinereadable")[/\w*(\d)=\"#{nic_mac}\"/, 1]
|
64
|
+
nic_type = vm.provider.driver.execute("showvminfo", vm.id, "--machinereadable")[/nic#{nic_number}=\"(.*)\"/, 1]
|
65
|
+
networks << {'ip' => nic_ip,
|
66
|
+
'mac' => nic_mac,
|
67
|
+
'netmask' => nic_netmask,
|
68
|
+
'broadcast' => nic_broadcast,
|
69
|
+
'type' => nic_type}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
return {"networks" => networks}
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_vm_info_vmware_workstation(vm)
|
76
|
+
# Get VM info by virtualbox provider
|
77
|
+
# We can get some network interfaces details and current IP address
|
78
|
+
|
79
|
+
# Collect details for all the network interfaces
|
80
|
+
nics = {}
|
81
|
+
vm.provider.driver.send(:read_vmx_data).each do |key, val|
|
82
|
+
key1, key2 = key.split('.')
|
83
|
+
m = /^ethernet\d+$/.match(key1)
|
84
|
+
if m
|
85
|
+
if !nics.include?(m[0])
|
86
|
+
nics[m[0]] = {}
|
87
|
+
end
|
88
|
+
nics[m[0]][key2] = val
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Check and normalize collected network information
|
93
|
+
networks = []
|
94
|
+
nics.values.each do |nic|
|
95
|
+
nic_type = nic['connectiontype']
|
96
|
+
nic_addresstype = nic['addresstype']
|
97
|
+
nic_mac = nic_addresstype == 'generated' ? nic['generatedaddress'] : nic['address']
|
98
|
+
#TODO: For now I don't know simple way to retrieve these details
|
99
|
+
#nic_ip = nil
|
100
|
+
#nic_netmask = nil
|
101
|
+
#nic_broadcast = nil
|
102
|
+
|
103
|
+
networks << {#'ip' => nic_ip,
|
104
|
+
'mac' => nic_mac,
|
105
|
+
#'netmask' => nic_netmask,
|
106
|
+
#'broadcast' => nic_broadcast,
|
107
|
+
'type' => nic_type}
|
108
|
+
end
|
109
|
+
|
110
|
+
# We can try to get IP address for VM but can not assign it to any network interface
|
111
|
+
ip = nil
|
112
|
+
begin
|
113
|
+
resp = vm.provider.driver.send(:vmrun, *['getGuestIPAddress', vm.id])
|
114
|
+
rescue Exception => e
|
115
|
+
@logger.warn(e.message)
|
116
|
+
else
|
117
|
+
m = /(?<ip>\d{1,3}\.\d{1,3}.\d{1,3}\.\d{1,3})/.match(resp.stdout)
|
118
|
+
ip = (resp.exit_code == 0 and m) ? m['ip'] : nil
|
119
|
+
end
|
120
|
+
|
121
|
+
return {'ip' => ip,
|
122
|
+
'networks' => networks }
|
123
|
+
end
|
124
|
+
|
31
125
|
def execute
|
32
126
|
# Not sure if this is the only way to do this? How else would I get argv?
|
33
127
|
argv = parse_options(OptionParser.new)
|
@@ -36,35 +130,14 @@ module VagrantVminfo
|
|
36
130
|
|
37
131
|
with_target_vms(argv) do |vm|
|
38
132
|
info["name"] = vm.name.id2name
|
39
|
-
info["
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
nic = {}
|
46
|
-
|
47
|
-
@nic_ip = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/IP")[/Value: (.*)/, 1]
|
48
|
-
@nic_mac = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/MAC")[/Value: (.*)/, 1]
|
49
|
-
@nic_broadcast = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/Broadcast")[/Value: (.*)/, 1]
|
50
|
-
@nic_netmask = vm.provider.driver.execute("guestproperty", "get", vm.id, "/VirtualBox/GuestInfo/Net/#{i}/V4/Netmask")[/Value: (.*)/, 1]
|
51
|
-
|
52
|
-
# Get the number of this network device based on the mac address
|
53
|
-
# TODO: probably just should just get a hash of all of this info somehow, my ruby foo is weak
|
54
|
-
@nic_number = vm.provider.driver.execute("showvminfo", vm.id, "--machinereadable")[/\w*(\d)=\"#{@nic_mac}\"/, 1]
|
55
|
-
@nic_type = vm.provider.driver.execute("showvminfo", vm.id, "--machinereadable")[/nic#{@nic_number}=\"(.*)\"/, 1]
|
56
|
-
|
57
|
-
nic['ip'] = @nic_ip
|
58
|
-
nic['mac'] = @nic_mac
|
59
|
-
nic['netmask'] = @nic_netmask
|
60
|
-
nic['broadcast'] = @nic_broadcast
|
61
|
-
nic['type'] = @nic_type
|
62
|
-
|
63
|
-
# Append to the networks array
|
64
|
-
info["networks"] << nic
|
133
|
+
info["status"] = vm.state.id.id2name
|
134
|
+
# Check if vm is running - try to get some provider specific details
|
135
|
+
if vm.state.id == :running
|
136
|
+
info["id"] = vm.id
|
137
|
+
info["provider"] = vm.provider_name.id2name
|
138
|
+
info.merge!(get_vm_info(vm))
|
65
139
|
end
|
66
140
|
end
|
67
|
-
|
68
141
|
puts info.to_yaml
|
69
142
|
end
|
70
143
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-vminfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Salisbury
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -73,14 +73,14 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
+
- Rakefile
|
76
77
|
- Gemfile
|
78
|
+
- vagrant-vminfo.gemspec
|
77
79
|
- LICENSE
|
78
|
-
- README.md
|
79
|
-
- Rakefile
|
80
|
-
- lib/vagrant-vminfo/plugin.rb
|
81
80
|
- lib/vagrant-vminfo/version.rb
|
81
|
+
- lib/vagrant-vminfo/plugin.rb
|
82
82
|
- lib/vagrant-vminfo.rb
|
83
|
-
-
|
83
|
+
- README.md
|
84
84
|
- .gitignore
|
85
85
|
homepage: https://github.com/d3vz3r0/vagrant-vminfo
|
86
86
|
licenses: []
|
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
103
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.0.
|
104
|
+
rubygems_version: 2.0.14
|
105
105
|
signing_key:
|
106
106
|
specification_version: 4
|
107
107
|
summary: Gets detailed information about the VM, including network interfaes
|