kitchen-softlayer 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/kitchen-softlayer.gemspec +1 -1
- data/lib/kitchen/driver/softlayer.rb +54 -20
- data/lib/kitchen/driver/softlayer_version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 490411db2bd36714e967aabfbd5517b83e9f93e0
|
4
|
+
data.tar.gz: 43689042ddcf3bebcc6a6a84aa313f22119e61dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 077925f2ca58b015d1097b7401b77ef6f8fa04aaa7aa7dc2e489f7079924b348e65071c8fc157b7d4721f426d863d17329010215ac3d3bd1fff7e9857c187761
|
7
|
+
data.tar.gz: 9df0820590baad9db937adcdff8957737f4d55ea0b02aab3d91205eb4b1b67b69d6cbb0626e7be0700e80449b5335a9e8304ea7a7b921af9c8591dbd8d23fcb4
|
data/README.md
CHANGED
@@ -96,6 +96,7 @@ softlayer_api_key | ENV['softlayer_api_key']
|
|
96
96
|
softlayer_default_datacenter | ENV['softlayer_default_datacenter']
|
97
97
|
softlayer_default_domain | ENV['softlayer_default_domain']
|
98
98
|
server_name | nil | Server Name
|
99
|
+
server_name_prefix | nil | If you want to have a static prefix for a random server name.
|
99
100
|
key_name | nil | the label of the uploaded key
|
100
101
|
ssh_key| nil | file location of private key
|
101
102
|
disable_ssl_validation | false | ssl validation for fog softlayer api
|
data/kitchen-softlayer.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
candidates += ['CHANGELOG.md', 'kitchen-softlayer.gemspec']
|
18
18
|
spec.files = candidates.sort
|
19
19
|
spec.require_paths = ['lib']
|
20
|
-
spec.required_ruby_version = '>= 2.
|
20
|
+
spec.required_ruby_version = '>= 2.1.0'
|
21
21
|
spec.add_dependency 'test-kitchen', '~> 1.4'
|
22
22
|
spec.add_dependency 'fog', '~> 1.18'
|
23
23
|
spec.add_dependency 'fog-softlayer', '~> 1'
|
@@ -23,6 +23,7 @@ module Kitchen
|
|
23
23
|
# rubocop:disable Metrics/LineLength
|
24
24
|
class Softlayer < Kitchen::Driver::SSHBase
|
25
25
|
default_config :server_name, nil
|
26
|
+
default_config :server_name_prefix, nil
|
26
27
|
default_config :key_name, nil
|
27
28
|
required_config :key_name
|
28
29
|
default_config :ssh_key do
|
@@ -76,7 +77,7 @@ module Kitchen
|
|
76
77
|
default_config :alternate_ip, nil
|
77
78
|
|
78
79
|
def create(state)
|
79
|
-
|
80
|
+
config_server_name
|
80
81
|
config[:disable_ssl_validation] && disable_ssl_validation
|
81
82
|
server = find_server(config[:hostname])
|
82
83
|
server = create_server unless server
|
@@ -88,13 +89,13 @@ module Kitchen
|
|
88
89
|
end
|
89
90
|
info "\n(server ready)"
|
90
91
|
tag_server(server)
|
91
|
-
if config[:ssh_via_hostname]
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
state[:hostname] = if config[:ssh_via_hostname]
|
93
|
+
config[:hostname]
|
94
|
+
elsif config[:alternate_ip]
|
95
|
+
config[:alternate_ip]
|
96
|
+
else
|
97
|
+
get_ip(server)
|
98
|
+
end
|
98
99
|
setup_ssh(server, state)
|
99
100
|
wait_for_ssh_key_access(state)
|
100
101
|
rescue Fog::Errors::Error, Excon::Errors::Error => ex
|
@@ -115,6 +116,17 @@ module Kitchen
|
|
115
116
|
|
116
117
|
private
|
117
118
|
|
119
|
+
# Set the proper server name in the config
|
120
|
+
def config_server_name
|
121
|
+
return if config[:server_name]
|
122
|
+
|
123
|
+
config[:server_name] = if config[:server_name_prefix]
|
124
|
+
server_name_prefix(config[:server_name_prefix])
|
125
|
+
else
|
126
|
+
default_name
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
118
130
|
def wait_for_server_to_delete(state)
|
119
131
|
((config[:destroy_timeout].to_i / 15).floor).times do
|
120
132
|
info 'Deleting server in softlayer'
|
@@ -122,7 +134,7 @@ module Kitchen
|
|
122
134
|
server = compute.servers.get(state[:server_id])
|
123
135
|
return if server.nil? || server.id.nil?
|
124
136
|
end
|
125
|
-
|
137
|
+
raise "#{config[:destroy_timeout]} seconds went by and server not deleted by softlayer"
|
126
138
|
end
|
127
139
|
|
128
140
|
def wait_for_ssh_key_access(state)
|
@@ -142,7 +154,7 @@ module Kitchen
|
|
142
154
|
return
|
143
155
|
end
|
144
156
|
end
|
145
|
-
|
157
|
+
raise "#{config[:ssh_timeout]} seconds went by and we couldn't connect, somethings broken"
|
146
158
|
end
|
147
159
|
|
148
160
|
def compute
|
@@ -191,7 +203,7 @@ module Kitchen
|
|
191
203
|
debug "Found private image #{id} for name #{image_name}"
|
192
204
|
end
|
193
205
|
end
|
194
|
-
|
206
|
+
raise "No image found with name #{image_name}" if id.nil?
|
195
207
|
id
|
196
208
|
end
|
197
209
|
|
@@ -203,7 +215,7 @@ module Kitchen
|
|
203
215
|
debug "Found network id #{r['id']} for vlan number #{r['vlanNumber']}"
|
204
216
|
return r['id']
|
205
217
|
end
|
206
|
-
|
218
|
+
raise "No network found for vlan number #{r['vlanNumber']}"
|
207
219
|
end
|
208
220
|
|
209
221
|
def create_server
|
@@ -288,6 +300,32 @@ module Kitchen
|
|
288
300
|
].join('-')
|
289
301
|
end
|
290
302
|
|
303
|
+
def server_name_prefix(server_name_prefix)
|
304
|
+
# Generate what should be a unique server name with given prefix
|
305
|
+
# of up to 63 total chars
|
306
|
+
#
|
307
|
+
# Provided prefix: variable, max 54
|
308
|
+
# Separator: 1
|
309
|
+
# Random string: 8
|
310
|
+
# ===================
|
311
|
+
# Max: 63
|
312
|
+
#
|
313
|
+
if server_name_prefix.length > 54
|
314
|
+
warn 'Server name prefix too long, truncated to 54 characters'
|
315
|
+
server_name_prefix = server_name_prefix[0..53]
|
316
|
+
end
|
317
|
+
|
318
|
+
server_name_prefix.gsub!(/\W/, '')
|
319
|
+
|
320
|
+
if server_name_prefix.empty?
|
321
|
+
warn 'Server name prefix empty or invalid; using fully generated name'
|
322
|
+
default_name
|
323
|
+
else
|
324
|
+
random_suffix = ('a'..'z').to_a.sample(8).join
|
325
|
+
server_name_prefix + '-' + random_suffix
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
291
329
|
# TODO: code has support for multiple ips but not used.
|
292
330
|
|
293
331
|
def get_public_private_ips(server)
|
@@ -301,14 +339,10 @@ module Kitchen
|
|
301
339
|
pub, priv = parse_ips(pub, priv)
|
302
340
|
pub[config[:public_ip_order].to_i] ||
|
303
341
|
priv[config[:private_ip_order].to_i] ||
|
304
|
-
|
305
|
-
if config[:use_private_ip_with_public_network] && !config[:private_network_only]
|
306
|
-
|
307
|
-
|
308
|
-
return priv[0]
|
309
|
-
else
|
310
|
-
return pub[0]
|
311
|
-
end
|
342
|
+
raise(ActionFailed, 'Could not find an IP')
|
343
|
+
return priv[0] if config[:use_private_ip_with_public_network] && !config[:private_network_only]
|
344
|
+
return priv[0] if config[:private_network_only]
|
345
|
+
pub[0]
|
312
346
|
end
|
313
347
|
|
314
348
|
def parse_ips(pub, priv)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-softlayer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neill Turner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -77,7 +77,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
78
78
|
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 2.
|
80
|
+
version: 2.1.0
|
81
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
83
|
- - ">="
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.
|
88
|
+
rubygems_version: 2.4.5.1
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: Test Kitchen Softlayer driver
|