vm_shepherd 0.6.3 → 0.7.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: c32e4b781fbc1fd08d232424b3002b6579c827ef
4
- data.tar.gz: 107604b57e2182962e74f5472703f51873fa97cd
3
+ metadata.gz: 44b185c8635a7ee3bffac7c3a36faa3ab6e0fe50
4
+ data.tar.gz: 9164bb10195596eabd453c1d136f11a56450ee1c
5
5
  SHA512:
6
- metadata.gz: 8b160eb6932e0ca213df7c9ec318959c11c3cce437afdb1cc6e3788fd7ec3e06e4ec055c1957314b4a318c8ee2cd39693d28ca74a3792e10e66b3644edd95d4f
7
- data.tar.gz: 093a1d5dc7d79669a434a9d023466903b1801d95f062ee0771e81fce9c4a6f1b4560c4d9611eb6b1545601dc1f9e594b9c8c222148dc1ce65b6551448399ea1a
6
+ metadata.gz: 107bf1e783e05dc640d0fce0469bd7df0b26fc9f40cb828f944be46aafd4e5e7d67d86391d40980e28ebea1a8866e9ce9237bc651778ec30ba6005124d6bf671
7
+ data.tar.gz: d1bd3e71af415e4262c817687f929bda22f38696d637bea25d513452f119cdef660542fecc29f4a4a95894c2187aa5b09ebfd70263e46b1dca77bf58232856ac
@@ -73,7 +73,7 @@ module VmShepherd
73
73
  settings.vm_shepherd.vcenter_creds.username,
74
74
  settings.vm_shepherd.vcenter_creds.password,
75
75
  settings.vm_shepherd.vsphere.datacenter,
76
- ).destroy(settings.vm_shepherd.vm.ip)
76
+ ).destroy(settings.vm_shepherd.vm.ip, settings.vm_shepherd.vsphere.resource_pool)
77
77
  when VmShepherd::AWS_IAAS_TYPE then
78
78
  ami_manager.destroy
79
79
  when VmShepherd::OPENSTACK_IAAS_TYPE then
@@ -1,3 +1,3 @@
1
1
  module VmShepherd
2
- VERSION = '0.6.3'.freeze
2
+ VERSION = '0.7.0'.freeze
3
3
  end
@@ -56,11 +56,13 @@ module VmShepherd
56
56
  end
57
57
  end
58
58
 
59
- def destroy(ip_address)
60
- vm = datacenter.vmFolder.findByIp(ip_address)
61
- return unless vm
62
- power_off_vm(vm)
63
- destroy_vm(vm)
59
+ def destroy(ip_address, resource_pool_name)
60
+ vms = connection.serviceContent.searchIndex.FindAllByIp(ip: ip_address, vmSearch: true).
61
+ select { |vm| vm.resourcePool.name == resource_pool_name }
62
+ vms.each do |vm|
63
+ power_off_vm(vm)
64
+ destroy_vm(vm)
65
+ end
64
66
  end
65
67
 
66
68
  def destroy_vm(vm)
@@ -194,7 +194,7 @@ module VmShepherd
194
194
  settings.vm_shepherd.vcenter_creds.password,
195
195
  settings.vm_shepherd.vsphere.datacenter,
196
196
  ).and_return(ova_manager)
197
- expect(ova_manager).to receive(:destroy).with(settings.vm_shepherd.vm.ip)
197
+ expect(ova_manager).to receive(:destroy).with(settings.vm_shepherd.vm.ip, settings.vm_shepherd.vsphere.resource_pool)
198
198
 
199
199
  manager.destroy
200
200
  end
@@ -6,7 +6,10 @@ module VmShepherd
6
6
  let(:username) { 'FAKE_USERNAME' }
7
7
  let(:password) { 'FAKE_PASSWORD' }
8
8
  let(:datacenter_name) { 'FAKE_DATACENTER_NAME' }
9
- let(:vm) { instance_double(RbVmomi::VIM::VirtualMachine, name: 'vm_name') }
9
+ let(:vm1) { instance_double(RbVmomi::VIM::VirtualMachine, name: 'vm_name1', resourcePool: instance_double(RbVmomi::VIM::ResourcePool, name: 'first_resource_pool')) }
10
+ let(:vm2) { instance_double(RbVmomi::VIM::VirtualMachine, name: 'vm_name2', resourcePool: instance_double(RbVmomi::VIM::ResourcePool, name: 'second_resource_pool')) }
11
+ let(:vm3) { instance_double(RbVmomi::VIM::VirtualMachine, name: 'vm_name3', resourcePool: instance_double(RbVmomi::VIM::ResourcePool, name: 'second_resource_pool')) }
12
+ let(:vms) { [vm1, vm2, vm3] }
10
13
 
