vm_shepherd 0.8.0 → 1.0.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: e61d2d0bffe4fd5fbe2ef132b05a0b334ce8a8be
4
- data.tar.gz: c0b639a5ba9e19ccb2950da552e9c5f3185d0f56
3
+ metadata.gz: a0fc9f0b7a52ae491f167a0102a7a04f6b49f8ce
4
+ data.tar.gz: 7c602729eb8a957c869b4d995f1d072070497fef
5
5
  SHA512:
6
- metadata.gz: 1f529936e8fa331185f96d0e9f68cd69bfdde4bb7e2d2f7a425522333a944e4ba2e50502d5a0c4bf3e8c43534428e35459a60af22535e2870a939ddfb7d09b77
7
- data.tar.gz: d12b06f004e913fa49fcfd47cdd78f105f2956cc6da979294fd1ce4d004b5d8d2be2457195c4fd6402e1102779bb2786d0de409ab595d3f4b16e9c74b97fb18d
6
+ metadata.gz: ae2def494be27f83ab4528e3cce896fa9fd10ea6df91dd3060d36523e62bb43331915b1e3e2bed3873e5a46c6af223617f86d97302c5caf7329d66b66f7758f1
7
+ data.tar.gz: cb19597cef1a5cfb96fb565eaf3d461eca74bf2ccdbaab8745a39b39aa3a330d9feee288353e936ffad3311fa8278547f51eca46689136ebf39606f94d45ba78
@@ -7,112 +7,121 @@ module VmShepherd
7
7
  end
8
8
 
9
9
  def deploy(path:)
10
- case settings.iaas_type
11
- when VmShepherd::VCLOUD_IAAS_TYPE then
12
- VmShepherd::VcloudManager.new(
13
- {
14
- url: settings.vm_shepherd.creds.url,
15
- organization: settings.vm_shepherd.creds.organization,
16
- user: settings.vm_shepherd.creds.user,
17
- password: settings.vm_shepherd.creds.password,
18
- },
19
- settings.vm_shepherd.vdc.name,
20
- error_logger
21
- ).deploy(
22
- path,
23
- vcloud_deploy_options,
24
- )
25
- when VmShepherd::VSPHERE_IAAS_TYPE then
26
- VmShepherd::VsphereManager.new(
27
- settings.vm_shepherd.vcenter_creds.ip,
28
- settings.vm_shepherd.vcenter_creds.username,
29
- settings.vm_shepherd.vcenter_creds.password,
30
- settings.vm_shepherd.vsphere.datacenter,
31
- ).deploy(
32
- path,
33
- {
34
- ip: settings.vm_shepherd.vm.ip,
35
- gateway: settings.vm_shepherd.vm.gateway,
36
- netmask: settings.vm_shepherd.vm.netmask,
37
- dns: settings.vm_shepherd.vm.dns,
38
- ntp_servers: settings.vm_shepherd.vm.ntp_servers,
39
- },
40
- {
41
- cluster: settings.vm_shepherd.vsphere.cluster,
42
- resource_pool: settings.vm_shepherd.vsphere.resource_pool,
43
- datastore: settings.vm_shepherd.vsphere.datastore,
44
- network: settings.vm_shepherd.vsphere.network,
45
- folder: settings.vm_shepherd.vsphere.folder,
46
- }
47
- )
48
- when VmShepherd::AWS_IAAS_TYPE then
49
- ami_manager.deploy(path)
50
- when VmShepherd::OPENSTACK_IAAS_TYPE then
51
- openstack_vm_manager.deploy(path, openstack_vm_options)
52
- else
53
- fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
10
+ unless valid_iaas_types.include?(settings.iaas_type)
11
+ fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
12
+ end
13
+ vm_shepherd_configs(settings).each do |vm_shepherd_config|
14
+ case settings.iaas_type
15
+ when VmShepherd::VCLOUD_IAAS_TYPE then
16
+ VmShepherd::VcloudManager.new(
17
+ {
18
+ url: vm_shepherd_config.creds.url,
19
+ organization: vm_shepherd_config.creds.organization,
20
+ user: vm_shepherd_config.creds.user,
21
+ password: vm_shepherd_config.creds.password,
22
+ },
23
+ vm_shepherd_config.vdc.name,
24
+ error_logger
25
+ ).deploy(
26
+ path,
27
+ vcloud_deploy_options(vm_shepherd_config),
28
+ )
29
+ when VmShepherd::VSPHERE_IAAS_TYPE then
30
+ VmShepherd::VsphereManager.new(
31
+ vm_shepherd_config.vcenter_creds.ip,
32
+ vm_shepherd_config.vcenter_creds.username,
33
+ vm_shepherd_config.vcenter_creds.password,
34
+ vm_shepherd_config.vsphere.datacenter,
35
+ ).deploy(
36
+ path,
37
+ {
38
+ ip: vm_shepherd_config.vm.ip,
39
+ gateway: vm_shepherd_config.vm.gateway,
40
+ netmask: vm_shepherd_config.vm.netmask,
41
+ dns: vm_shepherd_config.vm.dns,
42
+ ntp_servers: vm_shepherd_config.vm.ntp_servers,
43
+ },
44
+ {
45
+ cluster: vm_shepherd_config.vsphere.cluster,
46
+ resource_pool: vm_shepherd_config.vsphere.resource_pool,
47
+ datastore: vm_shepherd_config.vsphere.datastore,
48
+ network: vm_shepherd_config.vsphere.network,
49
+ folder: vm_shepherd_config.vsphere.folder,
50
+ }
51
+ )
52
+ when VmShepherd::AWS_IAAS_TYPE then
53
+ ami_manager(vm_shepherd_config).deploy(path)
54
+ when VmShepherd::OPENSTACK_IAAS_TYPE then
55
+ openstack_vm_manager(vm_shepherd_config).deploy(path, openstack_vm_options(vm_shepherd_config))
56
+ end
54
57
  end
55
58
  end
56
59
 
57
60
  def destroy
