kitchen-vcenter 1.0.0 → 1.1.0

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: 3d3bbb3c6bad4d1c38ef1fc4049a0363083e1bd7
4
- data.tar.gz: e6e3e44a085fdb28159d4562130b73a860948e42
3
+ metadata.gz: 4ad83365e404c24b62793647a264cc753dcd8c39
4
+ data.tar.gz: 39add38626871f3a8720cd2bff7c28cdb904d56a
5
5
  SHA512:
6
- metadata.gz: 8b96a21adbe30109d9991564f81eded1b0c647366df9631145c678aec30c73d5dd64c45428b4d715845c77ea07184f3b76d83c8cf3185812eb8a0b0e7b116830
7
- data.tar.gz: 705e798243b0763f288a7d6938a5b3e1ca9461500c97ccc21c836d48f4ea99d30fe4d3b9fb21eb9aacf02abf699b0e29c3b58995e7c5dd94dd689ede96976b1d
6
+ metadata.gz: 9acb72a51bae96c57eff8b8b7074b132b22b3c07c28c1ad781d20e60a1ee2db173c3df65b420b290db929f54cc4b0e07e04dc5ef75a8a78f3d4ef0ff3c39c13b
7
+ data.tar.gz: 0c1b2ab4a0426c987047ab6843aa4f852604ecb2c068c4533b4d1c302dbaa509a4fad1875baa6376bfc69d7f9f4f4cf18832c53e225f066178e97b20916ba27d
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Change Log
2
2
 
