knife-vsphere 1.2.3 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77a04602d5afe6a6817798b672a8b0ef3391fa2a
4
- data.tar.gz: d8f7b4d9e54717ac3c16c5f363c1f9169250cf04
3
+ metadata.gz: 1b99f48fa873d629a1882d1f8f269fa314014fea
4
+ data.tar.gz: 980c7c2071e841eb6008515308d4241f9196dc94
5
5
  SHA512:
6
- metadata.gz: 141c9bd5a3ba87d99c35e55b3aea268d37c73480fe3b20cfca3735d661c5878510e1938ba4a7d872062e1a6bce27edb1cbc2b004da29d0051fefe8930758d57a
7
- data.tar.gz: 3c64b651ec747c0724dd991a6b9dd6fe16d751921f55f9f5497299680b97305452af4d489ebaf2456231c359c7339f9ced911c1826392c1a106168b74fbd8492
6
+ metadata.gz: 77f5f85d54f7e1df223cba68410c076ff732bb3a7e5379bed7e331c45e307f7911f7ea68e26662dc6857e7bead771a43436442636bed9a9c98a6b38bf54b1a37
7
+ data.tar.gz: cfc52c14fff451c70b0f0878fef47ce45bac4a41c74089dba8315ada86ad62329456be23fb723282447e7fff706d2ee6a804724308bc30a435700d73d22a953e
@@ -0,0 +1,51 @@
1
+
2
+ require 'chef/knife'
3
+ require 'chef/knife/base_vsphere_command'
4
+
5
+ # Upload or download a file from a datastore
6
+ class Chef::Knife::VsphereDatastoreFile < Chef::Knife::BaseVsphereCommand
7
+ banner 'knife vsphere datastore file'
8
+
9
+ common_options
10
+
11
+ option :local_file,
12
+ long: '--local-file FILE',
13
+ short: '-f',
14
+ description: 'Local file and path'
15
+
16
+ option :remote_file,
17
+ long: '--remote-file FILE',
18
+ short: '-r',
19
+ description: 'Remote file and path'
20
+
21
+ option :upload,
22
+ long: '--upload-file',
23
+ short: '-u',
24
+ description: 'Upload local file to remote'
25
+
26
+ option :download,
27
+ long: '--download-file',
28
+ short: '-D',
29
+ description: 'Download remote file to local'
30
+
31
+ def run
32
+ $stdout.sync = true
33
+
34
+ unless get_config(:upload) || get_config(:download)
35
+ show_usage
36
+ fatal_exit('You must specify either upload or download')
37
+ end
38
+ unless get_config(:local_file) && get_config(:remote_file)
39
+ show_usage
40
+ fatal_exit('You must specify both local-file and remote-file')
41
+ end
42
+
43
+ vim_connection
44
+ datastore = find_datastore(@name_args[0])
45
+ if get_config(:upload)
46
+ datastore.upload(get_config(:remote_file), get_config(:local_file))
47
+ elsif get_config(:download)
48
+ datastore.download(get_config(:remote_file), get_config(:local_file))
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,110 @@
1
+ # License:: Apache License, Version 2.0
2
+
3
+ require 'chef/knife'
4
+ require 'chef/knife/base_vsphere_command'
5
+ require 'rbvmomi'
6
+ require 'netaddr'
7
+
8
+ class Chef::Knife::VsphereVmCdrom < Chef::Knife::BaseVsphereCommand
9
+ banner 'knife vsphere vm cdrom VMNAME (options)'
10
+
11
+ common_options
12
+
13
+ option :datastore,
14
+ long: '--datastore STORE',
15
+ description: 'The datastore for an iso source'
16
+
17
+ option :iso,
18
+ long: '--iso ISO',
19
+ description: 'The name and path of the ISO to attach'
20
+
21
+ option :attach,
22
+ short: '-a',
23
+ long: '--attach',
24
+ description: 'Attach the virtual cdrom to the VM'
25
+
26
+ option :disconnect,
27
+ long: '--disconnect',
28
+ description: 'Disconnect the virtual cdrom from the VM'
29
+
30
+ option :on_boot,
31
+ long: '--on_boot ONBOOT',
32
+ description: 'False for Detached on boot or True for Attached on boot'
33
+
34
+ option :client_device,
35
+ long: '--client_device',
36
+ description: 'Set the backing store to client-device'
37
+
38
+ option :recursive,
39
+ short: '-r',
40
+ long: '--recursive',
41
+ description: 'Search all folders'
42
+
43
+ def run
44
+ $stdout.sync = true
45
+
46
+ vmname = @name_args[0]
47
+ if vmname.nil?
48
+ show_usage
49
+ ui.fatal('You must specify a virtual machine name')
50
+ exit 1
51
+ end
52
+
53
+ vim_connection
54
+
55
+ if get_config(:recursive)
56
+ vms = get_vms(vmname)
57
+ if vms.length > 1
58
+ abort "More than one VM with name #{vmname} found:\n" + vms.map { |vm| get_path_to_object(vm) }.join("\n")
59
+ end
60
+ abort "VM #{vmname} not found" if vms.length == 0
61
+ vm = vms[0]
62
+ else
63
+ base_folder = find_folder(get_config(:folder))
64
+
65
+ vm = find_in_folder(base_folder, RbVmomi::VIM::VirtualMachine, vmname) || abort("VM #{vmname} not found")
66
+ end
67
+
68
+ if get_config(:iso)
69
+ cdrom_obj = vm.config.hardware.device.find { |hw| hw.class == RbVmomi::VIM::VirtualCdrom }
70
+ machine_conf_spec = RbVmomi::VIM::VirtualMachineConfigSpec(
71
+ deviceChange: [{
72
+ operation: :edit,
73
+ device: RbVmomi::VIM::VirtualCdrom(
74
+ backing: RbVmomi::VIM::VirtualCdromIsoBackingInfo(
75
+ fileName: "[#{get_config(:datastore)}] #{get_config(:iso)}"
76
+ ),
77
+ key: cdrom_obj.key,
78
+ controllerKey: cdrom_obj.controllerKey,
79
+ connectable: RbVmomi::VIM::VirtualDeviceConnectInfo(
80
+ startConnected: get_config(:on_boot) || false,
81
+ connected: get_config(:attach) || false,
82
+ allowGuestControl: true
83
+ )
84
+ )
85
+ }]
86
+ )
87
+ vm.ReconfigVM_Task(spec: machine_conf_spec).wait_for_completion
88
+ elsif get_config(:disconnect)
89
+ cdrom_obj = vm.config.hardware.device.find { |hw| hw.class == RbVmomi::VIM::VirtualCdrom }
90
+ machine_conf_spec = RbVmomi::VIM::VirtualMachineConfigSpec(
91
+ deviceChange: [{
92
+ operation: :edit,
93
+ device: RbVmomi::VIM::VirtualCdrom(
94
+ backing: RbVmomi::VIM::VirtualCdromRemoteAtapiBackingInfo(
95
+ deviceName: ''),
96
+ key: cdrom_obj.key,
97
+ controllerKey: cdrom_obj.controllerKey,
98
+ connectable: RbVmomi::VIM::VirtualDeviceConnectInfo(
99
+ startConnected: false,
100
+ connected: false,
101
+ allowGuestControl: true
102
+ )
103
+ )
104
+ }]
105
+ )
106
+ puts 'attempting to reconfigure the vm'
107
+ vm.ReconfigVM_Task(spec: machine_conf_spec).wait_for_completion
108
+ end
109
+ end
110
+ end
@@ -368,15 +368,17 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
368
368
  def wait_for_access(connect_host, connect_port, protocol)