58
- case settings.iaas_type
59
- when VmShepherd::VCLOUD_IAAS_TYPE then
60
- VmShepherd::VcloudManager.new(
61
- {
62
- url: settings.vm_shepherd.creds.url,
63
- organization: settings.vm_shepherd.creds.organization,
64
- user: settings.vm_shepherd.creds.user,
65
- password: settings.vm_shepherd.creds.password,
66
- },
67
- settings.vm_shepherd.vdc.name,
68
- error_logger
69
- ).destroy([settings.vm_shepherd.vapp.ops_manager_name], settings.vm_shepherd.vdc.catalog)
70
- when VmShepherd::VSPHERE_IAAS_TYPE then
71
- VmShepherd::VsphereManager.new(
72
- settings.vm_shepherd.vcenter_creds.ip,
73
- settings.vm_shepherd.vcenter_creds.username,
74
- settings.vm_shepherd.vcenter_creds.password,
75
- settings.vm_shepherd.vsphere.datacenter,
76
- ).destroy(settings.vm_shepherd.vm.ip, settings.vm_shepherd.vsphere.resource_pool)
77
- when VmShepherd::AWS_IAAS_TYPE then
78
- ami_manager.destroy
79
- when VmShepherd::OPENSTACK_IAAS_TYPE then
80
- openstack_vm_manager.destroy(openstack_vm_options)
81
- else
82
- fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
61
+ unless valid_iaas_types.include?(settings.iaas_type)
62
+ fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
63
+ end
64
+ vm_shepherd_configs(settings).each do |vm_shepherd_config|
65
+ case settings.iaas_type
66
+ when VmShepherd::VCLOUD_IAAS_TYPE then
67
+ VmShepherd::VcloudManager.new(
68
+ {
69
+ url: vm_shepherd_config.creds.url,
70
+ organization: vm_shepherd_config.creds.organization,
71
+ user: vm_shepherd_config.creds.user,
72
+ password: vm_shepherd_config.creds.password,
73
+ },
74
+ vm_shepherd_config.vdc.name,
75
+ error_logger
76
+ ).destroy([vm_shepherd_config.vapp.ops_manager_name], vm_shepherd_config.vdc.catalog)
77
+ when VmShepherd::VSPHERE_IAAS_TYPE then
78
+ VmShepherd::VsphereManager.new(
79
+ vm_shepherd_config.vcenter_creds.ip,
80
+ vm_shepherd_config.vcenter_creds.username,
81
+ vm_shepherd_config.vcenter_creds.password,
82
+ vm_shepherd_config.vsphere.datacenter,
83
+ ).destroy(vm_shepherd_config.vm.ip, vm_shepherd_config.vsphere.resource_pool)
84
+ when VmShepherd::AWS_IAAS_TYPE then
85
+ ami_manager(vm_shepherd_config).destroy
86
+ when VmShepherd::OPENSTACK_IAAS_TYPE then
87
+ openstack_vm_manager(vm_shepherd_config).destroy(openstack_vm_options(vm_shepherd_config))
88
+ end
83
89
  end
84
90
  end
85
91
 
86
92
  def clean_environment
87
- case settings.iaas_type
88
- when VmShepherd::VCLOUD_IAAS_TYPE then
89
- VmShepherd::VcloudManager.new(
90
- {
91
- url: settings.vm_shepherd.creds.url,
92
- organization: settings.vm_shepherd.creds.organization,
93
- user: settings.vm_shepherd.creds.user,
94
- password: settings.vm_shepherd.creds.password,
95
- },
96
- settings.vm_shepherd.vdc.name,
97
- error_logger,
98
- ).clean_environment(settings.vm_shepherd.vapp.product_names, settings.vm_shepherd.vapp.product_catalog)
99
- when VmShepherd::VSPHERE_IAAS_TYPE then
100
- VmShepherd::VsphereManager.new(
101
- settings.vm_shepherd.vcenter_creds.ip,
102
- settings.vm_shepherd.vcenter_creds.username,
103
- settings.vm_shepherd.vcenter_creds.password,
104
- settings.vm_shepherd.cleanup.datacenter,
105
- ).clean_environment(
106
- datacenter_folders_to_clean: settings.vm_shepherd.cleanup.datacenter_folders_to_clean,
107
- datastores: settings.vm_shepherd.cleanup.datastores,
108
- datastore_folders_to_clean: settings.vm_shepherd.cleanup.datastore_folders_to_clean,
109
- )
110
- when VmShepherd::AWS_IAAS_TYPE then
111
- ami_manager.clean_environment
112
- when VmShepherd::OPENSTACK_IAAS_TYPE then
113
- openstack_vm_manager.clean_environment
114
- else
115
- fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
93
+ unless valid_iaas_types.include?(settings.iaas_type)
94
+ fail(InvalidIaas, "Unknown IaaS type: #{settings.iaas_type.inspect}")
95
+ end
96
+ vm_shepherd_configs(settings).each do |vm_shepherd_config|
97
+ case settings.iaas_type
98
+ when VmShepherd::VCLOUD_IAAS_TYPE then
99
+ VmShepherd::VcloudManager.new(
100
+ {
101
+ url: vm_shepherd_config.creds.url,
102
+ organization: vm_shepherd_config.creds.organization,
103
+ user: vm_shepherd_config.creds.user,
104
+ password: vm_shepherd_config.creds.password,
105
+ },
106
+ vm_shepherd_config.vdc.name,
107
+ error_logger,
108
+ ).clean_environment(vm_shepherd_config.vapp.product_names, vm_shepherd_config.vapp.product_catalog)
109
+ when VmShepherd::VSPHERE_IAAS_TYPE then
110
+ VmShepherd::VsphereManager.new(
111
+ vm_shepherd_config.vcenter_creds.ip,
112
+ vm_shepherd_config.vcenter_creds.username,
113
+ vm_shepherd_config.vcenter_creds.password,
114
+ vm_shepherd_config.cleanup.datacenter,
115
+ ).clean_environment(
116
+ datacenter_folders_to_clean: vm_shepherd_config.cleanup.datacenter_folders_to_clean,
117
+ datastores: vm_shepherd_config.cleanup.datastores,
118
+ datastore_folders_to_clean: vm_shepherd_config.cleanup.datastore_folders_to_clean,
119
+ )
120
+ when VmShepherd::AWS_IAAS_TYPE then
121
+ ami_manager(vm_shepherd_config).clean_environment
122
+ when VmShepherd::OPENSTACK_IAAS_TYPE then
123
+ openstack_vm_manager(vm_shepherd_config).clean_environment
124
+ end
116
125
  end
117
126
  end
118
127
 
@@ -126,8 +135,8 @@ module VmShepherd
126
135
  end
127
136
  end
128
137
 
129
- def vcloud_deploy_options
130
- vm = settings.vm_shepherd.vapp
138
+ def vcloud_deploy_options(vm_shepherd_config)
139
+ vm = vm_shepherd_config.vapp
131
140
  {
132
141
  name: vm.ops_manager_name,
133
142
  ip: vm.ip,
@@ -135,44 +144,56 @@ module VmShepherd
135
144
  netmask: vm.netmask,
136
145
  dns: vm.dns,
137
146
  ntp: vm.ntp,
138
- catalog: settings.vm_shepherd.vdc.catalog,
139
- network: settings.vm_shepherd.vdc.network,
147
+ catalog: vm_shepherd_config.vdc.catalog,
148
+ network: vm_shepherd_config.vdc.network,
140
149
  }
141
150
  end
142
151
 
