knife-ovh-cloud 1.0.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/chef/knife/base_ovh_cloud_command.rb +358 -0
- data/lib/chef/knife/ovh_cloud_customization_list.rb +29 -0
- data/lib/chef/knife/ovh_cloud_datastore_list.rb +58 -0
- data/lib/chef/knife/ovh_cloud_datastore_maxfree.rb +49 -0
- data/lib/chef/knife/ovh_cloud_datastorecluster_list.rb +60 -0
- data/lib/chef/knife/ovh_cloud_datastorecluster_maxfree.rb +48 -0
- data/lib/chef/knife/ovh_cloud_hosts_list.rb +49 -0
- data/lib/chef/knife/ovh_cloud_pool_list.rb +44 -0
- data/lib/chef/knife/ovh_cloud_pool_query.rb +58 -0
- data/lib/chef/knife/ovh_cloud_template_list.rb +32 -0
- data/lib/chef/knife/ovh_cloud_vlan_list.rb +37 -0
- data/lib/chef/knife/ovh_cloud_vm_clone.rb +567 -0
- data/lib/chef/knife/ovh_cloud_vm_config.rb +46 -0
- data/lib/chef/knife/ovh_cloud_vm_delete.rb +66 -0
- data/lib/chef/knife/ovh_cloud_vm_execute.rb +66 -0
- data/lib/chef/knife/ovh_cloud_vm_list.rb +66 -0
- data/lib/chef/knife/ovh_cloud_vm_markastemplate.rb +54 -0
- data/lib/chef/knife/ovh_cloud_vm_migrate.rb +80 -0
- data/lib/chef/knife/ovh_cloud_vm_move.rb +47 -0
- data/lib/chef/knife/ovh_cloud_vm_net.rb +57 -0
- data/lib/chef/knife/ovh_cloud_vm_property_get.rb +46 -0
- data/lib/chef/knife/ovh_cloud_vm_property_set.rb +84 -0
- data/lib/chef/knife/ovh_cloud_vm_query.rb +48 -0
- data/lib/chef/knife/ovh_cloud_vm_snapshot.rb +129 -0
- data/lib/chef/knife/ovh_cloud_vm_state.rb +127 -0
- data/lib/chef/knife/ovh_cloud_vm_vmdk_add.rb +241 -0
- data/lib/knife-ovh-cloud/version.rb +4 -0
- metadata +112 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
# Author:: Brian Dupras (<bdupras@rallydev.com>)
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'chef/knife'
|
5
|
+
require 'chef/knife/base_ovh_cloud_command'
|
6
|
+
require 'rbvmomi'
|
7
|
+
require 'netaddr'
|
8
|
+
|
9
|
+
class Chef::Knife::OvhCloudVmConfig < Chef::Knife::BaseOvhCloudCommand
|
10
|
+
banner "knife ovh cloud vm config VMNAME PROPERTY VALUE. See \"http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.ConfigSpec.html\" for allowed ATTRIBUTE values (any property of type xs:string is supported)."
|
11
|
+
|
12
|
+
get_common_options
|
13
|
+
|
14
|
+
def run
|
15
|
+
$stdout.sync = true
|
16
|
+
vmname = @name_args[0]
|
17
|
+
if vmname.nil?
|
18
|
+
show_usage
|
19
|
+
fatal_exit("You must specify a virtual machine name")
|
20
|
+
end
|
21
|
+
|
22
|
+
property_name = @name_args[1]
|
23
|
+
if property_name.nil?
|
24
|
+
show_usage
|
25
|
+
fatal_exit("You must specify a PROPERTY name (e.g. annotation)")
|
26
|
+
end
|
27
|
+
property_name = property_name.to_sym
|
28
|
+
|
29
|
+
property_value = @name_args[2]
|
30
|
+
if property_value.nil?
|
31
|
+
show_usage
|
32
|
+
fatal_exit("You must specify a PROPERTY value")
|
33
|
+
end
|
34
|
+
|
35
|
+
vim = get_vim_connection
|
36
|
+
|
37
|
+
dc = get_datacenter
|
38
|
+
folder = find_folder(get_config(:folder)) || dc.vmFolder
|
39
|
+
|
40
|
+
vm = traverse_folders_for_vm(folder, vmname) or abort "VM #{vmname} not found"
|
41
|
+
|
42
|
+
properties = {}
|
43
|
+
properties[property_name] = property_value
|
44
|
+
vm.ReconfigVM_Task(:spec => RbVmomi::VIM.VirtualMachineConfigSpec(properties)).wait_for_completion
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Ezra Pagel (<ezra@cpan.org>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'chef/knife'
|
7
|
+
require 'chef/knife/base_ovh_cloud_command'
|
8
|
+
require 'rbvmomi'
|
9
|
+
|
10
|
+
# These two are needed for the '--purge' deletion case
|
11
|
+
require 'chef/node'
|
12
|
+
require 'chef/api_client'
|
13
|
+
|
14
|
+
# Delete a virtual machine from vCenter
|
15
|
+
class Chef::Knife::OvhCloudVmDelete < Chef::Knife::BaseOvhCloudCommand
|
16
|
+
|
17
|
+
banner "knife ovh cloud vm delete VMNAME"
|
18
|
+
|
19
|
+
option :purge,
|
20
|
+
:short => "-P",
|
21
|
+
:long => "--purge",
|
22
|
+
:boolean => true,
|
23
|
+
:description => "Destroy corresponding node and client on the Chef Server, in addition to destroying the VM itself."
|
24
|
+
|
25
|
+
get_common_options
|
26
|
+
|
27
|
+
# Extracted from Chef::Knife.delete_object, because it has a
|
28
|
+
# confirmation step built in... By specifying the '--purge'
|
29
|
+
# flag (and also explicitly confirming the server destruction!)
|
30
|
+
# the user is already making their intent known. It is not
|
31
|
+
# necessary to make them confirm two more times.
|
32
|
+
def destroy_item(itemClass, name, type_name)
|
33
|
+
object = itemClass.load(name)
|
34
|
+
object.destroy
|
35
|
+
puts "Deleted #{type_name} #{name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def run
|
39
|
+
$stdout.sync = true
|
40
|
+
|
41
|
+
vmname = @name_args[0]
|
42
|
+
|
43
|
+
if vmname.nil?
|
44
|
+
show_usage
|
45
|
+
fatal_exit("You must specify a virtual machine name")
|
46
|
+
end
|
47
|
+
|
48
|
+
vim = get_vim_connection
|
49
|
+
|
50
|
+
baseFolder = find_folder(get_config(:folder));
|
51
|
+
|
52
|
+
vm = find_in_folder(baseFolder, RbVmomi::VIM::VirtualMachine, vmname) or
|
53
|
+
fatal_exit("VM #{vmname} not found")
|
54
|
+
|
55
|
+
vm.PowerOffVM_Task.wait_for_completion unless vm.runtime.powerState == "poweredOff"
|
56
|
+
vm.Destroy_Task
|
57
|
+
puts "Deleted virtual machine #{vmname}"
|
58
|
+
|
59
|
+
if config[:purge]
|
60
|
+
destroy_item(Chef::Node, vmname, "node")
|
61
|
+
destroy_item(Chef::ApiClient, vmname, "client")
|
62
|
+
else
|
63
|
+
puts "Corresponding node and client for the #{vmname} server were not deleted and remain registered with the Chef Server"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Author:: Ian Delahorne (<ian@delahorne.com>)
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'chef/knife'
|
5
|
+
require 'chef/knife/base_ovh_cloud_command'
|
6
|
+
require 'rbvmomi'
|
7
|
+
require 'netaddr'
|
8
|
+
|
9
|
+
class Chef::Knife::OvhCloudVmExecute < Chef::Knife::BaseOvhCloudCommand
|
10
|
+
banner "knife ovh cloud vm execute VMNAME COMMAND ARGS"
|
11
|
+
|
12
|
+
option :exec_user,
|
13
|
+
:long => "--exec-user USER",
|
14
|
+
:description => "User to execute as",
|
15
|
+
:required => true
|
16
|
+
|
17
|
+
option :exec_passwd,
|
18
|
+
:long => "--exec-passwd PASSWORD",
|
19
|
+
:description => "Password for execute user",
|
20
|
+
:required => true
|
21
|
+
|
22
|
+
option :exec_dir,
|
23
|
+
:long => "--exec-dir DIRECTORY",
|
24
|
+
:description => "Working directory to execute in"
|
25
|
+
|
26
|
+
get_common_options
|
27
|
+
|
28
|
+
def run
|
29
|
+
$stdout.sync = true
|
30
|
+
vmname = @name_args[0]
|
31
|
+
if vmname.nil?
|
32
|
+
show_usage
|
33
|
+
fatal_exit("You must specify a virtual machine name")
|
34
|
+
end
|
35
|
+
command = @name_args[1]
|
36
|
+
if command.nil?
|
37
|
+
show_usage
|
38
|
+
fatal_exit("You must specify a command to execute")
|
39
|
+
end
|
40
|
+
|
41
|
+
args = @name_args[2]
|
42
|
+
if args.nil?
|
43
|
+
args = ""
|
44
|
+
end
|
45
|
+
|
46
|
+
vim = get_vim_connection
|
47
|
+
|
48
|
+
dc = get_datacenter
|
49
|
+
folder = find_folder(get_config(:folder)) || dc.vmFolder
|
50
|
+
|
51
|
+
vm = find_in_folder(folder, RbVmomi::VIM::VirtualMachine, vmname) or
|
52
|
+
abort "VM #{vmname} not found"
|
53
|
+
|
54
|
+
gom = vim.serviceContent.guestOperationsManager
|
55
|
+
|
56
|
+
guest_auth = RbVmomi::VIM::NamePasswordAuthentication(:interactiveSession => false,
|
57
|
+
:username => config[:exec_user],
|
58
|
+
:password => config[:exec_passwd])
|
59
|
+
prog_spec = RbVmomi::VIM::GuestProgramSpec(:programPath => command,
|
60
|
+
:arguments => args,
|
61
|
+
:workingDirectory => get_config(:exec_dir))
|
62
|
+
|
63
|
+
gom.processManager.StartProgramInGuest(:vm => vm, :auth => guest_auth, :spec => prog_spec)
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Ezra Pagel (<ezra@cpan.org>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
require 'chef/knife'
|
6
|
+
require 'chef/knife/base_ovh_cloud_command'
|
7
|
+
|
8
|
+
# Lists all known virtual machines in the configured datacenter
|
9
|
+
class Chef::Knife::OvhCloudVmList < Chef::Knife::BaseOvhCloudCommand
|
10
|
+
|
11
|
+
banner "knife ovh cloud vm list"
|
12
|
+
|
13
|
+
get_common_options
|
14
|
+
|
15
|
+
option :recursive,
|
16
|
+
:long => "--recursive",
|
17
|
+
:short => "-r",
|
18
|
+
:description => "Recurse down through sub-folders"
|
19
|
+
|
20
|
+
option :only_folders,
|
21
|
+
:long => "--only-folders",
|
22
|
+
:description => "Print only sub-folders"
|
23
|
+
|
24
|
+
def traverse_folders(folder)
|
25
|
+
puts "#{ui.color("Folder", :cyan)}: "+(folder.path[3..-1].map { |x| x[1] }.* '/')
|
26
|
+
print_vms_in_folder(folder) unless get_config(:only_folders)
|
27
|
+
folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
|
28
|
+
folders.each do |child|
|
29
|
+
traverse_folders(child)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def print_vms_in_folder(folder)
|
34
|
+
vms = find_all_in_folder(folder, RbVmomi::VIM::VirtualMachine)
|
35
|
+
vms.each do |vm|
|
36
|
+
state = case vm.runtime.powerState
|
37
|
+
when PsOn
|
38
|
+
ui.color("on", :green)
|
39
|
+
when PsOff
|
40
|
+
ui.color("off", :red)
|
41
|
+
when PsSuspended
|
42
|
+
ui.color("suspended", :yellow)
|
43
|
+
end
|
44
|
+
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}\t#{ui.color("State:", :cyan)} #{state}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_subfolders(folder)
|
49
|
+
folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
|
50
|
+
folders.each do |subfolder|
|
51
|
+
puts "#{ui.color("Folder Name", :cyan)}: #{subfolder.name}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def run
|
56
|
+
$stdout.sync = true
|
57
|
+
vim = get_vim_connection
|
58
|
+
baseFolder = find_folder(get_config(:folder));
|
59
|
+
if get_config(:recursive)
|
60
|
+
traverse_folders(baseFolder)
|
61
|
+
else
|
62
|
+
print_subfolders(baseFolder)
|
63
|
+
print_vms_in_folder(baseFolder)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Ezra Pagel (<ezra@cpan.org>)
|
3
|
+
# Contributor:: Jesse Campbell (<hikeit@gmail.com>)
|
4
|
+
# Contributor:: Bethany Erskine (<bethany@paperlesspost.com>)
|
5
|
+
# Contributor:: Adrian Stanila (https://github.com/sacx)
|
6
|
+
# License:: Apache License, Version 2.0
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'chef/knife'
|
10
|
+
require 'chef/knife/base_ovh_cloud_command'
|
11
|
+
require 'rbvmomi'
|
12
|
+
|
13
|
+
# Clone an existing template into a new VM, optionally applying a customization specification.
|
14
|
+
# usage:
|
15
|
+
# knife vsphere vm markastemplate MyVM --folder /templates
|
16
|
+
class Chef::Knife::OvhCloudVmMarkastemplate < Chef::Knife::BaseOvhCloudCommand
|
17
|
+
|
18
|
+
banner "knife ovh cloud vm markastemplate VMNAME"
|
19
|
+
|
20
|
+
get_common_options
|
21
|
+
|
22
|
+
option :folder,
|
23
|
+
:long => "--folder FOLDER",
|
24
|
+
:description => "The folder which contains the VM"
|
25
|
+
|
26
|
+
def run
|
27
|
+
$stdout.sync = true
|
28
|
+
|
29
|
+
vmname = @name_args[0]
|
30
|
+
if vmname.nil?
|
31
|
+
show_usage
|
32
|
+
fatal_exit("You must specify a virtual machine name")
|
33
|
+
end
|
34
|
+
config[:chef_node_name] = vmname unless config[:chef_node_name]
|
35
|
+
config[:vmname] = vmname
|
36
|
+
|
37
|
+
if get_config(:bootstrap) && get_config(:distro) && !@@chef_config_dir
|
38
|
+
fatal_exit("Can't find .chef for bootstrap files. chdir to a location with a .chef directory and try again")
|
39
|
+
end
|
40
|
+
|
41
|
+
vim = get_vim_connection
|
42
|
+
|
43
|
+
dc = get_datacenter
|
44
|
+
|
45
|
+
src_folder = find_folder(get_config(:folder)) || dc.vmFolder
|
46
|
+
|
47
|
+
vm = find_in_folder(src_folder, RbVmomi::VIM::VirtualMachine, config[:vmname]) or
|
48
|
+
abort "VM not found"
|
49
|
+
|
50
|
+
puts "Marking VM #{vmname} as template"
|
51
|
+
vm.MarkAsTemplate()
|
52
|
+
puts "Finished marking VM #{vmname} as template"
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Raducu Deaconu (<rhadoo_io@yahoo.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
require 'chef/knife'
|
6
|
+
require 'chef/knife/base_ovh_cloud_command'
|
7
|
+
|
8
|
+
# migrate vm to specified resource pool , datastore and host
|
9
|
+
class Chef::Knife::OvhCloudVmMigrate < Chef::Knife::BaseOvhCloudCommand
|
10
|
+
#migrate --resource-pool --dest-host --dest-datastore
|
11
|
+
banner "knife ovh cloud vm migrate (options)"
|
12
|
+
|
13
|
+
get_common_options
|
14
|
+
|
15
|
+
option :dest_host,
|
16
|
+
:long => "--dest-host HOST",
|
17
|
+
:description => "Destination host for the VM or template"
|
18
|
+
|
19
|
+
option :dest_datastore,
|
20
|
+
:long => "--dest-datastore DATASTORE",
|
21
|
+
:description => "The destination datastore"
|
22
|
+
|
23
|
+
option :priority,
|
24
|
+
:long => "--priority PRIORITY",
|
25
|
+
:description => "migration priority"
|
26
|
+
|
27
|
+
option :resource_pool,
|
28
|
+
:long => "--resource-pool POOL",
|
29
|
+
:description => "The resource pool into which to put the VM"
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
def traverse_folders_for_pool(folder, poolname)
|
34
|
+
children = folder.children.find_all
|
35
|
+
children.each do |child|
|
36
|
+
if child.class == RbVmomi::VIM::ClusterComputeResource || child.class == RbVmomi::VIM::ComputeResource || child.class == RbVmomi::VIM::ResourcePool
|
37
|
+
if child.name == poolname then return child end
|
38
|
+
elsif child.class == RbVmomi::VIM::Folder
|
39
|
+
pool = traverse_folders_for_pool(child, poolname)
|
40
|
+
if pool then return pool end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
return false
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def find_host_folder(folder, type, name)
|
48
|
+
folder.host.find { |o| o.name == name }
|
49
|
+
end
|
50
|
+
|
51
|
+
def run
|
52
|
+
$stdout.sync = true
|
53
|
+
vmname = @name_args[0]
|
54
|
+
if vmname.nil?
|
55
|
+
show_usage
|
56
|
+
fatal_exit("You must specify a virtual machine name")
|
57
|
+
end
|
58
|
+
|
59
|
+
vim = get_vim_connection
|
60
|
+
dc=get_datacenter
|
61
|
+
folder = find_folder(get_config(:folder)) || dc.vmFolder
|
62
|
+
|
63
|
+
vm = find_in_folder(folder, RbVmomi::VIM::VirtualMachine, vmname) or
|
64
|
+
abort "VM #{vmname} not found"
|
65
|
+
|
66
|
+
|
67
|
+
priority=config[:priority]
|
68
|
+
dest_host=config[:dest_host]
|
69
|
+
ndc = find_datastore(config[:dest_datastore]) or abort "dest-datastore not found"
|
70
|
+
npool=find_pool(config[:resource_pool])
|
71
|
+
folderd = dc.hostFolder
|
72
|
+
pool = traverse_folders_for_pool(folderd,config[:resource_pool] ) or abort "Pool #{poolname} not found"
|
73
|
+
h=find_host_folder(pool, RbVmomi::VIM::HostSystem, dest_host)
|
74
|
+
migrate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(:datastore => ndc,:pool => npool,:host=>h)
|
75
|
+
#puts migrate_spec.host.name
|
76
|
+
vm.RelocateVM_Task(:spec => migrate_spec,:priority=>priority).wait_for_completion
|
77
|
+
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Dupras (<bdupras@rallydev.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
require 'chef/knife'
|
6
|
+
require 'chef/knife/base_ovh_cloud_command'
|
7
|
+
|
8
|
+
# Lists all known virtual machines in the configured datacenter
|
9
|
+
class Chef::Knife::OvhCloudVmMove < Chef::Knife::BaseOvhCloudCommand
|
10
|
+
|
11
|
+
banner "knife ovh cloud vm move"
|
12
|
+
|
13
|
+
get_common_options
|
14
|
+
|
15
|
+
option :dest_name,
|
16
|
+
:long => "--dest-name NAME",
|
17
|
+
:short => "-r",
|
18
|
+
:description => "Destination name of the VM or template"
|
19
|
+
|
20
|
+
option :dest_folder,
|
21
|
+
:long => "--dest-folder FOLDER",
|
22
|
+
:description => "The destination folder into which the VM or template should be moved"
|
23
|
+
|
24
|
+
|
25
|
+
def run
|
26
|
+
$stdout.sync = true
|
27
|
+
vmname = @name_args[0]
|
28
|
+
if vmname.nil?
|
29
|
+
show_usage
|
30
|
+
fatal_exit("You must specify a virtual machine name")
|
31
|
+
end
|
32
|
+
|
33
|
+
vim = get_vim_connection
|
34
|
+
dcname = get_config(:vsphere_dc)
|
35
|
+
dc = vim.serviceInstance.find_datacenter(dcname) or abort "datacenter not found"
|
36
|
+
folder = find_folder(get_config(:folder)) || dc.vmFolder
|
37
|
+
|
38
|
+
vm = find_in_folder(folder, RbVmomi::VIM::VirtualMachine, vmname) or
|
39
|
+
abort "VM #{vmname} not found"
|
40
|
+
|
41
|
+
dest_name = config[:dest_name] || vmname
|
42
|
+
dest_folder = config[:dest_folder].nil? ? (vm.parent) : (find_folder(get_config(:dest_folder)))
|
43
|
+
|
44
|
+
vm.Rename_Task(:newName => dest_name).wait_for_completion unless vmname == dest_name
|
45
|
+
dest_folder.MoveIntoFolder_Task(:list => [vm]).wait_for_completion unless folder == dest_folder
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Raducu Deaconu (<rhadoo_io@yahoo.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
require 'chef/knife'
|
6
|
+
require 'chef/knife/base_ovh_cloud_command'
|
7
|
+
# Switch VM networking state up/down (on all network interfaces)
|
8
|
+
class Chef::Knife::OvhCloudVmNet < Chef::Knife::BaseOvhCloudCommand
|
9
|
+
banner "knife ovh cloud vm net STATE VMNAME"
|
10
|
+
get_common_options
|
11
|
+
def run
|
12
|
+
$stdout.sync = true
|
13
|
+
vmname = @name_args[1]
|
14
|
+
if vmname.nil?
|
15
|
+
show_usage
|
16
|
+
fatal_exit("You must specify a virtual machine name")
|
17
|
+
end
|
18
|
+
|
19
|
+
state = @name_args[0]
|
20
|
+
if state.nil?
|
21
|
+
show_usage
|
22
|
+
fatal_exit("You must specify networking state up/down")
|
23
|
+
end
|
24
|
+
|
25
|
+
if state=="up"
|
26
|
+
if_state=true
|
27
|
+
elsif state=="down"
|
28
|
+
if_state=false
|
29
|
+
end
|
30
|
+
vim = get_vim_connection
|
31
|
+
dc=get_datacenter
|
32
|
+
folder = find_folder(get_config(:folder)) || dc.vmFolder
|
33
|
+
vm = find_in_folder(folder, RbVmomi::VIM::VirtualMachine, vmname) or
|
34
|
+
abort "VM #{vmname} not found"
|
35
|
+
vm.config.hardware.device.each.grep(RbVmomi::VIM::VirtualEthernetCard) do |a|
|
36
|
+
backing=a.backing
|
37
|
+
key= a.key
|
38
|
+
|
39
|
+
puts "#{ui.color("Setting network adapter", :cyan)} :#{a.deviceInfo.label} on vlan :#{a.deviceInfo.summary} :#{state}"
|
40
|
+
|
41
|
+
conninfo=RbVmomi::VIM.VirtualDeviceConnectInfo(:startConnected => true,
|
42
|
+
:allowGuestControl => true,
|
43
|
+
:connected => if_state)
|
44
|
+
|
45
|
+
ndevice = RbVmomi::VIM.VirtualE1000(:key => key,
|
46
|
+
:backing => backing,
|
47
|
+
:connectable => conninfo)
|
48
|
+
|
49
|
+
device_spec = RbVmomi::VIM.VirtualDeviceConfigSpec(:operation => :edit,
|
50
|
+
:device => ndevice)
|
51
|
+
|
52
|
+
vmspec = RbVmomi::VIM.VirtualMachineConfigSpec(:deviceChange =>[device_spec])
|
53
|
+
|
54
|
+
vm.ReconfigVM_Task(:spec => vmspec).wait_for_completion
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|