369
369
  if protocol == 'winrm'
370
370
  load_winrm_deps
371
+ if get_config(:winrm_transport) == 'ssl' && get_config(:winrm_port) == '5985'
372
+ config[:winrm_port] = '5986'
373
+ end
371
374
  connect_port = get_config(:winrm_port)
372
- print "\n#{ui.color('Waiting for winrm access to become available', :magenta)}"
375
+ print "\n#{ui.color("Waiting for winrm access to become available on #{connect_host}:#{connect_port}",:magenta)}"
373
376
  print('.') until tcp_test_winrm(connect_host, connect_port) do
374
377
  sleep 10
375
378
  puts('done')
376
379
  end
377
380
  else
378
- print "\n#{ui.color('Waiting for sshd access to become available', :magenta)}"
379
- # If FreeSSHd, winsshd etc are available
381
+ print "\n#{ui.color("Waiting for sshd access to become available on #{connect_host}:#{connect_port}", :magenta)}"
380
382
  print('.') until tcp_test_ssh(connect_host, connect_port) do
381
383
  sleep 10
382
384
  puts('done')
@@ -534,7 +536,9 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
534
536
  end
535
537
  end
536
538
 
537
- unless get_config(:disable_customization)
539
+ if get_config(:disable_customization)
540
+ clone_spec.customization = cust_spec
541
+ else
538
542
  use_ident = !config[:customization_hostname].nil? || !get_config(:customization_domain).nil? || cust_spec.identity.nil?
539
543
 
540
544
  if use_ident
@@ -16,19 +16,28 @@ class Chef::Knife::VsphereVmList < Chef::Knife::BaseVsphereCommand
16
16
  short: '-r',