11
14
  subject(:vsphere_manager) do
12
15
  manager = VsphereManager.new(host, username, password, datacenter_name)
@@ -19,32 +22,43 @@ module VmShepherd
19
22
  end
20
23
 
21
24
  describe 'destroy' do
22
- let(:datacenter) { instance_double(RbVmomi::VIM::Datacenter, vmFolder: vm_folder) }
23
- let(:vm_folder) { instance_double(RbVmomi::VIM::Folder) }
25
+ let(:search_index) { instance_double(RbVmomi::VIM::SearchIndex) }
26
+ let(:service_content) { instance_double(RbVmomi::VIM::ServiceContent, searchIndex: search_index)}
27
+ let(:connection) { instance_double(RbVmomi::VIM, serviceContent: service_content)}
24
28
  let(:ip_address) { '127.0.0.1' }
25
29
 
26
30
  before do
27
- allow(vsphere_manager).to receive(:datacenter).and_return(datacenter)
28
- allow(vm_folder).to receive(:findByIp).with(ip_address).and_return(vm)
31
+ allow(vsphere_manager).to receive(:connection).and_return(connection)
32
+ allow(search_index).to receive(:FindAllByIp).with(ip: ip_address, vmSearch: true).and_return(vms)
29
33
  end
30
34
 
31
- it 'destroys the VM that matches the given ip address' do
32
- expect(vsphere_manager).to receive(:power_off_vm).with(vm)
33
- expect(vsphere_manager).to receive(:destroy_vm).with(vm)
35
+ it 'destroys the VM that matches the given ip address and resource pool' do
36
+ expect(vsphere_manager).to receive(:power_off_vm).with(vm2)
37
+ expect(vsphere_manager).to receive(:destroy_vm).with(vm2)
34
38
 
35
- vsphere_manager.destroy(ip_address)
39
+ expect(vsphere_manager).to receive(:power_off_vm).with(vm3)
40
+ expect(vsphere_manager).to receive(:destroy_vm).with(vm3)
41
+
42
+ vsphere_manager.destroy(ip_address, 'second_resource_pool')
36
43
  end
37
44
 
38
- context 'when the vm does not exist' do
39
- before do
40
- allow(vm_folder).to receive(:findByIp).and_return(nil)
45
+ context 'when there are no vms with that IP address' do
46
+ let(:vms) { [] }
47
+
48
+ it 'does not explode' do
49
+ expect(vsphere_manager).not_to receive(:power_off_vm)
50
+ expect(vsphere_manager).not_to receive(:destroy_vm)
51
+
52
+ vsphere_manager.destroy(ip_address, 'second_resource_pool')
41
53
  end
54
+ end
42
55
 
56
+ context 'when there are no vms in that resource pool' do
43
57
  it 'does not explode' do
44
58
  expect(vsphere_manager).not_to receive(:power_off_vm)
45
59
  expect(vsphere_manager).not_to receive(:destroy_vm)
46
60
 
47
- vsphere_manager.destroy(ip_address)
61
+ vsphere_manager.destroy(ip_address, 'other_resource_pool')
48
62
  end
49
63
  end
50
64
  end
@@ -53,13 +67,13 @@ module VmShepherd
53
67
  let(:destroy_task) { instance_double(RbVmomi::VIM::Task) }
54
68
 
55
69
  before do
56
- allow(vm).to receive(:Destroy_Task).and_return(destroy_task)
70
+ allow(vm1).to receive(:Destroy_Task).and_return(destroy_task)
57
71
  end
58
72
 
59
73
  it 'runs the Destroy_Task and waits for completion' do
60
74
  expect(destroy_task).to receive(:wait_for_completion)
61
75
 
62
- vsphere_manager.destroy_vm(vm)
76
+ vsphere_manager.destroy_vm(vm1)
63
77
  end
64
78
  end
65
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vm_shepherd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ops Manager Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2015-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-v1