kitchen-rackspace 0.21.0 → 0.21.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 +5 -5
- data/.github/CODEOWNERS +1 -0
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/linters.yml +9 -0
- data/.github/workflows/publish.yaml +32 -0
- data/.markdownlint.yaml +6 -0
- data/.release-please-manifest.json +3 -0
- data/.rubocop.yml +10 -8
- data/CHANGELOG.md +93 -74
- data/Gemfile +11 -4
- data/LICENSE +202 -0
- data/README.md +48 -40
- data/Rakefile +15 -11
- data/data/images.json +58 -66
- data/helpers/dump_image_list.rb +45 -55
- data/kitchen-rackspace.gemspec +14 -23
- data/lib/kitchen/driver/rackspace.rb +42 -57
- data/lib/kitchen/driver/rackspace_version.rb +1 -22
- data/release-please-config.json +12 -0
- data/renovate.json +8 -0
- data/spec/kitchen/driver/rackspace_spec.rb +231 -229
- data/spec/spec_helper.rb +10 -16
- metadata +39 -106
- data/.travis.yml +0 -14
- data/LICENSE.txt +0 -15
|
@@ -1,38 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
# you may not use this file except in compliance with the License.
|
|
9
|
-
# You may obtain a copy of the License at
|
|
10
|
-
#
|
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
#
|
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
# See the License for the specific language governing permissions and
|
|
17
|
-
# limitations under the License.
|
|
18
|
-
|
|
19
|
-
require 'benchmark'
|
|
20
|
-
require 'fog'
|
|
21
|
-
require 'kitchen'
|
|
22
|
-
require 'etc'
|
|
23
|
-
require 'socket'
|
|
1
|
+
require "benchmark" unless defined?(Benchmark)
|
|
2
|
+
require "fog/rackspace"
|
|
3
|
+
require "kitchen"
|
|
4
|
+
require "etc" unless defined?(Etc)
|
|
5
|
+
require "socket" unless defined?(Socket)
|
|
6
|
+
require "json" unless defined?(JSON)
|
|
24
7
|
|
|
25
8
|
module Kitchen
|
|
26
9
|
module Driver
|
|
27
|
-
# Rackspace driver for Kitchen.
|
|
28
|
-
#
|
|
29
|
-
# @author Jonathan Hartman <j@p4nt5.com>
|
|
30
10
|
class Rackspace < Kitchen::Driver::SSHBase
|
|
31
|
-
default_config :version,
|
|
32
|
-
default_config :flavor_id,
|
|
33
|
-
default_config :username,
|
|
34
|
-
default_config :port,
|
|
35
|
-
default_config :rackspace_region, 'dfw'
|
|
11
|
+
default_config :version, "v2"
|
|
12
|
+
default_config :flavor_id, "performance1-1"
|
|
13
|
+
default_config :username, "root"
|
|
14
|
+
default_config :port, "22"
|
|
36
15
|
default_config :wait_for, 600
|
|
37
16
|
default_config :no_ssh_tcp_check, false
|
|
38
17
|
default_config :no_ssh_tcp_check_sleep, 120
|
|
@@ -43,22 +22,28 @@ module Kitchen
|
|
|
43
22
|
default_config(:image_id, &:default_image)
|
|
44
23
|
default_config(:server_name, &:default_name)
|
|
45
24
|
default_config :networks, nil
|
|
25
|
+
default_config :user_data, nil
|
|
26
|
+
default_config :config_drive, true
|
|
46
27
|
|
|
47
28
|
default_config :public_key_path do
|
|
48
29
|
[
|
|
49
|
-
File.expand_path(
|
|
50
|
-
File.expand_path(
|
|
51
|
-
File.expand_path(
|
|
52
|
-
File.expand_path(
|
|
30
|
+
File.expand_path("~/.ssh/id_rsa.pub"),
|
|
31
|
+
File.expand_path("~/.ssh/id_dsa.pub"),
|
|
32
|
+
File.expand_path("~/.ssh/identity.pub"),
|
|
33
|
+
File.expand_path("~/.ssh/id_ecdsa.pub"),
|
|
53
34
|
].find { |path| File.exist?(path) }
|
|
54
35
|
end
|
|
55
36
|
|
|
56
37
|
default_config :rackspace_username do
|
|
57
|
-
ENV[
|
|
38
|
+
ENV["RACKSPACE_USERNAME"] || ENV["OS_USERNAME"]
|
|
58
39
|
end
|
|
59
40
|
|
|
60
41
|
default_config :rackspace_api_key do
|
|
61
|
-
ENV[
|
|
42
|
+
ENV["RACKSPACE_API_KEY"] || ENV["OS_PASSWORD"]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
default_config :rackspace_region do
|
|
46
|
+
ENV["RACKSPACE_REGION"] || ENV["OS_REGION_NAME"] || "dfw"
|
|
62
47
|
end
|
|
63
48
|
|
|
64
49
|
required_config :rackspace_username
|
|
@@ -76,7 +61,7 @@ module Kitchen
|
|
|
76
61
|
state[:server_id] = server.id
|
|
77
62
|
info("Rackspace instance <#{state[:server_id]}> created.")
|
|
78
63
|
server.wait_for { ready? }
|
|
79
|
-
puts
|
|
64
|
+
puts "(server ready)"
|
|
80
65
|
rackconnect_check(server) if config[:rackconnect_wait]
|
|
81
66
|
servicelevel_check(server) if config[:servicelevel_wait]
|
|
82
67
|
state[:hostname] = hostname(server)
|
|
@@ -109,19 +94,19 @@ module Kitchen
|
|
|
109
94
|
# Total: 63
|
|
110
95
|
def default_name
|
|
111
96
|
[
|
|
112
|
-
instance.name.gsub(/\W/,
|
|
113
|
-
(Etc.getlogin ||
|
|
114
|
-
Socket.gethostname.gsub(/\W/,
|
|
115
|
-
Array.new(7) { rand(36).to_s(36) }.join
|
|
116
|
-
].join(
|
|
97
|
+
instance.name.gsub(/\W/, "")[0..14],
|
|
98
|
+
(Etc.getlogin || "nologin").gsub(/\W/, "")[0..14],
|
|
99
|
+
Socket.gethostname.gsub(/\W/, "")[0..22],
|
|
100
|
+
Array.new(7) { rand(36).to_s(36) }.join,
|
|
101
|
+
].join("-")
|
|
117
102
|
end
|
|
118
103
|
|
|
119
104
|
private
|
|
120
105
|
|
|
121
106
|
def compute
|
|
122
|
-
server_def = { provider:
|
|
123
|
-
opts =
|
|
124
|
-
|
|
107
|
+
server_def = { provider: "Rackspace" }
|
|
108
|
+
opts = %i{version rackspace_username rackspace_api_key
|
|
109
|
+
rackspace_region}
|
|
125
110
|
opts.each do |opt|
|
|
126
111
|
server_def[opt] = config[opt]
|
|
127
112
|
end
|
|
@@ -129,8 +114,8 @@ module Kitchen
|
|
|
129
114
|
end
|
|
130
115
|
|
|
131
116
|
def create_server
|
|
132
|
-
server_def = { name: config[:server_name], networks:
|
|
133
|
-
|
|
117
|
+
server_def = { name: config[:server_name], networks: }
|
|
118
|
+
%i{image_id flavor_id public_key_path no_passwd_lock user_data config_drive}.each do |opt|
|
|
134
119
|
server_def[opt] = config[opt]
|
|
135
120
|
end
|
|
136
121
|
# see @note on bootstrap def about rackconnect
|
|
@@ -141,8 +126,8 @@ module Kitchen
|
|
|
141
126
|
|
|
142
127
|
def images
|
|
143
128
|
@images ||= begin
|
|
144
|
-
json_file = File.expand_path(
|
|
145
|
-
JSON.
|
|
129
|
+
json_file = File.expand_path("../../../data/images.json", __dir__)
|
|
130
|
+
JSON.parse(IO.read(json_file))
|
|
146
131
|
end
|
|
147
132
|
end
|
|
148
133
|
|
|
@@ -151,20 +136,20 @@ module Kitchen
|
|
|
151
136
|
# it doesn't respect ssh_config values that might be required
|
|
152
137
|
wait_for_sshd(state[:hostname]) unless config[:no_ssh_tcp_check]
|
|
153
138
|
sleep(config[:no_ssh_tcp_check_sleep]) if config[:no_ssh_tcp_check]
|
|
154
|
-
puts
|
|
139
|
+
puts "(ssh ready)"
|
|
155
140
|
end
|
|
156
141
|
|
|
157
142
|
def rackconnect_check(server)
|
|
158
143
|
server.wait_for \
|
|
159
|
-
{ metadata.all[
|
|
160
|
-
puts
|
|
144
|
+
{ metadata.all["rackconnect_automation_status"] == "DEPLOYED" }
|
|
145
|
+
puts "(rackconnect automation complete)"
|
|
161
146
|
server.update # refresh accessIPv4 with new IP
|
|
162
147
|
end
|
|
163
148
|
|
|
164
149
|
def servicelevel_check(server)
|
|
165
150
|
server.wait_for \
|
|
166
|
-
{ metadata.all[
|
|
167
|
-
puts
|
|
151
|
+
{ metadata.all["rax_service_level_automation"] == "Complete" }
|
|
152
|
+
puts "(service level automation complete)"
|
|
168
153
|
end
|
|
169
154
|
|
|
170
155
|
def hostname(server)
|
|
@@ -176,10 +161,10 @@ module Kitchen
|
|
|
176
161
|
end
|
|
177
162
|
|
|
178
163
|
def networks
|
|
179
|
-
base_nets = %w
|
|
164
|
+
base_nets = %w{
|
|
180
165
|
00000000-0000-0000-0000-000000000000
|
|
181
166
|
11111111-1111-1111-1111-111111111111
|
|
182
|
-
|
|
167
|
+
}
|
|
183
168
|
config[:networks] ? base_nets + config[:networks] : nil
|
|
184
169
|
end
|
|
185
170
|
end
|
|
@@ -1,27 +1,6 @@
|
|
|
1
|
-
# Encoding: UTF-8
|
|
2
1
|
# frozen_string_literal: true
|
|
3
|
-
#
|
|
4
|
-
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
|
5
|
-
#
|
|
6
|
-
# Copyright (C) 2013-2015, Jonathan Hartman
|
|
7
|
-
#
|
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
-
# See the License for the specific language governing permissions and
|
|
18
|
-
# limitations under the License.
|
|
19
|
-
|
|
20
2
|
module Kitchen
|
|
21
|
-
# Version string for Rackspace Kitchen driver
|
|
22
|
-
#
|
|
23
|
-
# @author Jonathan Hartman <j@p4nt5.com>
|
|
24
3
|
module Driver
|
|
25
|
-
RACKSPACE_VERSION =
|
|
4
|
+
RACKSPACE_VERSION = "0.21.2"
|
|
26
5
|
end
|
|
27
6
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packages": {
|
|
3
|
+
".": {
|
|
4
|
+
"package-name": "kitchen-rackspace",
|
|
5
|
+
"changelog-path": "CHANGELOG.md",
|
|
6
|
+
"release-type": "ruby",
|
|
7
|
+
"include-component-in-tag": false,
|
|
8
|
+
"version-file": "lib/kitchen/driver/rackspace_version.rb"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
|
|
12
|
+
}
|