17
17
  description: 'Recurse into sub-folders'
18
18
 
19
- def traverse_folders(folder, is_top = false, recurse = false)
20
- vms = find_all_in_folder(folder, RbVmomi::VIM::VirtualMachine).select { |v| v.config && !v.config.template }
21
- if vms.any?
22
- puts "#{ui.color('Folder', :cyan)}: " + (folder.path[3..-1].map { |x| x[1] }.* '/')
23
- vms.each { |v| print_vm(v) }
24
- elsif is_top
25
- puts "#{ui.color('No VMs', :cyan)}"
19
+ option :onlyfolders,
20
+ long: '--only-folders',
21
+ description: 'List only the folders found',
22
+ boolean: false
23
+
24
+ def traverse_folders(folder, is_top = false, recurse = false, only_folders = false)
25
+ if only_folders
26
+ print_folder(folder)
27
+ else
28
+ vms = find_all_in_folder(folder, RbVmomi::VIM::VirtualMachine).select { |v| v.config && !v.config.template }
29
+ if vms.any?
30
+ print_folder(folder)
31
+ vms.each { |v| print_vm(v) }
32
+ elsif is_top
33
+ puts "#{ui.color('No VMs', :cyan)}"
34
+ end
26
35
  end
27
36
 
28
37
  return unless recurse
29
38
  folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
30
39
  folders.each do |child|
31
- traverse_folders(child, false, recurse)
40
+ traverse_folders(child, false, recurse, only_folders)
32
41
  end
33
42
  end
34
43
 
@@ -47,11 +56,16 @@ class Chef::Knife::VsphereVmList < Chef::Knife::BaseVsphereCommand
47
56
  puts "\t\t#{ui.color('State:', :magenta)} #{state}"
48
57
  end
49
58
 
59
+ def print_folder(folder)
60
+ puts "#{ui.color('Folder', :cyan)}: " + (folder.path[3..-1].map { |x| x[1] }.* '/')
61
+ end
62
+
50
63
  def run
51
64
  vim_connection
52
65
  base_folder = find_folder(get_config(:folder))
53
- recurse = get_config(:recursive)
66
+ only_folders = get_config(:onlyfolders)
67
+ recurse = only_folders || get_config(:recursive)
54
68
  is_top = true
55
- traverse_folders(base_folder, is_top, recurse)
69
+ traverse_folders(base_folder, is_top, recurse, only_folders)
56
70
  end
57
71
  end
@@ -20,7 +20,8 @@ class Chef::Knife::VsphereVmMarkastemplate < Chef::Knife::BaseVsphereCommand
20
20
 
21
21
  option :folder,
22
22
  long: '--folder FOLDER',
23
- description: 'The folder which contains the VM'
23
+ description: 'The folder which contains the VM',
24
+ default: ''
24
25
 
25
26
  def run
26
27
  $stdout.sync = true
@@ -1,3 +1,3 @@
1
1
  module KnifeVsphere
2
- VERSION = '1.2.3'
2
+ VERSION = '1.2.4'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Pagel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-16 00:00:00.000000000 Z
11
+ date: 2015-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: netaddr
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
- - !ruby/object:Gem::Dependency
28
- name: chef
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.10.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 0.10.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rbvmomi
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +52,20 @@ dependencies:
66
52
  - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: 0.6.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: chef
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.0
69
69
  description: VMware vSphere Support for Chef's Knife Command
70
70
  email: ezra@cpan.org
71
71
  executables: []
@@ -77,6 +77,7 @@ files:
77
77
  - lib/chef/knife/vsphere_cluster_list.rb
78
78
  - lib/chef/knife/vsphere_cpu_ratio.rb
79
79
  - lib/chef/knife/vsphere_customization_list.rb
80
+ - lib/chef/knife/vsphere_datastore_file.rb
80
81
  - lib/chef/knife/vsphere_datastore_list.rb
81
82
  - lib/chef/knife/vsphere_datastore_maxfree.rb
82
83
  - lib/chef/knife/vsphere_datastorecluster_list.rb
@@ -88,6 +89,7 @@ files:
88
89
  - lib/chef/knife/vsphere_template_list.rb
89
90
  - lib/chef/knife/vsphere_vlan_create.rb
90
91
  - lib/chef/knife/vsphere_vlan_list.rb
92
+ - lib/chef/knife/vsphere_vm_cdrom.rb
91
93
  - lib/chef/knife/vsphere_vm_clone.rb
92
94
  - lib/chef/knife/vsphere_vm_config.rb
93
95
  - lib/chef/knife/vsphere_vm_delete.rb