143
- def ami_manager
144
- vm_shepherd = settings.vm_shepherd
152
+ def ami_manager(vm_shepherd_config)
145
153
  VmShepherd::AwsManager.new(
146
- aws_access_key: vm_shepherd.aws_access_key,
147
- aws_secret_key: vm_shepherd.aws_secret_key,
148
- ssh_key_name: vm_shepherd.ssh_key_name,
149
- security_group_id: vm_shepherd.security_group,
150
- public_subnet_id: vm_shepherd.public_subnet_id,
151
- private_subnet_id: vm_shepherd.private_subnet_id,
152
- elastic_ip_id: vm_shepherd.elastic_ip_id,
153
- vm_name: vm_shepherd.vm_name,
154
+ aws_access_key: vm_shepherd_config.aws_access_key,
155
+ aws_secret_key: vm_shepherd_config.aws_secret_key,
156
+ ssh_key_name: vm_shepherd_config.ssh_key_name,
157
+ security_group_id: vm_shepherd_config.security_group,
158
+ public_subnet_id: vm_shepherd_config.public_subnet_id,
159
+ private_subnet_id: vm_shepherd_config.private_subnet_id,
160
+ elastic_ip_id: vm_shepherd_config.elastic_ip_id,
161
+ vm_name: vm_shepherd_config.vm_name,
154
162
  )
155
163
  end
156
164
 
157
- def openstack_vm_manager
165
+ def openstack_vm_manager(vm_shepherd_config)
158
166
  OpenstackManager.new(
159
- auth_url: settings.vm_shepherd.creds.auth_url,
160
- username: settings.vm_shepherd.creds.username,
161
- api_key: settings.vm_shepherd.creds.api_key,
162
- tenant: settings.vm_shepherd.creds.tenant,
167
+ auth_url: vm_shepherd_config.creds.auth_url,
168
+ username: vm_shepherd_config.creds.username,
169
+ api_key: vm_shepherd_config.creds.api_key,
170
+ tenant: vm_shepherd_config.creds.tenant,
163
171
  )
164
172
  end
165
173
 
166
- def openstack_vm_options
174
+ def openstack_vm_options(vm_shepherd_config)
167
175
  {
168
- name: settings.vm_shepherd.vm.name,
169
- min_disk_size: settings.vm_shepherd.vm.flavor_parameters.min_disk_size,
170
- network_name: settings.vm_shepherd.vm.network_name,
171
- key_name: settings.vm_shepherd.vm.key_name,
172
- security_group_names: settings.vm_shepherd.vm.security_group_names,
173
- public_ip: settings.vm_shepherd.vm.public_ip,
174
- private_ip: settings.vm_shepherd.vm.private_ip,
176
+ name: vm_shepherd_config.vm.name,
177
+ min_disk_size: vm_shepherd_config.vm.flavor_parameters.min_disk_size,
178
+ network_name: vm_shepherd_config.vm.network_name,
179
+ key_name: vm_shepherd_config.vm.key_name,
180
+ security_group_names: vm_shepherd_config.vm.security_group_names,
181
+ public_ip: vm_shepherd_config.vm.public_ip,
182
+ private_ip: vm_shepherd_config.vm.private_ip,
175
183
  }
176
184
  end
185
+
186
+ def vm_shepherd_configs(settings)
187
+ settings.vm_shepherd_configs || []
188
+ end
189
+
190
+ def valid_iaas_types
191
+ [
192
+ VmShepherd::VCLOUD_IAAS_TYPE,
193
+ VmShepherd::VSPHERE_IAAS_TYPE,
194
+ VmShepherd::AWS_IAAS_TYPE,
195
+ VmShepherd::OPENSTACK_IAAS_TYPE
196
+ ]
197
+ end
177
198
  end
178
199
  end
@@ -1,3 +1,3 @@
1
1
  module VmShepherd
2
- VERSION = '0.8.0'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  iaas_type: aws
2
2
 
3
- vm_shepherd:
4
- aws_access_key: aws-access-key
3
+ vm_shepherd_configs:
4
+ - aws_access_key: aws-access-key
5
5
  aws_secret_key: aws-secret-key
6
6
  ssh_key_name: ssh-key-name
7
7
  security_group: security-group-id
@@ -9,3 +9,11 @@ vm_shepherd:
9
9
  private_subnet_id: private-subnet-id
10
10
  elastic_ip_id: elastic-ip-id
11
11
  vm_name: vm-name
12
+ - aws_access_key: aws-access-key-2
13
+ aws_secret_key: aws-secret-key-2
14
+ ssh_key_name: ssh-key-name-2
15
+ security_group: security-group-id-2
16
+ public_subnet_id: public-subnet-id-2
17
+ private_subnet_id: private-subnet-id-2
18
+ elastic_ip_id: elastic-ip-id-2
19
+ vm_name: vm-name-2
@@ -1,6 +1,6 @@
1
1
  iaas_type: openstack
2
- vm_shepherd:
3
- creds:
2
+ vm_shepherd_configs:
3
+ - creds:
4
4
  auth_url: 'http://example.com/version/tokens'
5
5
  username: 'username'
6
6
  api_key: 'api-key'
@@ -17,3 +17,20 @@ vm_shepherd:
17
17
  - 'security-group-C'
18
18
  public_ip: 198.11.195.5
19
19
  private_ip: 192.168.100.100
20
+ - creds:
21
+ auth_url: 'http://example.com/version/tokens-2'
22
+ username: 'username-2'
23
+ api_key: 'api-key-2'
24
+ tenant: 'tenant-2'
25
+ vm:
26
+ name: 'some-vm-name-2'
27
+ flavor_parameters:
28
+ min_disk_size: 152
29
+ network_name: 'some-network-2'
30
+ key_name: 'some-key-2'
31
+ security_group_names:
32
+ - 'security-group-A-2'
33
+ - 'security-group-B-2'
34
+ - 'security-group-C-2'
35
+ public_ip: 198.11.195.5-2
36
+ private_ip: 192.168.100.100-2
@@ -1,6 +1,6 @@
1
1
  iaas_type: vcloud
2
- vm_shepherd:
3
- creds:
2
+ vm_shepherd_configs:
3
+ - creds:
4
4
  url: VAPP_URL
5
5
  organization: VAPP_ORGANIZATION
6
6
  user: VAPP_USERNAME
@@ -21,3 +21,24 @@ vm_shepherd:
21
21
  netmask: VAPP_NETMASK
22
22
  dns: VAPP_DNS
23
23
  ntp: VAPP_NTP
24
+ - creds:
25
+ url: VAPP_URL-2
26
+ organization: VAPP_ORGANIZATION-2
27
+ user: VAPP_USERNAME-2
28
+ password: VAPP_PASSWORD-2
29
+ vdc:
30
+ name: VDC_NAME-2
31
+ catalog: VDC_CATALOG-2
32
+ network: VDC_NETWORK-2
33
+ vapp:
34
+ ops_manager_name: VAPP_NAME-2
35
+ product_catalog: PRODUCT_CATALOG-2
36
+ product_names:
37
+ - PRODUCT_1-2
38
+ - PRODUCT_2-2
39
+ ip: VAPP_IP-2
40
+ public_ip:
41
+ gateway: VAPP_GATEWAY-2
42
+ netmask: VAPP_NETMASK-2
43
+ dns: VAPP_DNS-2
44
+ ntp: VAPP_NTP-2
@@ -1,11 +1,10 @@
1
1
  iaas_type: vsphere
