kitchen-cloudstack 0.23.1 → 0.23.2

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
  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