knife-vsphere 0.9.7 → 0.9.8

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.
@@ -126,21 +126,16 @@ class Chef
126
126
  end
127
127
 
128
128
  def traverse_folders_for_vm(folder, vmname)
129
- # not sure why @vm is necessary, but it returns class Array
130
- # instead of class VirtualMachine without it... ugh
131
- @vm = nil
132
- folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
133
- folders.each do |child|
134
- traverse_folders_for_vm(child, vmname)
135
- vms = find_all_in_folder(folder, RbVmomi::VIM::VirtualMachine)
136
- vms.each do |vm|
137
- if vm.name == vmname
138
- @vm = vm
139
- return @vm
140
- end
129
+ children = folder.children.find_all
130
+ children.each do |child|
131
+ if child.class == RbVmomi::VIM::VirtualMachine && child.name == vmname
132
+ return child
133
+ elsif child.class == RbVmomi::VIM::Folder
134
+ vm = traverse_folders_for_vm(child, vmname)
135
+ if vm then return vm end
141
136
  end
142
137
  end
143
- return @vm
138
+ return false
144
139
  end
145
140
 
146
141
  def traverse_folders_for_dc(folder, dcname)
@@ -1,49 +1,49 @@
1
- # Copyright (C) 2012, SCM Ventures AB
2
- # Author: Ian Delahorne <ian@scmventures.se>
3
- #
4
- # Permission to use, copy, modify, and/or distribute this software for
5
- # any purpose with or without fee is hereby granted, provided that the
6
- # above copyright notice and this permission notice appear in all
7
- # copies.
8
- #
9
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
- # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
- # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
- # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
- # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
- # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
- # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
- # PERFORMANCE OF THIS SOFTWARE
17
-
18
- require 'chef/knife'
19
- require 'chef/knife/base_vsphere_command'
20
-
21
- # Gets the data store with the most free space in datacenter
22
- class Chef::Knife::VsphereDatastoreMaxfree < Chef::Knife::BaseVsphereCommand
23
-
24
- banner "knife vsphere datastore maxfree"
25
-
26
- option :regex,
27
- :short => "-r REGEX",
28
- :long => "--regex REGEX",
29
- :description => "Regex to match the datastore name"
30
- $default[:regex] = ''
31
-
32
- get_common_options
33
-
34
- def run
35
- $stdout.sync = true
36
-
37
- vim = get_vim_connection
38
- dcname = get_config(:vsphere_dc)
39
- regex = /#{Regexp.escape( get_config(:regex))}/
40
- dc = config[:vim].serviceInstance.find_datacenter(dcname) or abort "datacenter not found"
41
- max = nil
42
- dc.datastore.each do |store|
43
- if regex.match(store.name) and (max == nil or max.summary[:freeSpace] < store.summary[:freeSpace])
44
- max = store
45
- end
46
- end
47
- puts max ? max.name : ""
48
- end
49
- end
1
+ # Copyright (C) 2012, SCM Ventures AB
2
+ # Author: Ian Delahorne <ian@scmventures.se>
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for
5
+ # any purpose with or without fee is hereby granted, provided that the
6
+ # above copyright notice and this permission notice appear in all
7
+ # copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
+ # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
+ # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
+ # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
+ # PERFORMANCE OF THIS SOFTWARE
17
+
18
+ require 'chef/knife'
19
+ require 'chef/knife/base_vsphere_command'
20
+
21
+ # Gets the data store with the most free space in datacenter
22
+ class Chef::Knife::VsphereDatastoreMaxfree < Chef::Knife::BaseVsphereCommand
23
+
24
+ banner "knife vsphere datastore maxfree"
25
+
26
+ option :regex,
27
+ :short => "-r REGEX",
28
+ :long => "--regex REGEX",
29
+ :description => "Regex to match the datastore name"
30
+
31
+ get_common_options
32
+ $default[:regex] = ''
33
+
34
+ def run
35
+ $stdout.sync = true
36
+
37
+ vim = get_vim_connection
38
+ dcname = get_config(:vsphere_dc)
39
+ regex = /#{Regexp.escape( get_config(:regex))}/
40
+ dc = config[:vim].serviceInstance.find_datacenter(dcname) or abort "datacenter not found"
41
+ max = nil
42
+ dc.datastore.each do |store|
43
+ if regex.match(store.name) and (max == nil or max.summary[:freeSpace] < store.summary[:freeSpace])
44
+ max = store
45
+ end
46
+ end
47
+ puts max ? max.name : ""
48
+ end
49
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright (C) 2012, SCM Ventures AB
2
+ # Author: Ian Delahorne <ian@scmventures.se>
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for
5
+ # any purpose with or without fee is hereby granted, provided that the
6
+ # above copyright notice and this permission notice appear in all
7
+ # copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
+ # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
+ # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
+ # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
+ # PERFORMANCE OF THIS SOFTWARE
17
+
18
+ require 'chef/knife'
19
+ require 'chef/knife/base_vsphere_command'
20
+
21
+ def number_to_human_size(number)
22
+ number = number.to_f
23
+ storage_units_fmt = ["byte", "kB", "MB", "GB", "TB"]
24
+ base = 1024
25
+ if number.to_i < base
26
+ unit = storage_units_fmt[0]
27
+ else
28
+ max_exp = storage_units_fmt.size - 1
29
+ exponent = (Math.log(number) / Math.log(base)).to_i # Convert to base
30
+ exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
31
+ number /= base ** exponent
32
+ unit = storage_units_fmt[exponent]
33
+ end
34
+
35
+ return sprintf("%0.2f %s", number, unit)
36
+ end
37
+
38
+
39
+ # Lists all known data store cluster in datacenter with sizes
40
+ class Chef::Knife::VsphereDatastoreclusterList < Chef::Knife::BaseVsphereCommand
41
+
42
+ banner "knife vsphere datastore list"
43
+
44
+ get_common_options
45
+
46
+ def run
47
+ $stdout.sync = true
48
+
49
+ vim = get_vim_connection
50
+ dc = get_datacenter
51
+ dc.datastoreFolder.childEntity.each do |store|
52
+ if store.class.to_s == "StoragePod"
53
+ avail = number_to_human_size(store.summary[:freeSpace])
54
+ cap = number_to_human_size(store.summary[:capacity])
55
+ puts "#{ui.color("DatastoreCluster", :cyan)}: #{store.name} (#{avail} / #{cap})"
56
+ end
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,49 @@
1
+ # Copyright (C) 2012, SCM Ventures AB
2
+ # Author: Ian Delahorne <ian@scmventures.se>
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for
5
+ # any purpose with or without fee is hereby granted, provided that the
6
+ # above copyright notice and this permission notice appear in all
7
+ # copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
+ # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
+ # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
+ # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
+ # PERFORMANCE OF THIS SOFTWARE
17
+
18
+ require 'chef/knife'
19
+ require 'chef/knife/base_vsphere_command'
20
+
21
+ # Gets the data store cluster with the most free space in datacenter
22
+ class Chef::Knife::VsphereDatastoreclusterMaxfree < Chef::Knife::BaseVsphereCommand
23
+
24
+ banner "knife vsphere datastorecluster maxfree"
25
+
26
+ option :regex,
27
+ :short => "-r REGEX",
28
+ :long => "--regex REGEX",
29
+ :description => "Regex to match the datastore cluster name"
30
+ $default[:regex] = ''
31
+
32
+ get_common_options
33
+
34
+ def run
35
+ $stdout.sync = true
36
+
37
+ vim = get_vim_connection
38
+ dcname = get_config(:vsphere_dc)
39
+ regex = /#{Regexp.escape( get_config(:regex))}/
40
+ dc = config[:vim].serviceInstance.find_datacenter(dcname) or abort "datacenter not found"
41
+ max = nil
42
+ dc.datastoreFolder.childEntity.each do |store|
43
+ if regex.match(store.name) and (store.class.to_s == "StoragePod") and (max == nil or max.summary[:freeSpace] < store.summary[:freeSpace])
44
+ max = store
45
+ end
46
+ end
47
+ puts max ? max.name : ""
48
+ end
49
+ end
@@ -0,0 +1,58 @@
1
+ require 'chef/knife'
2
+ require 'chef/knife/base_vsphere_command'
3
+ require 'rbvmomi'
4
+ require 'netaddr'
5
+
6
+ class Chef::Knife::VspherePoolQuery < Chef::Knife::BaseVsphereCommand
7
+ banner "knife vsphere pool query POOLNAME QUERY. See \"http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.ComputeResource.html\" for allowed QUERY values."
8
+
9
+ get_common_options
10
+
11
+ def traverse_folders_for_pool(folder, poolname)
12
+ children = folder.children.find_all
13
+ children.each do |child|
14
+ if child.class == RbVmomi::VIM::ClusterComputeResource || child.class == RbVmomi::VIM::ComputeResource || child.class == RbVmomi::VIM::ResourcePool
15
+ if child.name == poolname then return child end
16
+ elsif child.class == RbVmomi::VIM::Folder
17
+ pool = traverse_folders_for_pool(child, poolname)
18
+ if pool then return pool end
19
+ end
20
+ end
21
+ return false
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ poolname = @name_args[0]
27
+ if poolname.nil?
28
+ show_usage
29
+ fatal_exit("You must specify a resource poor or cluster name (see knife vsphere pool list)")
30
+ end
31
+
32
+ query_string = @name_args[1]
33
+ if query_string.nil?
34
+ show_usage
35
+ fatal_exit("You must specify a QUERY value (e.g. summary.overallStatus )")
36
+ end
37
+
38
+ vim = get_vim_connection
39
+
40
+ dc = get_datacenter
41
+ folder = dc.hostFolder
42
+
43
+ pool = traverse_folders_for_pool(folder, poolname) or abort "Pool #{poolname} not found"
44
+
45
+ # split QUERY by dots, and walk the object model
46
+ query = query_string.split '.'
47
+ result = pool
48
+ query.each do |part|
49
+ message, index = part.split(/[\[\]]/)
50
+ unless result.respond_to? message.to_sym
51
+ fatal_exit("\"#{query_string}\" not recognized.")
52
+ end
53
+
54
+ result = index ? result.send(message)[index.to_i] : result.send(message)
55
+ end
56
+ puts result
57
+ end
58
+ end
@@ -1,49 +1,48 @@
1
- # Author:: Brian Dupras (<bdupras@rallydev.com>)
2
- # License:: Apache License, Version 2.0
3
-
4
- require 'chef/knife'
5
- require 'chef/knife/base_vsphere_command'
6
- require 'rbvmomi'
7
- require 'netaddr'
8
-
9
- class Chef::Knife::VsphereVmQuery < Chef::Knife::BaseVsphereCommand
10
- banner "knife vsphere vm query VMNAME QUERY. See \"http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.VirtualMachine.html\" for allowed QUERY values."
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
- query_string = @name_args[1]
23
- if query_string.nil?
24
- show_usage
25
- fatal_exit("You must specify a QUERY value (e.g. guest.ipAddress or network[0].name)")
26
- end
27
-
28
- vim = get_vim_connection
29
-
30
- dc = get_datacenter
31
- folder = find_folder(get_config(:folder)) || dc.vmFolder
32
-
33
- vm = find_in_folder(folder, RbVmomi::VIM::VirtualMachine, vmname) or
34
- abort "VM #{vmname} not found"
35
-
36
- # split QUERY by dots, and walk the object model
37
- query = query_string.split '.'
38
- result = vm
39
- query.each do |part|
40
- message, index = part.split(/[\[\]]/)
41
- unless result.respond_to? message.to_sym
42
- fatal_exit("\"#{query_string}\" not recognized.")
43
- end
44
-
45
- result = index ? result.send(message)[index.to_i] : result.send(message)
46
- end
47
- puts result
48
- end
49
- end
1
+ # Author:: Brian Dupras (<bdupras@rallydev.com>)
2
+ # License:: Apache License, Version 2.0
3
+
4
+ require 'chef/knife'
5
+ require 'chef/knife/base_vsphere_command'
6
+ require 'rbvmomi'
7
+ require 'netaddr'
8
+
9
+ class Chef::Knife::VsphereVmQuery < Chef::Knife::BaseVsphereCommand
10
+ banner "knife vsphere vm query VMNAME QUERY. See \"http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.VirtualMachine.html\" for allowed QUERY values."
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
+ query_string = @name_args[1]
23
+ if query_string.nil?
24
+ show_usage
25
+ fatal_exit("You must specify a QUERY value (e.g. guest.ipAddress or network[0].name)")
26
+ end
27
+
28
+ vim = get_vim_connection
29
+
30
+ dc = get_datacenter
31
+ folder = find_folder(get_config(:folder)) || dc.vmFolder
32
+
33
+ vm = traverse_folders_for_vm(folder, vmname) or abort "VM #{vmname} not found"
34
+
35
+ # split QUERY by dots, and walk the object model
36
+ query = query_string.split '.'
37
+ result = vm
38
+ query.each do |part|
39
+ message, index = part.split(/[\[\]]/)
40
+ unless result.respond_to? message.to_sym
41
+ fatal_exit("\"#{query_string}\" not recognized.")
42
+ end
43
+
44
+ result = index ? result.send(message)[index.to_i] : result.send(message)
45
+ end
46
+ puts result
47
+ end
48
+ end
@@ -1,4 +1,4 @@
1
1
  module KnifeVsphere
2
- VERSION = "0.9.7"
2
+ VERSION = "0.9.8"
3
3
  end
4
4
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knife-vsphere
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.7
5
+ version: 0.9.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ezra Pagel
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2013-12-09 00:00:00 -06:00
13
+ date: 2014-01-30 00:00:00 -06:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -58,9 +58,12 @@ files:
58
58
  - lib/chef/knife/base_vsphere_command.rb
59
59
  - lib/chef/knife/vshpere_vm_move.rb
60
60
  - lib/chef/knife/vsphere_customization_list.rb
61
+ - lib/chef/knife/vsphere_datastorecluster_list.rb
62
+ - lib/chef/knife/vsphere_datastorecluster_maxfree.rb
61
63
  - lib/chef/knife/vsphere_datastore_list.rb
62
64
  - lib/chef/knife/vsphere_datastore_maxfree.rb
63
65
  - lib/chef/knife/vsphere_pool_list.rb
66
+ - lib/chef/knife/vsphere_pool_query.rb
64
67
  - lib/chef/knife/vsphere_template_list.rb
65
68
  - lib/chef/knife/vsphere_vlan_list.rb
66
69
  - lib/chef/knife/vsphere_vm_clone.rb