2
- vm_shepherd:
3
- vcenter_creds:
2
+ vm_shepherd_configs:
3
+ - vcenter_creds:
4
4
  ip: OVA_URL
5
5
  username: OVA_ORGANIZATION
6
6
  password: OVA_PASSWORD
7
7
  vsphere:
8
- host:
9
8
  datacenter: VSPHERE_DATACENTER
10
9
  cluster: VSPHERE_CLUSTER
11
10
  network: VSPHERE_NETWORK
@@ -28,3 +27,30 @@ vm_shepherd:
28
27
  - DC_FOLDER_TWO
29
28
  datastore_folders_to_clean:
30
29
  - DS_DISK_FOLDER
30
+ - vcenter_creds:
31
+ ip: OVA_URL-2
32
+ username: OVA_ORGANIZATION-2
33
+ password: OVA_PASSWORD-2
34
+ vsphere:
35
+ datacenter: VSPHERE_DATACENTER-2
36
+ cluster: VSPHERE_CLUSTER-2
37
+ network: VSPHERE_NETWORK-2
38
+ resource_pool: VSPHERE_RESOURCE_POOL-2
39
+ datastore: VSPHERE_DATASTORE-2
40
+ folder: VSPHERE_FOLDER-2
41
+ vm:
42
+ ip: OVA_IP-2
43
+ gateway: OVA_GATEWAY-2
44
+ netmask: OVA_NETMASK-2
45
+ dns: OVA_DNS-2
46
+ ntp_servers: OVA_NTP-2
47
+ cleanup:
48
+ datacenter: VSPHERE_OTHER_DATACENTER-2
49
+ datastores:
50
+ - VSPHERE_DATASTORE_ONE-2
51
+ - VSPHERE_DATASTORE_TWO-2
52
+ datacenter_folders_to_clean:
53
+ - DC_FOLDER_ONE-2
54
+ - DC_FOLDER_TWO-2
55
+ datastore_folders_to_clean:
56
+ - DS_DISK_FOLDER-2
@@ -4,38 +4,68 @@ require 'recursive_open_struct'
4
4
  module VmShepherd
5
5
  RSpec.describe Shepherd do
6
6
  subject(:manager) { Shepherd.new(settings: settings) }
7
+ let(:first_config) { settings.vm_shepherd_configs.first }
8
+ let(:last_config) { settings.vm_shepherd_configs.last }
9
+ let(:settings) do
10
+ RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', settings_fixture_name)), recurse_over_arrays: true)
11
+ end
7
12
 
8
13
  describe '#deploy' do
9
14
  context 'with vcloud settings' do
10
- let(:settings) do
11
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vcloud.yml')))
12
- end
13
- let(:vcloud_manager) { instance_double(VcloudManager) }
15
+ let(:settings_fixture_name) { 'vcloud.yml' }
16
+ let(:first_vcloud_manager) { instance_double(VcloudManager) }
17
+ let(:last_vcloud_manager) { instance_double(VcloudManager) }
14
18
 
15
19
  it 'uses VcloudManager to launch a vm' do
16
20
  expect(VcloudManager).to receive(:new).
17
21
  with(
18
22
  {
19
- url: settings.vm_shepherd.creds.url,
20
- organization: settings.vm_shepherd.creds.organization,
21
- user: settings.vm_shepherd.creds.user,
22
- password: settings.vm_shepherd.creds.password,
23
+ url: first_config.creds.url,
24
+ organization: first_config.creds.organization,
25
+ user: first_config.creds.user,
26
+ password: first_config.creds.password,
27
+ },
28
+ first_config.vdc.name,
29
+ instance_of(Logger)
30
+ ).and_return(first_vcloud_manager)
31
+
32
+ expect(VcloudManager).to receive(:new).
33
+ with(
34
+ {
35
+ url: last_config.creds.url,
36
+ organization: last_config.creds.organization,
37
+ user: last_config.creds.user,
38
+ password: last_config.creds.password,
23
39
  },
24
- settings.vm_shepherd.vdc.name,
40
+ last_config.vdc.name,
25
41
  instance_of(Logger)
26
- ).and_return(vcloud_manager)
42
+ ).and_return(last_vcloud_manager)
27
43
 
28
- expect(vcloud_manager).to receive(:deploy).with(
44
+ expect(first_vcloud_manager).to receive(:deploy).with(
29
45
  'FAKE_PATH',
30
46
  {
31
- name: settings.vm_shepherd.vapp.ops_manager_name,
32
- ip: settings.vm_shepherd.vapp.ip,
33
- gateway: settings.vm_shepherd.vapp.gateway,
34
- netmask: settings.vm_shepherd.vapp.netmask,
35
- dns: settings.vm_shepherd.vapp.dns,
36
- ntp: settings.vm_shepherd.vapp.ntp,
37
- catalog: settings.vm_shepherd.vdc.catalog,
38
- network: settings.vm_shepherd.vdc.network,
47
+ name: first_config.vapp.ops_manager_name,
48
+ ip: first_config.vapp.ip,
49
+ gateway: first_config.vapp.gateway,
50
+ netmask: first_config.vapp.netmask,
51
+ dns: first_config.vapp.dns,
52
+ ntp: first_config.vapp.ntp,
53
+ catalog: first_config.vdc.catalog,
54
+ network: first_config.vdc.network,
55
+ }
56
+ )
57
+
58
+ expect(last_vcloud_manager).to receive(:deploy).with(
59
+ 'FAKE_PATH',
60
+ {
61
+ name: last_config.vapp.ops_manager_name,
62
+ ip: last_config.vapp.ip,
63
+ gateway: last_config.vapp.gateway,
64
+ netmask: last_config.vapp.netmask,
65
+ dns: last_config.vapp.dns,
66
+ ntp: last_config.vapp.ntp,
67
+ catalog: last_config.vdc.catalog,
68
+ network: last_config.vdc.network,
39
69
  }
40
70
  )
41
71
 
@@ -44,34 +74,59 @@ module VmShepherd
44
74
  end
45
75
 
46
76
  context 'with vsphere settings' do
47
- let(:settings) do
48
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vsphere.yml')))
49
- end
50
- let(:ova_manager) { instance_double(VsphereManager) }
77
+ let(:settings_fixture_name) { 'vsphere.yml' }
78
+ let(:first_ova_manager) { instance_double(VsphereManager) }
79
+ let(:last_ova_manager) { instance_double(VsphereManager) }
51
80
 
52
81
  it 'uses VsphereManager to launch a vm' do
53
82
  expect(VsphereManager).to receive(:new).with(
54
- settings.vm_shepherd.vcenter_creds.ip,
55
- settings.vm_shepherd.vcenter_creds.username,
56
- settings.vm_shepherd.vcenter_creds.password,
57
- settings.vm_shepherd.vsphere.datacenter,
58
- ).and_return(ova_manager)
83
+ first_config.vcenter_creds.ip,
84
+ first_config.vcenter_creds.username,
85
+ first_config.vcenter_creds.password,
86
+ first_config.vsphere.datacenter,
87
+ ).and_return(first_ova_manager)
88
+
89
+
90
+ expect(VsphereManager).to receive(:new).with(
91
+ last_config.vcenter_creds.ip,
92
+ last_config.vcenter_creds.username,
93
+ last_config.vcenter_creds.password,
94
+ last_config.vsphere.datacenter,
95
+ ).and_return(last_ova_manager)
96
+
97
+ expect(first_ova_manager).to receive(:deploy).with(
98
+ 'FAKE_PATH',
99
+ {
100
+ ip: first_config.vm.ip,
101
+ gateway: first_config.vm.gateway,
102
+ netmask: first_config.vm.netmask,
103
+ dns: first_config.vm.dns,
104
+ ntp_servers: first_config.vm.ntp_servers,
105
+ },
106
+ {
107
+ cluster: first_config.vsphere.cluster,
108
+ resource_pool: first_config.vsphere.resource_pool,
109
+ datastore: first_config.vsphere.datastore,
110
+ network: first_config.vsphere.network,
111
+ folder: first_config.vsphere.folder,
112
+ },
113
+ )
59
114
 
60
- expect(ova_manager).to receive(:deploy).with(
115
+ expect(last_ova_manager).to receive(:deploy).with(
61
116
  'FAKE_PATH',
62
117
  {
63
- ip: settings.vm_shepherd.vm.ip,
64
- gateway: settings.vm_shepherd.vm.gateway,
65
- netmask: settings.vm_shepherd.vm.netmask,
66
- dns: settings.vm_shepherd.vm.dns,
67
- ntp_servers: settings.vm_shepherd.vm.ntp_servers,
118
+ ip: last_config.vm.ip,
119
+ gateway: last_config.vm.gateway,
120
+ netmask: last_config.vm.netmask,
121
+ dns: last_config.vm.dns,
122
+ ntp_servers: last_config.vm.ntp_servers,
68
123
  },
69
124
  {
70
- cluster: settings.vm_shepherd.vsphere.cluster,
71
- resource_pool: settings.vm_shepherd.vsphere.resource_pool,
72
- datastore: settings.vm_shepherd.vsphere.datastore,
73
- network: settings.vm_shepherd.vsphere.network,
74
- folder: settings.vm_shepherd.vsphere.folder,
125
+ cluster: last_config.vsphere.cluster,
126
+ resource_pool: last_config.vsphere.resource_pool,
127
+ datastore: last_config.vsphere.datastore,
128
+ network: last_config.vsphere.network,
129
+ folder: last_config.vsphere.folder,
75
130
  },
76
131
  )
77
132
 
@@ -80,12 +135,11 @@ module VmShepherd
80
135
  end
81
136
 
82
137
  context 'with AWS settings' do
83
- let(:settings) do
84
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'aws.yml')))
85
- end
86
- let(:ams_manager) { instance_double(AwsManager) }
138
+ let(:settings_fixture_name) { 'aws.yml' }
139
+ let(:first_ams_manager) { instance_double(AwsManager) }
140
+ let(:last_ams_manager) { instance_double(AwsManager) }
87
141
  let(:ami_file_path) { 'PATH_TO_AMI_FILE' }
88
- let(:aws_options) do
142
+ let(:first_aws_options) do
89
143
  {
90
144
  aws_access_key: 'aws-access-key',
91
145
  aws_secret_key: 'aws-secret-key',
@@ -97,21 +151,36 @@ module VmShepherd
97
151
  vm_name: 'vm-name'
98
152
  }
99
153
  end
154
+ let(:last_aws_options) do
155
+ {
156
+ aws_access_key: 'aws-access-key-2',
157
+ aws_secret_key: 'aws-secret-key-2',
158
+ ssh_key_name: 'ssh-key-name-2',
159
+ security_group_id: 'security-group-id-2',
160
+ public_subnet_id: 'public-subnet-id-2',
161
+ private_subnet_id: 'private-subnet-id-2',
162
+ elastic_ip_id: 'elastic-ip-id-2',
163
+ vm_name: 'vm-name-2'
164
+ }
165
+ end
100
166
 
101
167
  it 'uses AwsManager to launch a VM' do
102
- expect(AwsManager).to receive(:new).with(aws_options).and_return(ams_manager)
103
- expect(ams_manager).to receive(:deploy).with(ami_file_path)
168
+ expect(AwsManager).to receive(:new).with(first_aws_options).and_return(first_ams_manager)
169
+ expect(first_ams_manager).to receive(:deploy).with(ami_file_path)
170
+
171
+ expect(AwsManager).to receive(:new).with(last_aws_options).and_return(last_ams_manager)
172
+ expect(last_ams_manager).to receive(:deploy).with(ami_file_path)
173
+
104
174
  manager.deploy(path: ami_file_path)
105
175
  end
106
176
  end
107
177
 
108
178
  context 'with OpenStack settings' do
109
- let(:settings) do
110
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'openstack.yml')))
111
- end
112
- let(:qcow2_manager) { instance_double(OpenstackManager) }
179
+ let(:settings_fixture_name) { 'openstack.yml' }
113
180
  let(:qcow2_file_path) { 'PATH_TO_QCOW2_FILE' }
114
- let(:openstack_options) do
181
+ let(:first_qcow2_manager) { instance_double(OpenstackManager) }
182
+ let(:last_qcow2_manager) { instance_double(OpenstackManager) }
183
+ let(:first_openstack_options) do
115
184
  {
116
185
  auth_url: 'http://example.com/version/tokens',
117
186
  username: 'username',
@@ -119,7 +188,15 @@ module VmShepherd
119
188
  tenant: 'tenant',
120
189
  }
121
190
  end
122
- let(:openstack_vm_options) do
191
+ let(:last_openstack_options) do
192
+ {
193
+ auth_url: 'http://example.com/version/tokens-2',
194
+ username: 'username-2',
195
+ api_key: 'api-key-2',
196
+ tenant: 'tenant-2',
197
+ }
198
+ end
199
+ let(:first_openstack_vm_options) do
123
200
  {
124
201
  name: 'some-vm-name',
125
202
  min_disk_size: 150,
@@ -134,18 +211,35 @@ module VmShepherd
134
211
  private_ip: '192.168.100.100',
135
212
  }
136
213
  end
214
+ let(:last_openstack_vm_options) do
215
+ {
216
+ name: 'some-vm-name-2',
217
+ min_disk_size: 152,
218
+ network_name: 'some-network-2',
219
+ key_name: 'some-key-2',
220
+ security_group_names: [
221
+ 'security-group-A-2',
222
+ 'security-group-B-2',
223
+ 'security-group-C-2',
224
+ ],
225
+ public_ip: '198.11.195.5-2',
226
+ private_ip: '192.168.100.100-2',
227
+ }
228
+ end
137
229
 
138
230
  it 'uses OpenstackManager to launch a VM' do
139
- expect(OpenstackManager).to receive(:new).with(openstack_options).and_return(qcow2_manager)
140
- expect(qcow2_manager).to receive(:deploy).with(qcow2_file_path, openstack_vm_options)
231
+ expect(OpenstackManager).to receive(:new).with(first_openstack_options).and_return(first_qcow2_manager)
232
+ expect(first_qcow2_manager).to receive(:deploy).with(qcow2_file_path, first_openstack_vm_options)
233
+
234
+ expect(OpenstackManager).to receive(:new).with(last_openstack_options).and_return(last_qcow2_manager)
235
+ expect(last_qcow2_manager).to receive(:deploy).with(qcow2_file_path, last_openstack_vm_options)
236
+
141
237
  manager.deploy(path: qcow2_file_path)
142
238
  end
143
239
  end
144
240
 
145
241
  context 'when IAAS is unknown' do
146
- let(:settings) do
147
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'unknown.yml')))
148
- end
242
+ let(:settings_fixture_name) { 'unknown.yml' }
149
243
 
150
244
  it 'raises an exception' do
151
245
  expect { manager.deploy(path: 'FAKE_PATH') }.to raise_error(Shepherd::InvalidIaas)
@@ -155,26 +249,41 @@ module VmShepherd
155
249
 
156
250
  describe '#destroy' do
157
251
  context 'when IAAS is vcloud' do
158
- let(:settings) do
159
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vcloud.yml')))
160
- end
161
- let(:vcloud_manager) { instance_double(VcloudManager) }
252
+ let(:settings_fixture_name) { 'vcloud.yml' }
253
+ let(:first_vcloud_manager) { instance_double(VcloudManager) }
254
+ let(:last_vcloud_manager) { instance_double(VcloudManager) }
162
255
 
163
256
  it 'uses VcloudManager to destroy a vm' do
164
257
  expect(VcloudManager).to receive(:new).with(
165
258
  {
166
- url: settings.vm_shepherd.creds.url,
167
- organization: settings.vm_shepherd.creds.organization,
168
- user: settings.vm_shepherd.creds.user,
169
- password: settings.vm_shepherd.creds.password,
259
+ url: first_config.creds.url,
260
+ organization: first_config.creds.organization,
261
+ user: first_config.creds.user,
262
+ password: first_config.creds.password,
170
263
  },
171
- settings.vm_shepherd.vdc.name,
264
+ first_config.vdc.name,
172
265
  instance_of(Logger)
173
- ).and_return(vcloud_manager)
266
+ ).and_return(first_vcloud_manager)
174
267
 
175
- expect(vcloud_manager).to receive(:destroy).with(
176
- [settings.vm_shepherd.vapp.ops_manager_name],
177
- settings.vm_shepherd.vdc.catalog,
268
+ expect(first_vcloud_manager).to receive(:destroy).with(
269
+ [first_config.vapp.ops_manager_name],
270
+ first_config.vdc.catalog,
271
+ )
272
+
273
+ expect(VcloudManager).to receive(:new).with(
274
+ {
275
+ url: last_config.creds.url,
276
+ organization: last_config.creds.organization,
277
+ user: last_config.creds.user,
278
+ password: last_config.creds.password,
279
+ },
280
+ last_config.vdc.name,
281
+ instance_of(Logger)
282
+ ).and_return(last_vcloud_manager)
283
+
284
+ expect(last_vcloud_manager).to receive(:destroy).with(
285
+ [last_config.vapp.ops_manager_name],
286
+ last_config.vdc.catalog,
178
287
  )
179
288
 
180
289
  manager.destroy
@@ -182,30 +291,35 @@ module VmShepherd
182
291
  end
183
292
 
184
293
  context 'when IAAS is vsphere' do
185
- let(:settings) do
186
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vsphere.yml')))
187
- end
188
- let(:ova_manager) { instance_double(VsphereManager) }
294
+ let(:settings_fixture_name) { 'vsphere.yml' }
295
+ let(:first_ova_manager) { instance_double(VsphereManager) }
296
+ let(:last_ova_manager) { instance_double(VsphereManager) }
189
297
 
190
298
  it 'uses VsphereManager to destroy a vm' do
191
299
  expect(VsphereManager).to receive(:new).with(
192
- settings.vm_shepherd.vcenter_creds.ip,
193
- settings.vm_shepherd.vcenter_creds.username,
194
- settings.vm_shepherd.vcenter_creds.password,
195
- settings.vm_shepherd.vsphere.datacenter,
196
- ).and_return(ova_manager)
197
- expect(ova_manager).to receive(:destroy).with(settings.vm_shepherd.vm.ip, settings.vm_shepherd.vsphere.resource_pool)
300
+ first_config.vcenter_creds.ip,
301
+ first_config.vcenter_creds.username,
302
+ first_config.vcenter_creds.password,
303
+ first_config.vsphere.datacenter,
304
+ ).and_return(first_ova_manager)
305
+ expect(first_ova_manager).to receive(:destroy).with(first_config.vm.ip, first_config.vsphere.resource_pool)
306
+
307
+ expect(VsphereManager).to receive(:new).with(
308
+ last_config.vcenter_creds.ip,
309
+ last_config.vcenter_creds.username,
310
+ last_config.vcenter_creds.password,
311
+ last_config.vsphere.datacenter,
312
+ ).and_return(last_ova_manager)
313
+ expect(last_ova_manager).to receive(:destroy).with(last_config.vm.ip, last_config.vsphere.resource_pool)
198
314
 
199
315
  manager.destroy
200
316
  end
201
317
  end
202
318
 
203
319
  context 'when IAAS is AWS' do
204
- let(:settings) do
205
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'aws.yml')))
206
- end
207
- let(:ams_manager) { instance_double(AwsManager) }
208
- let(:ami_options) do
320
+ let(:settings_fixture_name) { 'aws.yml' }
321
+ let(:first_ams_manager) { instance_double(AwsManager) }
322
+ let(:first_ami_options) do
209
323
  {
210
324
  aws_access_key: 'aws-access-key',
211
325
  aws_secret_key: 'aws-secret-key',
@@ -217,21 +331,37 @@ module VmShepherd
217
331
  vm_name: 'vm-name'
218
332
  }
219
333
  end
334
+ let(:last_ams_manager) { instance_double(AwsManager) }
335
+ let(:last_ami_options) do
336
+ {
337
+ aws_access_key: 'aws-access-key-2',
338
+ aws_secret_key: 'aws-secret-key-2',
339
+ ssh_key_name: 'ssh-key-name-2',
340
+ security_group_id: 'security-group-id-2',
341
+ public_subnet_id: 'public-subnet-id-2',
342
+ private_subnet_id: 'private-subnet-id-2',
343
+ elastic_ip_id: 'elastic-ip-id-2',
344
+ vm_name: 'vm-name-2'
345
+ }
346
+ end
220
347
 
221
348
  it 'uses AwsManager to destroy a VM' do
222
- expect(AwsManager).to receive(:new).with(ami_options).and_return(ams_manager)
223
- expect(ams_manager).to receive(:destroy)
349
+ expect(AwsManager).to receive(:new).with(first_ami_options).and_return(first_ams_manager)
350
+ expect(first_ams_manager).to receive(:destroy)
351
+
352
+ expect(AwsManager).to receive(:new).with(last_ami_options).and_return(last_ams_manager)
353
+ expect(last_ams_manager).to receive(:destroy)
354
+
224
355
  manager.destroy
225
356
  end
226
357
  end
227
358
 
228
359
  context 'when IAAS is Openstack' do
229
- let(:settings) do
230
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'openstack.yml')))
231
- end
232
- let(:qcow2_manager) { instance_double(OpenstackManager) }
360
+ let(:settings_fixture_name) { 'openstack.yml' }
233
361
  let(:qcow2_file_path) { 'PATH_TO_QCOW2_FILE' }
234
- let(:openstack_options) do
362
+ let(:first_qcow2_manager) { instance_double(OpenstackManager) }
363
+ let(:last_qcow2_manager) { instance_double(OpenstackManager) }
364
+ let(:first_openstack_options) do
235
365
  {
236
366
  auth_url: 'http://example.com/version/tokens',
237
367
  username: 'username',
@@ -239,7 +369,7 @@ module VmShepherd
239
369
  tenant: 'tenant',
240
370
  }
241
371
  end
242
- let(:openstack_vm_options) do
372
+ let(:first_openstack_vm_options) do
243
373
  {
244
374
  name: 'some-vm-name',
245
375
  min_disk_size: 150,
@@ -254,18 +384,43 @@ module VmShepherd
254
384
  private_ip: '192.168.100.100',
255
385
  }
256
386
  end
387
+ let(:last_openstack_options) do
388
+ {
389
+ auth_url: 'http://example.com/version/tokens-2',
390
+ username: 'username-2',
391
+ api_key: 'api-key-2',
392
+ tenant: 'tenant-2',
393
+ }
394
+ end
395
+ let(:last_openstack_vm_options) do
396
+ {
397
+ name: 'some-vm-name-2',
398
+ min_disk_size: 152,
399
+ network_name: 'some-network-2',
400
+ key_name: 'some-key-2',
401
+ security_group_names: [
402
+ 'security-group-A-2',
403
+ 'security-group-B-2',
404
+ 'security-group-C-2',
405
+ ],
406
+ public_ip: '198.11.195.5-2',
407
+ private_ip: '192.168.100.100-2',
408
+ }
409
+ end
257
410
 
258
411
  it 'uses OpenstackManager to destroy a VM' do
259
- expect(OpenstackManager).to receive(:new).with(openstack_options).and_return(qcow2_manager)
260
- expect(qcow2_manager).to receive(:destroy).with(openstack_vm_options)
412
+ expect(OpenstackManager).to receive(:new).with(first_openstack_options).and_return(first_qcow2_manager)
413
+ expect(first_qcow2_manager).to receive(:destroy).with(first_openstack_vm_options)
414
+
415
+ expect(OpenstackManager).to receive(:new).with(last_openstack_options).and_return(last_qcow2_manager)
416
+ expect(last_qcow2_manager).to receive(:destroy).with(last_openstack_vm_options)
417
+
261
418
  manager.destroy
262
419
  end
263
420
  end
264
421
 
265
422
  context 'when IAAS is unknown' do
266
- let(:settings) do
267
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'unknown.yml')))
268
- end
423
+ let(:settings_fixture_name) { 'unknown.yml' }
269
424
 
270
425
  it 'raises an exception' do
271
426
  expect { manager.destroy }.to raise_error(Shepherd::InvalidIaas)
@@ -275,26 +430,41 @@ module VmShepherd
275
430
 
276
431
  describe '#clean_environment' do
277
432
  context 'when IAAS is vcloud' do
278
- let(:settings) do
279
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vcloud.yml')))
280
- end
281
- let(:vcloud_manager) { instance_double(VcloudManager) }
433
+ let(:settings_fixture_name) { 'vcloud.yml' }
434
+ let(:first_vcloud_manager) { instance_double(VcloudManager) }
435
+ let(:last_vcloud_manager) { instance_double(VcloudManager) }
282
436
 
283
437
  it 'uses VcloudManager to destroy a vm' do
284
438
  expect(VcloudManager).to receive(:new).with(
285
439
  {
286
- url: settings.vm_shepherd.creds.url,
287
- organization: settings.vm_shepherd.creds.organization,
288
- user: settings.vm_shepherd.creds.user,
289
- password: settings.vm_shepherd.creds.password,
440
+ url: first_config.creds.url,
441
+ organization: first_config.creds.organization,
442
+ user: first_config.creds.user,
443
+ password: first_config.creds.password,
290
444
  },
291
- settings.vm_shepherd.vdc.name,
445
+ first_config.vdc.name,
292
446
  instance_of(Logger)
293
- ).and_return(vcloud_manager)
447
+ ).and_return(first_vcloud_manager)
294
448
 
295
- expect(vcloud_manager).to receive(:clean_environment).with(
296
- settings.vm_shepherd.vapp.product_names,
297
- settings.vm_shepherd.vapp.product_catalog,
449
+ expect(first_vcloud_manager).to receive(:clean_environment).with(
450
+ first_config.vapp.product_names,
451
+ first_config.vapp.product_catalog,
452
+ )
453
+
454
+ expect(VcloudManager).to receive(:new).with(
455
+ {
456
+ url: last_config.creds.url,
457
+ organization: last_config.creds.organization,
458
+ user: last_config.creds.user,
459
+ password: last_config.creds.password,
460
+ },
461
+ last_config.vdc.name,
462
+ instance_of(Logger)
463
+ ).and_return(last_vcloud_manager)
464
+
465
+ expect(last_vcloud_manager).to receive(:clean_environment).with(
466
+ last_config.vapp.product_names,
467
+ last_config.vapp.product_catalog,
298
468
  )
299
469
 
300
470
  manager.clean_environment
@@ -302,37 +472,48 @@ module VmShepherd
302
472
  end
303
473
 
304
474
  context 'when IAAS is vsphere' do
305
- let(:settings) do
306
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'vsphere.yml')))
475
+ let(:settings_fixture_name) { 'vsphere.yml' }
476
+ let(:first_ova_manager) { instance_double(VsphereManager) }
477
+ let(:first_clean_environment_options) do
478
+ {
479
+ datacenter_folders_to_clean: first_config.cleanup.datacenter_folders_to_clean,
480
+ datastores: first_config.cleanup.datastores,
481
+ datastore_folders_to_clean: first_config.cleanup.datastore_folders_to_clean,
482
+ }
307
483
  end
308
- let(:ova_manager) { instance_double(VsphereManager) }
309
- let(:clean_environment_options) do
484
+ let(:last_ova_manager) { instance_double(VsphereManager) }
485
+ let(:last_clean_environment_options) do
310
486
  {
311
- datacenter_folders_to_clean: settings.vm_shepherd.cleanup.datacenter_folders_to_clean,
312
- datastores: settings.vm_shepherd.cleanup.datastores,
313
- datastore_folders_to_clean: settings.vm_shepherd.cleanup.datastore_folders_to_clean,
487
+ datacenter_folders_to_clean: last_config.cleanup.datacenter_folders_to_clean,
488
+ datastores: last_config.cleanup.datastores,
489
+ datastore_folders_to_clean: last_config.cleanup.datastore_folders_to_clean,
314
490
  }
315
491
  end
316
492
 
317
493
  it 'uses VsphereManager to destroy a vm' do
318
494
  expect(VsphereManager).to receive(:new).with(
319
- settings.vm_shepherd.vcenter_creds.ip,
320
- settings.vm_shepherd.vcenter_creds.username,
321
- settings.vm_shepherd.vcenter_creds.password,
322
- settings.vm_shepherd.cleanup.datacenter,
323
- ).and_return(ova_manager)
324
- expect(ova_manager).to receive(:clean_environment).with(clean_environment_options)
495
+ first_config.vcenter_creds.ip,
496
+ first_config.vcenter_creds.username,
497
+ first_config.vcenter_creds.password,
498
+ first_config.cleanup.datacenter,
499
+ ).and_return(first_ova_manager)
500
+ expect(first_ova_manager).to receive(:clean_environment).with(first_clean_environment_options)
501
+ expect(VsphereManager).to receive(:new).with(
502
+ last_config.vcenter_creds.ip,
503
+ last_config.vcenter_creds.username,
504
+ last_config.vcenter_creds.password,
505
+ last_config.cleanup.datacenter,
506
+ ).and_return(last_ova_manager)
507
+ expect(last_ova_manager).to receive(:clean_environment).with(last_clean_environment_options)
325
508
 
326
509
  manager.clean_environment
327
510
  end
328
511
  end
329
512
 
330
513
  context 'when IAAS is AWS' do
331
- let(:settings) do
332
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'aws.yml')))
333
- end
334
- let(:ams_manager) { instance_double(AwsManager) }
335
- let(:ami_options) do
514
+ let(:settings_fixture_name) { 'aws.yml' }
515
+ let(:first_ams_manager) { instance_double(AwsManager) }
516
+ let(:first_ami_options) do
336
517
  {
337
518
  aws_access_key: 'aws-access-key',
338
519
  aws_secret_key: 'aws-secret-key',
@@ -344,21 +525,34 @@ module VmShepherd
344
525
  vm_name: 'vm-name'
345
526
  }
346
527
  end
528
+ let(:last_ams_manager) { instance_double(AwsManager) }
529
+ let(:last_ami_options) do
530
+ {
531
+ aws_access_key: 'aws-access-key-2',
532
+ aws_secret_key: 'aws-secret-key-2',
533
+ ssh_key_name: 'ssh-key-name-2',
534
+ security_group_id: 'security-group-id-2',
535
+ public_subnet_id: 'public-subnet-id-2',
536
+ private_subnet_id: 'private-subnet-id-2',
537
+ elastic_ip_id: 'elastic-ip-id-2',
538
+ vm_name: 'vm-name-2'
539
+ }
540
+ end
347
541
 
348
542
  it 'uses AwsManager to destroy a VM' do
349
- expect(AwsManager).to receive(:new).with(ami_options).and_return(ams_manager)
350
- expect(ams_manager).to receive(:clean_environment)
543
+ expect(AwsManager).to receive(:new).with(first_ami_options).and_return(first_ams_manager)
544
+ expect(first_ams_manager).to receive(:clean_environment)
545
+ expect(AwsManager).to receive(:new).with(last_ami_options).and_return(last_ams_manager)
546
+ expect(last_ams_manager).to receive(:clean_environment)
351
547
  manager.clean_environment
352
548
  end
353
549
  end
354
550
 
355
551
  context 'when IAAS is Openstack' do
356
- let(:settings) do
357
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'openstack.yml')))
358
- end
359
- let(:qcow2_manager) { instance_double(OpenstackManager) }
552
+ let(:settings_fixture_name) { 'openstack.yml' }
360
553
  let(:qcow2_file_path) { 'PATH_TO_QCOW2_FILE' }
361
- let(:openstack_options) do
554
+ let(:first_qcow2_manager) { instance_double(OpenstackManager) }
555
+ let(:first_openstack_options) do
362
556
  {
363
557
  auth_url: 'http://example.com/version/tokens',
364
558
  username: 'username',
@@ -366,18 +560,27 @@ module VmShepherd
366
560
  tenant: 'tenant',
367
561
  }
368
562
  end
563
+ let(:last_qcow2_manager) { instance_double(OpenstackManager) }
564
+ let(:last_openstack_options) do
565
+ {
566
+ auth_url: 'http://example.com/version/tokens-2',
567
+ username: 'username-2',
568
+ api_key: 'api-key-2',
569
+ tenant: 'tenant-2',
570
+ }
571
+ end
369
572
 
370
573
  it 'uses OpenstackManager to destroy a VM' do
371
- expect(OpenstackManager).to receive(:new).with(openstack_options).and_return(qcow2_manager)
372
- expect(qcow2_manager).to receive(:clean_environment)
574
+ expect(OpenstackManager).to receive(:new).with(first_openstack_options).and_return(first_qcow2_manager)
575
+ expect(first_qcow2_manager).to receive(:clean_environment)
576
+ expect(OpenstackManager).to receive(:new).with(last_openstack_options).and_return(last_qcow2_manager)
577
+ expect(last_qcow2_manager).to receive(:clean_environment)
373
578
  manager.clean_environment
374
579
  end
375
580
  end
376
581
 
377
582
  context 'when IAAS is unknown' do
378
- let(:settings) do
379
- RecursiveOpenStruct.new(YAML.load_file(File.join(SPEC_ROOT, 'fixtures', 'shepherd', 'unknown.yml')))
380
- end
583
+ let(:settings_fixture_name) { 'unknown.yml' }
381
584
 
382
585
  it 'raises an exception' do
383
586
  expect { manager.clean_environment }.to raise_error(Shepherd::InvalidIaas)
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.8.0
4
+ version: 1.0.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-29 00:00:00.000000000 Z
11
+ date: 2015-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-v1
@@ -191,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
191
  version: '0'
192
192
  requirements: []
193
193
  rubyforge_project:
194
- rubygems_version: 2.4.6
194
+ rubygems_version: 2.4.5
195
195
  signing_key:
196
196
  specification_version: 4
197
197
  summary: A tool for booting and tearing down Ops Manager VMs on various Infrastructures.