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 +4 -4
- data/README.md +1 -0
- data/kitchen-cloudstack.gemspec +7 -8
- data/lib/kitchen/driver/cloudstack.rb +56 -1
- data/lib/kitchen/driver/cloudstack_version.rb +1 -1
- metadata +20 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04aeb36b6e242b492ce5d28216f9daa7667797dd8989c1c520384db1c87c2ac4
|
4
|
+
data.tar.gz: dac1ca7486c4cbc23737b453a1072cc4227b8f8d7807434c33d0fe45956eb03a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,
|
data/kitchen-cloudstack.gemspec
CHANGED
@@ -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
|
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', '
|
22
|
-
spec.add_dependency 'fog', '~> 1.23'
|
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'
|
25
|
-
spec.add_development_dependency 'rake'
|
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'
|
30
|
-
spec.add_development_dependency 'pry'
|
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
|
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.
|
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-
|
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: '
|
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: '
|
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
|
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.
|
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
|