vm_shepherd 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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