knife-vsphere 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
@@ -56,14 +56,13 @@ class Chef
|
|
56
56
|
:description => "The VI SDK port number to use"
|
57
57
|
$default[:vsphere_port] = 443
|
58
58
|
|
59
|
-
option :
|
60
|
-
:long => "--
|
61
|
-
:description => "
|
62
|
-
$default[:vsphere_ssl] = true
|
59
|
+
option :vshere_nossl,
|
60
|
+
:long => "--vsnossl",
|
61
|
+
:description => "Disable SSL connectivity"
|
63
62
|
|
64
63
|
option :vsphere_insecure,
|
65
|
-
:long => "--vsinsecure
|
66
|
-
:description => "
|
64
|
+
:long => "--vsinsecure",
|
65
|
+
:description => "Disable SSL certificate verification"
|
67
66
|
|
68
67
|
option :folder,
|
69
68
|
:short => "-f FOLDER",
|
@@ -85,7 +84,7 @@ class Chef
|
|
85
84
|
:host => get_config(:vsphere_host),
|
86
85
|
:path => get_config(:vshere_path),
|
87
86
|
:port => get_config(:vsphere_port),
|
88
|
-
:use_ssl => get_config(:
|
87
|
+
:use_ssl => !get_config(:vsphere_nossl),
|
89
88
|
:user => get_config(:vsphere_user),
|
90
89
|
:password => get_config(:vsphere_pass),
|
91
90
|
:insecure => get_config(:vsphere_insecure)
|
@@ -154,7 +153,17 @@ class Chef
|
|
154
153
|
|
155
154
|
|
156
155
|
def find_all_in_folder(folder, type)
|
157
|
-
folder.
|
156
|
+
if folder.instance_of?(RbVmomi::VIM::ClusterComputeResource)
|
157
|
+
folder = folder.resourcePool
|
158
|
+
end
|
159
|
+
if folder.instance_of?(RbVmomi::VIM::ResourcePool)
|
160
|
+
folder.resourcePool.grep(type)
|
161
|
+
elsif folder.instance_of?(RbVmomi::VIM::Folder)
|
162
|
+
folder.childEntity.grep(type)
|
163
|
+
else
|
164
|
+
puts "Unknown type #{folder.class}, not enumerating"
|
165
|
+
nil
|
166
|
+
end
|
158
167
|
end
|
159
168
|
|
160
169
|
def find_in_folder(folder, type, name)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Jesse Campbell (<hikeit@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
require 'chef/knife'
|
6
|
+
require 'chef/knife/BaseVsphereCommand'
|
7
|
+
|
8
|
+
# Lists all known pools in the configured datacenter
|
9
|
+
class Chef::Knife::VspherePoolList < Chef::Knife::BaseVsphereCommand
|
10
|
+
|
11
|
+
banner "knife vsphere pool list"
|
12
|
+
|
13
|
+
get_common_options
|
14
|
+
|
15
|
+
def traverse_folders(folder)
|
16
|
+
puts "#{ui.color("#{folder.class}", :cyan)}: "+(folder.path[3..-1].map{|x| x[1]}.*'/')
|
17
|
+
folders = find_all_in_folder(folder, RbVmomi::VIM::ManagedObject)
|
18
|
+
unless folders.nil?
|
19
|
+
folders.each do |child|
|
20
|
+
traverse_folders(child)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_pool_folder(folderName)
|
26
|
+
dcname = get_config(:vsphere_dc)
|
27
|
+
dc = config[:vim].serviceInstance.find_datacenter(dcname) or abort "datacenter not found"
|
28
|
+
baseEntity = dc.hostFolder
|
29
|
+
entityArray = folderName.split('/')
|
30
|
+
entityArray.each do |entityArrItem|
|
31
|
+
if entityArrItem != ''
|
32
|
+
baseEntity = baseEntity.childEntity.grep(RbVmomi::VIM::ManagedObject).find { |f| f.name == entityArrItem } or
|
33
|
+
abort "no such folder #{folderName} while looking for #{entityArrItem}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
baseEntity
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
$stdout.sync = true
|
41
|
+
vim = get_vim_connection
|
42
|
+
baseFolder = find_pool_folder(get_config(:folder));
|
43
|
+
traverse_folders(baseFolder)
|
44
|
+
end
|
45
|
+
end
|
@@ -83,12 +83,14 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
|
|
83
83
|
:description => "Gigabytes of RAM"
|
84
84
|
|
85
85
|
option :power,
|
86
|
-
:long => "--start
|
87
|
-
:description => "Indicates whether to start the VM after a successful clone"
|
86
|
+
:long => "--start",
|
87
|
+
:description => "Indicates whether to start the VM after a successful clone",
|
88
|
+
:boolean => false
|
88
89
|
|
89
90
|
option :bootstrap,
|
90
|
-
:long => "--bootstrap
|
91
|
-
:description => "Indicates whether to bootstrap the VM"
|
91
|
+
:long => "--bootstrap",
|
92
|
+
:description => "Indicates whether to bootstrap the VM",
|
93
|
+
:boolean => false
|
92
94
|
|
93
95
|
option :fqdn,
|
94
96
|
:long => "--fqdn SERVER_FQDN",
|
@@ -123,7 +125,8 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
|
|
123
125
|
|
124
126
|
option :prerelease,
|
125
127
|
:long => "--prerelease",
|
126
|
-
:description => "Install the pre-release chef gems"
|
128
|
+
:description => "Install the pre-release chef gems",
|
129
|
+
:boolean => false
|
127
130
|
|
128
131
|
option :bootstrap_version,
|
129
132
|
:long => "--bootstrap-version VERSION",
|
@@ -243,10 +246,15 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
|
|
243
246
|
|
244
247
|
if get_config(:customization_vlan)
|
245
248
|
network = find_network(get_config(:customization_vlan))
|
246
|
-
switch_port = RbVmomi::VIM.DistributedVirtualSwitchPortConnection(:switchUuid => network.config.distributedVirtualSwitch.uuid ,:portgroupKey => network.key)
|
247
249
|
card = src_config.hardware.device.find { |d| d.deviceInfo.label == "Network adapter 1" } or
|
248
250
|
abort "Can't find source network card to customize"
|
249
|
-
|
251
|
+
begin
|
252
|
+
switch_port = RbVmomi::VIM.DistributedVirtualSwitchPortConnection(:switchUuid => network.config.distributedVirtualSwitch.uuid ,:portgroupKey => network.key)
|
253
|
+
card.backing.port = switch_port
|
254
|
+
rescue
|
255
|
+
# not connected to a distibuted switch?
|
256
|
+
card.backing.deviceName = network.name
|
257
|
+
end
|
250
258
|
dev_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(:device => card, :operation => "edit")
|
251
259
|
clone_spec.config.deviceChange.push dev_spec
|
252
260
|
end
|
@@ -384,7 +392,7 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
|
|
384
392
|
rescue Errno::ECONNREFUSED
|
385
393
|
sleep 2
|
386
394
|
false
|
387
|
-
rescue Errno::EHOSTUNREACH
|
395
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH
|
388
396
|
sleep 2
|
389
397
|
false
|
390
398
|
ensure
|
@@ -33,7 +33,7 @@ class Chef::Knife::VsphereVmList < Chef::Knife::BaseVsphereCommand
|
|
33
33
|
def print_vms_in_folder(folder)
|
34
34
|
vms = find_all_in_folder(folder, RbVmomi::VIM::VirtualMachine)
|
35
35
|
vms.each do |vm|
|
36
|
-
puts "#{ui.color("VM Name", :cyan)}
|
36
|
+
puts "#{ui.color("VM Name:", :cyan)} #{vm.name}\t#{ui.color("IP:", :magenta)} #{vm.guest.ipAddress}\t#{ui.color("RAM:", :magenta)} #{vm.summary.config.memorySizeMB}"
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-vsphere
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-14 00:00:00.000000000 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: netaddr
|
17
|
-
requirement: &
|
17
|
+
requirement: &70275405040840 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,21 +22,21 @@ dependencies:
|
|
22
22
|
version: 1.5.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70275405040840
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: chef
|
28
|
-
requirement: &
|
28
|
+
requirement: &70275405038940 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.10.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70275405038940
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rbvmomi
|
39
|
-
requirement: &
|
39
|
+
requirement: &70275405038180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: 1.5.1
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70275405038180
|
48
48
|
description: VMware vSphere Support for Chef's Knife Command
|
49
49
|
email: ezra@cpan.org
|
50
50
|
executables: []
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/chef/knife/BaseVsphereCommand.rb
|
55
55
|
- lib/chef/knife/vsphere_customization_list.rb
|
56
56
|
- lib/chef/knife/vsphere_datastore_list.rb
|
57
|
+
- lib/chef/knife/vsphere_pool_list.rb
|
57
58
|
- lib/chef/knife/vsphere_template_list.rb
|
58
59
|
- lib/chef/knife/vsphere_vlan_list.rb
|
59
60
|
- lib/chef/knife/vsphere_vm_clone.rb
|
@@ -62,7 +63,7 @@ files:
|
|
62
63
|
- lib/chef/knife/vsphere_vm_state.rb
|
63
64
|
- lib/knife-vsphere/version.rb
|
64
65
|
has_rdoc: true
|
65
|
-
homepage:
|
66
|
+
homepage: http://github.com/ezrapagel/knife-vsphere
|
66
67
|
licenses: []
|
67
68
|
post_install_message:
|
68
69
|
rdoc_options: []
|