3
- ## [1.0.0](https://github.com/chef/kitchen-vcenter/tree/1.0.0) (2017-08-10)
3
+ ## [1.1.0](https://github.com/chef/kitchen-vcenter/tree/1.1.0) (2017-09-07)
4
+ [Full Changelog](https://github.com/chef/kitchen-vcenter/compare/v1.0.0...1.1.0)
5
+
6
+ **Closed issues:**
7
+
8
+ - Resource pool is not specified when creating a new machine [\#7](https://github.com/chef/kitchen-vcenter/issues/7)
9
+ - Unhelpful messages from driver if specified item does not exist [\#6](https://github.com/chef/kitchen-vcenter/issues/6)
10
+
11
+ **Merged pull requests:**
12
+
13
+ - Updated to handle resource\_pools [\#8](https://github.com/chef/kitchen-vcenter/pull/8) ([russellseymour](https://github.com/russellseymour))
14
+
15
+ ## [v1.0.0](https://github.com/chef/kitchen-vcenter/tree/v1.0.0) (2017-08-28)
4
16
  **Merged pull requests:**
5
17
 
6
18
  - 1.0.0 release [\#4](https://github.com/chef/kitchen-vcenter/pull/4) ([jjasghar](https://github.com/jjasghar))
data/README.md CHANGED
@@ -50,6 +50,7 @@ driver:
50
50
  driver_config:
51
51
  targethost: 172.16.20.41
52
52
  datacenter: "Datacenter"
53
+ resource_pool: "testkitchen"
53
54
 
54
55
  platforms:
55
56
  - name: ubuntu-1604
@@ -75,6 +76,7 @@ The following parameters should be set in the `driver_config` for the individual
75
76
  - `targethost` - Host on which the new virtual machine should be created
76
77
  - `template` - Template or virtual machine to use when cloning the new machine
77
78
  - `datacenter` - Name of the datacenter to use to deploy into
79
+ - `resource_pool` - Name of the resource pool to use when creating the machine. The resource pool _must_ already exist
78
80
 
79
81
  ### Optional Parameters
80
82
 
@@ -18,5 +18,5 @@
18
18
  #
19
19
 
20
20
  module KitchenVcenter
21
- VERSION = '1.0.0'.freeze
21
+ VERSION = '1.1.0'.freeze
22
22
  end
@@ -47,6 +47,7 @@ module Kitchen
47
47
  default_config :vcenter_disable_ssl_verify, false
48
48
  default_config :poweron, true
49
49
  default_config :vm_name, nil
50
+ default_config :resource_pool, nil
50
51
 
51
52
  def create(state)
52
53
  # If the vm_name has not been set then set it now based on the suite, platform and a random number
@@ -54,16 +55,24 @@ module Kitchen
54
55
  config[:vm_name] = format('%s-%s-%s', instance.suite.name, instance.platform.name, SecureRandom.hex(4))
55
56
  end
56
57
 
58
+ raise "Please set the resource pool name using `resource_pool` parameter in the 'drive_config' section of your .kitchen.yml file" if config[:resource_pool].nil?
59
+
57
60
  connect
58
61
 
59
62
  # Using the clone class, create a machine for TK
60
63
  # Find the identifier for the targethost to pass to rbvmomi
61
64
  config[:targethost] = get_host(config[:targethost])
62
65
 
66
+ # Find the resource pool
67
+ config[:resource_pool] = get_resource_pool(config[:resource_pool])
68
+
69
+ # Check that the datacenter exists
70
+ datacenter_exists?(config[:datacenter])
71
+
63
72
  # Same thing needs to happen with the folder name if it has been set
64
73
  config[:folder] = {
65
74
  name: config[:folder],
66
- id: get_folder(config[:folder])
75
+ id: get_folder(config[:folder]),
67
76
  } unless config[:folder].nil?
68
77
 
69
78
  # Create a hash of options that the clone requires
@@ -73,7 +82,8 @@ module Kitchen
73
82
  poweron: config[:poweron],
74
83
  template: config[:template],
75
84
  datacenter: config[:datacenter],
76
- folder: config[:folder]
85
+ folder: config[:folder],
86
+ resource_pool: config[:resource_pool],
77
87
  }
78
88
 
79
89
  # Create an object from which the clone operation can be called
@@ -90,7 +100,7 @@ module Kitchen
90
100
  vm_obj = Com::Vmware::Vcenter::VM.new(vapi_config)
91
101
 
92
102
  # shut the machine down if it is running
93
- if vm.power_state.value == "POWERED_ON"
103
+ if vm.power_state.value == 'POWERED_ON'
94
104
  power = Com::Vmware::Vcenter::Vm::Power.new(vapi_config)
95
105
  power.stop(vm.vm)
96
106
  end
@@ -102,36 +112,59 @@ module Kitchen
102
112
  private
103
113
 
104
114
  def validate_state(state = {})
105
-
106
115
  end
107
116
 
108
117
  def existing_state_value?(state, property)
109
118
  state.key?(property) && !state[property].nil?
110
119
  end
111
120
 
121
+ def datacenter_exists?(name)
122
+ filter = Com::Vmware::Vcenter::Datacenter::FilterSpec.new(names: Set.new([name]))
123
+ dc_obj = Com::Vmware::Vcenter::Datacenter.new(vapi_config)
124
+ dc = dc_obj.list(filter)
125
+
126
+ raise format('Unable to find data center: %s', name) if dc.empty?
127
+ end
128
+
112
129
  def get_host(name)
113
- filter = Com::Vmware::Vcenter::Host::FilterSpec.new({names: Set.new([name])})
130
+ filter = Com::Vmware::Vcenter::Host::FilterSpec.new(names: Set.new([name]))
114
131
  host_obj = Com::Vmware::Vcenter::Host.new(vapi_config)
115
- host = host_obj.list
132
+ host = host_obj.list(filter)
133
+
134
+ raise format('Unable to find target host: %s', name) if host.empty?
135
+
116
136
  host[0].host
117
137
  end
118
138
 
119
139
  def get_folder(name)
120
140
  # Create a filter to ensure that only the named folder is returned
121
- filter = Com::Vmware::Vcenter::Folder::FilterSpec.new({names: Set.new([name])})
141
+ filter = Com::Vmware::Vcenter::Folder::FilterSpec.new(names: Set.new([name]))
122
142
  # filter.names = name
123
143
  folder_obj = Com::Vmware::Vcenter::Folder.new(vapi_config)
124
144
  folder = folder_obj.list(filter)
125
145
 
146
+ raise format('Unable to find folder: %s', name) if folder.empty?
147
+
126
148
  folder[0].folder
127
149
  end
128
150
 
129
151
  def get_vm(name)
130
- filter = Com::Vmware::Vcenter::VM::FilterSpec.new({names: Set.new([name])})
152
+ filter = Com::Vmware::Vcenter::VM::FilterSpec.new(names: Set.new([name]))
131
153
  vm_obj = Com::Vmware::Vcenter::VM.new(vapi_config)
132
154
  vm_obj.list(filter)[0]
133
155
  end
134
156
 
157
+ def get_resource_pool(name)
158
+ # Create a filter to ensure that only the specified resource pool is returned, if it exists
159
+ filter = Com::Vmware::Vcenter::ResourcePool::FilterSpec.new(names: Set.new([name]))
160
+ rp_obj = Com::Vmware::Vcenter::ResourcePool.new(vapi_config)
161
+ resource_pool = rp_obj.list(filter)
162
+
163
+ raise format('Unable to find Resource Pool: %s', name) if resource_pool.empty?
164
+
165
+ resource_pool[0].resource_pool
166
+ end
167
+
135
168
  def connect
136
169
  # Configure the connection to vCenter
137
170
  lookup_service_helper = LookupServiceHelper.new(config[:vcenter_host])
@@ -12,35 +12,33 @@ class Support
12
12
  end
13
13
 
14
14
  def clone
15
-
16
15
  # set the datacenter name
17
16
  dc = vim.serviceInstance.find_datacenter(options[:datacenter])
18
17
  src_vm = dc.find_vm(options[:template])
19
- hosts = dc.hostFolder.children
20
18
 
21
19
  # Specify where the machine is going to be created
22
20
  relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec
23
21
  relocate_spec.host = options[:targethost]
24
- relocate_spec.pool = hosts.first.resourcePool
22
+ relocate_spec.pool = options[:resource_pool]
25
23
 
26
24
  clone_spec = RbVmomi::VIM.VirtualMachineCloneSpec(location: relocate_spec,
27
- powerOn: options[:poweron],
28
- template: false)
25
+ powerOn: options[:poweron],
26
+ template: false)
29
27
 
30
28
  # Set the folder to use
31
29
  dest_folder = options[:folder].nil? ? src_vm.parent : options[:folder][:id]
32
30
 
33
- puts "Cloning the template #{options[:template]} to create the VM..."
31
+ puts "Cloning the template '#{options[:template]}' to create the VM..."
34
32
  task = src_vm.CloneVM_Task(folder: dest_folder, name: options[:name], spec: clone_spec)
35
33
  task.wait_for_completion
36
34
 
37
35
  # get the IP address of the machine for bootstrapping
38
36
  # machine name is based on the path, e.g. that includes the folder
39
- name = options[:folder].nil? ? options[:name] : format("%s/%s", options[:folder][:name], options[:name])
37
+ name = options[:folder].nil? ? options[:name] : format('%s/%s', options[:folder][:name], options[:name])
40
38
  new_vm = dc.find_vm(name)
41
39
 
42
40
  if new_vm.nil?
43
- puts format("Unable to find machine: %s", name)
41
+ puts format('Unable to find machine: %s', name)
44
42
  else
45
43
  puts 'Waiting for network interfaces to become available...'
46
44
  sleep 2 while new_vm.guest.net.empty? || !new_vm.guest.ipAddress
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-vcenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Russell Seymour
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-28 00:00:00.000000000 Z
11
+ date: 2017-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen