kitchen-cloudstack 0.23.1 → 0.23.2

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
  SHA256:
3
- metadata.gz: d13e8ac436a5672b402155df02af8bd06df527048cc9cc3482bb588e8c7cdac7
4
- data.tar.gz: d56d3d78de030a6159a837f8f7fbc12888cdcfb28bf4e7ed75f6366885a04167
3
+ metadata.gz: 04aeb36b6e242b492ce5d28216f9daa7667797dd8989c1c520384db1c87c2ac4
4
+ data.tar.gz: dac1ca7486c4cbc23737b453a1072cc4227b8f8d7807434c33d0fe45956eb03a
5
5
  SHA512:
6
- metadata.gz: 1051722e1f22791d9d00ffa103e0b9e314a97576987c213e142ee6b1f27002a1017f20fe011a7be8c54b8c0ef84bcb900f2584dbf8aed50622ba5ecabe234d51
7
- data.tar.gz: f79fc8cc35c5fc18b7219f31d2a8c7e62a75f8f7b07237b60eb6d873ab2417f08464e6907f28023e624eca18c64a2b568bf6d70f076e68bc0ee3aa440d11e597
6
+ metadata.gz: c972655223df9ac9b0b1a7c594310114fac21ae63cf5b1085c401e6053de14f53576d3fd3b247f98d30f37d151dba750ba288a1a47b006c7f93bfdf5cff2d687
7
+ data.tar.gz: 74db868891dbdb72203307f76b757277344fa1433f9ff2a5d81a072f79d130fbcec367a1f942468f1c591a16469d90e783a930d8dadd5ae360eb7d674b93ff67
data/README.md CHANGED
@@ -28,6 +28,7 @@ Provide, at a minimum, the required driver options in your `.kitchen.yml` file:
28
28
  cloudstack_project_id: [PROJECT_ID] # To deploy VMs into project.
29
29
  cloudstack_vm_public_ip: [PUBLIC_IP] # In case you use advanced networking and do static NAT manually.
30
30
  associate_public_ip: [TRUE/FALSE] # If you want kitchen to automatically associate a public IP, default false.
31
+ cloudstack_create_firewall_rule: [TRUE/FALSE] # If you want Kitchen to automatically create firewall rule for public IP to reach SSH (port 22)
31
32
  cloudstack_userdata: "#cloud-config\npackages:\n - htop\n" # double quote required.
32
33
 
33
34
  Then to specify different OS templates,
@@ -11,21 +11,20 @@ Gem::Specification.new do |spec|
11
11
  spec.description = %q{A Test Kitchen Driver for Apache CloudStack}
12
12
  spec.summary = %q{Provides an interface for Test Kitchen to be able to run jobs against an Apache CloudStack cloud.}
13
13
  spec.homepage = 'https://github.com/test-kitchen/kitchen-cloudstack'
14
- spec.license = 'Apache 2.0'
14
+ spec.license = 'Apache-2.0'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
- spec.executables = []
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
18
  spec.require_paths = ['lib']
20
19
 
21
- spec.add_dependency 'test-kitchen', '~> 1.0', '>= 1.0.0'
22
- spec.add_dependency 'fog', '~> 1.23', '>= 1.23.0'
20
+ spec.add_dependency 'test-kitchen', '>= 1.0.0', "< 3"
21
+ spec.add_dependency 'fog', '~> 1.23'
23
22
 
24
- spec.add_development_dependency 'bundler', '~> 1.3'
25
- spec.add_development_dependency 'rake', '~> 0'
23
+ spec.add_development_dependency 'bundler'
24
+ spec.add_development_dependency 'rake'
26
25
 
27
26
  spec.add_development_dependency 'cane', '~> 2'
28
27
  spec.add_development_dependency 'tailor', '~> 1'
29
- spec.add_development_dependency 'countloc', '~> 0'
30
- spec.add_development_dependency 'pry', '~> 0'
28
+ spec.add_development_dependency 'countloc'
29
+ spec.add_development_dependency 'pry'
31
30
  end
@@ -33,6 +33,7 @@ module Kitchen
33
33
  default_config :username, 'root'
34
34
  default_config :port, '22'
35
35
  default_config :password, nil
36
+ default_config :cloudstack_create_firewall_rule, false
36
37
 
37
38
  def compute
38
39
  cloudstack_uri = URI.parse(config[:cloudstack_api_url])
@@ -323,10 +324,42 @@ module Kitchen
323
324
  job_status = compute.query_async_job_result(res['associateipaddressresponse']['jobid'])
324
325
  if job_status['queryasyncjobresultresponse'].fetch('jobstatus').to_i == 1
325
326
  save_ipaddress_id(state, job_status)
326
- get_public_ip(res['associateipaddressresponse']['id'])
327
+ ip_address = get_public_ip(res['associateipaddressresponse']['id'])
327
328
  else
328
329
  error(job_status['queryasyncjobresultresponse'].fetch('jobresult'))
329
330
  end
331
+
332
+ if config[:cloudstack_create_firewall_rule]
333
+ info("Creating firewall rule for SSH")
334
+ # create firewallrule projectid=<project> cidrlist=<0.0.0.0/0 or your source> protocol=tcp startport=0 endport=65535 (or you can restrict to 22 if you want) ipaddressid=<public ip address id>
335
+ options = {
336
+ 'projectid' => config[:cloudstack_project_id],
337
+ 'cidrlist' => '0.0.0.0/0',
338
+ 'protocol' => 'tcp',
339
+ 'startport' => 22,
340
+ 'endport' => 22,
341
+ 'ipaddressid' => state[:ipaddressid]
342
+ }
343
+ res = compute.create_firewall_rule(options)
344
+ status = 0
345
+ timeout = 10
346
+ while status == 0
347
+ job_status = compute.query_async_job_result(res['createfirewallruleresponse']['jobid'])
348
+ status = job_status['queryasyncjobresultresponse'].fetch('jobstatus').to_i
349
+ timeout -= 1
350
+ error("Failed to create firewall rule by timeout") if timeout == 0
351
+ sleep 1
352
+ end
353
+
354
+ if job_status['queryasyncjobresultresponse'].fetch('jobstatus').to_i == 1
355
+ save_firewall_rule_id(state, job_status)
356
+ info('Firewall rule successfully created')
357
+ else
358
+ error(job_status['queryasyncjobresultresponse'])
359
+ end
360
+ end
361
+
362
+ ip_address
330
363
  end
331
364
 
332
365
  def create_port_forward(state, virtualmachineid)
@@ -359,6 +392,21 @@ module Kitchen
359
392
  error("Error disassociating public ip")
360
393
  end
361
394
  end
395
+
396
+ if state[:firewall_rule_id]
397
+ info("Removing firewall rule '#{state[:firewall_rule_id]}'")
398
+
399
+ begin
400
+ res = compute.delete_firewall_rule(state[:firewall_rule_id])
401
+ rescue Fog::Compute::Cloudstack::BadRequest => e
402
+ error(e) unless e.to_s.match?(/does not exist/)
403
+ else
404
+ job_status = compute.query_async_job_result(res['deletefirewallruleresponse']['jobid'])
405
+ unless job_status['queryasyncjobresultresponse'].fetch('jobstatus').to_i == 0
406
+ error("Error removing firewall rule '#{state[:firewall_rule_id]}'")
407
+ end
408
+ end
409
+ end
362
410
  end
363
411
 
364
412
  def delete_port_forward(state)
@@ -393,6 +441,13 @@ module Kitchen
393
441
  .fetch('id')
394
442
  end
395
443
 
444
+ def save_firewall_rule_id(state, job_status)
445
+ state[:firewall_rule_id] = job_status['queryasyncjobresultresponse']
446
+ .fetch('jobresult')
447
+ .fetch('firewallrule')
448
+ .fetch('id')
449
+ end
450
+
396
451
  def save_forwarding_port_rule_id(state, uuid)
397
452
  state[:forwardingruleid] = uuid
398
453
  end
@@ -21,6 +21,6 @@ module Kitchen
21
21
  module Driver
22
22
 
23
23
  # Version string for Cloudstack Kitchen driver
24
- CLOUDSTACK_VERSION = "0.23.1"
24
+ CLOUDSTACK_VERSION = "0.23.2"
25
25
  end
26
26
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-cloudstack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.1
4
+ version: 0.23.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Moody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-06 00:00:00.000000000 Z
11
+ date: 2019-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
19
  version: 1.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '1.0'
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 1.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: fog
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -37,9 +37,6 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.23'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 1.23.0
43
40
  type: :runtime
44
41
  prerelease: false
45
42
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,35 +44,32 @@ dependencies:
47
44
  - - "~>"
48
45
  - !ruby/object:Gem::Version
49
46
  version: '1.23'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 1.23.0
53
47
  - !ruby/object:Gem::Dependency
54
48
  name: bundler
55
49
  requirement: !ruby/object:Gem::Requirement
56
50
  requirements:
57
- - - "~>"
51
+ - - ">="
58
52
  - !ruby/object:Gem::Version
59
- version: '1.3'
53
+ version: '0'
60
54
  type: :development
61
55
  prerelease: false
62
56
  version_requirements: !ruby/object:Gem::Requirement
63
57
  requirements:
64
- - - "~>"
58
+ - - ">="
65
59
  - !ruby/object:Gem::Version
66
- version: '1.3'
60
+ version: '0'
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: rake
69
63
  requirement: !ruby/object:Gem::Requirement
70
64
  requirements:
71
- - - "~>"
65
+ - - ">="
72
66
  - !ruby/object:Gem::Version
73
67
  version: '0'
74
68
  type: :development
75
69
  prerelease: false
76
70
  version_requirements: !ruby/object:Gem::Requirement
77
71
  requirements:
78
- - - "~>"
72
+ - - ">="
79
73
  - !ruby/object:Gem::Version
80
74
  version: '0'
81
75
  - !ruby/object:Gem::Dependency
@@ -110,28 +104,28 @@ dependencies:
110
104
  name: countloc
111
105
  requirement: !ruby/object:Gem::Requirement
112
106
  requirements:
113
- - - "~>"
107
+ - - ">="
114
108
  - !ruby/object:Gem::Version
115
109
  version: '0'
116
110
  type: :development
117
111
  prerelease: false
118
112
  version_requirements: !ruby/object:Gem::Requirement
119
113
  requirements:
120
- - - "~>"
114
+ - - ">="
121
115
  - !ruby/object:Gem::Version
122
116
  version: '0'
123
117
  - !ruby/object:Gem::Dependency
124
118
  name: pry
125
119
  requirement: !ruby/object:Gem::Requirement
126
120
  requirements:
127
- - - "~>"
121
+ - - ">="
128
122
  - !ruby/object:Gem::Version
129
123
  version: '0'
130
124
  type: :development
131
125
  prerelease: false
132
126
  version_requirements: !ruby/object:Gem::Requirement
133
127
  requirements:
134
- - - "~>"
128
+ - - ">="
135
129
  - !ruby/object:Gem::Version
136
130
  version: '0'
137
131
  description: A Test Kitchen Driver for Apache CloudStack
@@ -155,7 +149,7 @@ files:
155
149
  - lib/kitchen/driver/cloudstack_version.rb
156
150
  homepage: https://github.com/test-kitchen/kitchen-cloudstack
157
151
  licenses:
158
- - Apache 2.0
152
+ - Apache-2.0
159
153
  metadata: {}
160
154
  post_install_message:
161
155
  rdoc_options: []
@@ -173,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
167
  version: '0'
174
168
  requirements: []
175
169
  rubyforge_project:
176
- rubygems_version: 2.7.6
170
+ rubygems_version: 2.7.9
177
171
  signing_key:
178
172
  specification_version: 4
179
173
  summary: Provides an interface for Test Kitchen to be able to run jobs against an