factor-connector-rackspace 0.0.3

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.
@@ -0,0 +1,396 @@
1
+ require 'factor-connector-api'
2
+ require 'fog'
3
+
4
+ Factor::Connector.service 'rackspace_compute' do
5
+
6
+ action 'list' do |params|
7
+ username = params['username']
8
+ api_key = params['api_key']
9
+ region = (params['region'] || 'ord').to_sym
10
+
11
+ fail "Username is required" unless username
12
+ fail "API Key is required" unless api_key
13
+
14
+ compute_settings = {
15
+ provider:'Rackspace',
16
+ rackspace_username:username,
17
+ rackspace_api_key:api_key,
18
+ version: :v2,
19
+ rackspace_region: region
20
+ }
21
+
22
+ info "Initializing connection settings"
23
+ begin
24
+ compute = Fog::Compute.new compute_settings
25
+ rescue
26
+ fail "Couldn't initialize connection"
27
+ end
28
+
29
+ info "Retreiving list of servers"
30
+ begin
31
+ servers = compute.servers.map {|s| s.attributes}
32
+ rescue
33
+ fail "Failed to retrieve list of servers"
34
+ end
35
+
36
+ action_callback servers
37
+ end
38
+
39
+ action 'get' do |params|
40
+ username = params['username']
41
+ api_key = params['api_key']
42
+ server_id = params['id']
43
+ region = (params['region'] || 'ord').to_sym
44
+
45
+ fail "Username is required" unless username
46
+ fail "API Key is required" unless api_key
47
+ fail "Server ID is required" unless server_id
48
+
49
+ compute_settings = {
50
+ provider:'Rackspace',
51
+ rackspace_username:username,
52
+ rackspace_api_key:api_key,
53
+ version: :v2,
54
+ rackspace_region: region
55
+ }
56
+
57
+ info "Initializing connection settings"
58
+ begin
59
+ compute = Fog::Compute.new compute_settings
60
+ rescue
61
+ fail "Couldn't initialize connection"
62
+ end
63
+
64
+ info "Retreiving servers"
65
+ begin
66
+ server = compute.servers.get(server_id).attributes
67
+ rescue
68
+ fail "Failed to retrieve server"
69
+ end
70
+
71
+ action_callback server
72
+ end
73
+
74
+ action 'create' do |params|
75
+ username = params['username']
76
+ api_key = params['api_key']
77
+ flavor_id = params['flavor_id']
78
+ image_id = params['image_id']
79
+ region = (params['region'] || 'ord').to_sym
80
+ name = params['name']
81
+
82
+ fail "Username is required" unless username
83
+ fail "API Key is required" unless api_key
84
+ fail "Flavor ID is required" unless flavor_id
85
+ fail "Image ID is required" unless image_id
86
+
87
+
88
+ compute_settings = {
89
+ provider:'Rackspace',
90
+ rackspace_username:username,
91
+ rackspace_api_key:api_key,
92
+ version: :v2,
93
+ rackspace_region: region
94
+ }
95
+
96
+ info "Initializing connection settings"
97
+ begin
98
+ compute = Fog::Compute.new compute_settings
99
+ rescue
100
+ fail "Couldn't initialize connection"
101
+ end
102
+
103
+ server_settings = {
104
+ flavor_id: flavor_id,
105
+ image_id: image_id
106
+ }
107
+ server_settings[:name] = name if name
108
+
109
+ info "Creating server"
110
+ begin
111
+ server = compute.servers.create(server_settings)
112
+ rescue
113
+ fail "Failed to create server with provided settings"
114
+ end
115
+
116
+ info "Waiting for the server. This can take a few minutes."
117
+ begin
118
+ server.wait_for { ready? }
119
+ rescue
120
+ fail "Server creation started, but couldn't get the status"
121
+ end
122
+
123
+ server.reload
124
+ server_info = server.attributes
125
+
126
+ action_callback server_info
127
+ end
128
+
129
+ action 'bootstrap' do |params|
130
+ username = params['username']
131
+ api_key = params['api_key']
132
+ flavor_id = params['flavor_id']
133
+ image_id = params['image_id']
134
+ private_key = params['private_key']
135
+ public_key = params['public_key']
136
+ region = (params['region'] || 'ord').to_sym
137
+ name = params['name']
138
+
139
+ fail "Username is required" unless username
140
+ fail "API Key is required" unless api_key
141
+ fail "Flavor ID is required" unless flavor_id
142
+ fail "Image ID is required" unless image_id
143
+ fail "Private Key is required" unless private_key
144
+ fail "Public Key is required" unless public_key
145
+
146
+
147
+ compute_settings = {
148
+ provider:'Rackspace',
149
+ rackspace_username:username,
150
+ rackspace_api_key:api_key,
151
+ version: :v2,
152
+ rackspace_region: region
153
+ }
154
+
155
+ info "Initializing connection settings"
156
+ begin
157
+ compute = Fog::Compute.new compute_settings
158
+ rescue
159
+ fail "Couldn't initialize connection"
160
+ end
161
+
162
+ info 'Setting up private key'
163
+ begin
164
+ private_key_file = Tempfile.new('private')
165
+ private_key_file.write(private_key)
166
+ private_key_file.close
167
+ rescue
168
+ fail 'Failed to setup private key'
169
+ end
170
+
171
+ info 'Setting up public key'
172
+ begin
173
+ public_key_file = Tempfile.new('public')
174
+ public_key_file.write(public_key)
175
+ public_key_file.close
176
+ rescue
177
+ fail 'Failed to setup public key'
178
+ end
179
+
180
+ server_settings = {
181
+ flavor_id: flavor_id,
182
+ image_id: image_id,
183
+ public_key_path: public_key_file.path,
184
+ private_key_path: private_key_file.path
185
+ }
186
+ server_settings[:name] = name if name
187
+
188
+ info "Creating server"
189
+ begin
190
+ server = compute.servers.bootstrap(server_settings)
191
+ rescue
192
+ fail "Failed to create server with provided settings"
193
+ end
194
+
195
+ info "Waiting for the server. This can take a few minutes."
196
+ begin
197
+ server.wait_for { ready? }
198
+ rescue
199
+ fail "Server creation started, but couldn't get the status"
200
+ end
201
+
202
+ server.reload
203
+ server_info = server.attributes
204
+
205
+ action_callback server_info
206
+ end
207
+
208
+ action 'ssh' do |params|
209
+ username = params['username']
210
+ api_key = params['api_key']
211
+ server_id = params['id']
212
+ region = (params['region'] || 'ord').to_sym
213
+ commands = params['commands']
214
+
215
+ fail "Username is required" unless username
216
+ fail "API Key is required" unless api_key
217
+ fail "Server ID is required" unless server_id
218
+ fail "Commands is required" unless commands
219
+ fail "Commands must be an array of strings" unless commands.is_a?(Array)
220
+ fail "Commands must be an array of strings" unless commands.all?{|c| c.is_a?(String)}
221
+
222
+ compute_settings = {
223
+ provider:'Rackspace',
224
+ rackspace_username:username,
225
+ rackspace_api_key:api_key,
226
+ version: :v2,
227
+ rackspace_region: region
228
+ }
229
+
230
+ info "Initializing connection settings"
231
+ begin
232
+ compute = Fog::Compute.new compute_settings
233
+ rescue
234
+ fail "Couldn't initialize connection"
235
+ end
236
+
237
+ info "Retreiving server #{server_id}"
238
+ begin
239
+ server = compute.servers.get(server_id)
240
+ server_info = server.attributes
241
+ rescue
242
+ fail "Failed to retrieve server #{server_id}"
243
+ end
244
+
245
+ info "Executing commands on server #{server_id}"
246
+ begin
247
+ ssh_results = server.ssh(commands)
248
+
249
+ call_response = ssh_results.map do |ssh_result|
250
+ {
251
+ status: ssh_result.status,
252
+ command: ssh_result.command,
253
+ stderr: ssh_result.stderr,
254
+ stdout: ssh_result.stdout
255
+ }
256
+ end
257
+
258
+ rescue
259
+ fail "Failed to execute commands on server #{server_id}"
260
+ end
261
+
262
+ action_callback call_response
263
+ end
264
+
265
+ action 'delete' do |params|
266
+ username = params['username']
267
+ api_key = params['api_key']
268
+ server_id = params['id']
269
+ region = (params['region'] || 'ord').to_sym
270
+
271
+ fail "Username is required" unless username
272
+ fail "API Key is required" unless api_key
273
+ fail "Server ID is required" unless server_id
274
+
275
+ compute_settings = {
276
+ provider:'Rackspace',
277
+ rackspace_username:username,
278
+ rackspace_api_key:api_key,
279
+ version: :v2,
280
+ rackspace_region: region
281
+ }
282
+
283
+ info "Initializing connection settings"
284
+ begin
285
+ compute = Fog::Compute.new compute_settings
286
+ rescue
287
+ fail "Couldn't initialize connection"
288
+ end
289
+
290
+ info "Retreiving servers"
291
+ begin
292
+ server = compute.servers.get(server_id)
293
+ server_info = server.attributes
294
+ rescue
295
+ fail "Failed to retrieve server"
296
+ end
297
+
298
+ info "Deleting server"
299
+ begin
300
+ server.destroy
301
+ rescue
302
+ fail "Failed to destroy server"
303
+ end
304
+
305
+ action_callback server
306
+ end
307
+
308
+ action 'reboot' do |params|
309
+ username = params['username']
310
+ api_key = params['api_key']
311
+ server_id = params['id']
312
+ region = (params['region'] || 'ord').to_sym
313
+
314
+ fail "Username is required" unless username
315
+ fail "API Key is required" unless api_key
316
+ fail "Server ID is required" unless server_id
317
+
318
+ compute_settings = {
319
+ provider:'Rackspace',
320
+ rackspace_username:username,
321
+ rackspace_api_key:api_key,
322
+ version: :v2,
323
+ rackspace_region: region
324
+ }
325
+
326
+ info "Initializing connection settings"
327
+ begin
328
+ compute = Fog::Compute.new compute_settings
329
+ rescue
330
+ fail "Couldn't initialize connection"
331
+ end
332
+
333
+ info "Retreiving server"
334
+ begin
335
+ server = compute.servers.get(server_id)
336
+ server_info = server.attributes
337
+ rescue
338
+ fail "Failed to retrieve server"
339
+ end
340
+
341
+ info "Rebooting server"
342
+ begin
343
+ server.reboot
344
+ rescue
345
+ fail "Failed to reboot server"
346
+ end
347
+
348
+ action_callback server
349
+ end
350
+
351
+ action 'change_password' do |params|
352
+ username = params['username']
353
+ api_key = params['api_key']
354
+ server_id = params['id']
355
+ new_password = params['new_password']
356
+ region = (params['region'] || 'ord').to_sym
357
+
358
+ fail "Username is required" unless username
359
+ fail "API Key is required" unless api_key
360
+ fail "Server ID is required" unless server_id
361
+ fail "New Password is required" unless new_password
362
+
363
+ compute_settings = {
364
+ provider:'Rackspace',
365
+ rackspace_username:username,
366
+ rackspace_api_key:api_key,
367
+ version: :v2,
368
+ rackspace_region: region
369
+ }
370
+
371
+ info "Initializing connection settings"
372
+ begin
373
+ compute = Fog::Compute.new compute_settings
374
+ rescue
375
+ fail "Couldn't initialize connection"
376
+ end
377
+
378
+ info "Retreiving server"
379
+ begin
380
+ server = compute.servers.get(server_id)
381
+ server_info = server.attributes
382
+ rescue
383
+ fail "Failed to retrieve server"
384
+ end
385
+
386
+ info "Rebooting server"
387
+ begin
388
+ server.change_admin_password(new_password)
389
+ rescue
390
+ fail "Failed to reboot server"
391
+ end
392
+
393
+ action_callback server
394
+ end
395
+
396
+ end
@@ -0,0 +1,74 @@
1
+ require 'factor-connector-api'
2
+ require 'fog'
3
+
4
+ Factor::Connector.service 'rackspace_compute_flavors' do
5
+
6
+ action 'list' do |params|
7
+ username = params['username']
8
+ api_key = params['api_key']
9
+ region = (params['region'] || 'ord').to_sym
10
+
11
+ fail "Username is required" unless username
12
+ fail "API Key is required" unless api_key
13
+
14
+ compute_settings = {
15
+ provider:'Rackspace',
16
+ rackspace_username:username,
17
+ rackspace_api_key:api_key,
18
+ version: :v2,
19
+ rackspace_region: region
20
+ }
21
+
22
+ info "Initializing connection settings"
23
+ begin
24
+ compute = Fog::Compute.new compute_settings
25
+ rescue
26
+ fail "Couldn't initialize connection"
27
+ end
28
+
29
+ info "Retreiving list of flavors"
30
+ begin
31
+ flavors = compute.flavors.map {|s| s.attributes}
32
+ rescue
33
+ fail "Failed to retrieve list of flavors"
34
+ end
35
+
36
+ action_callback flavors
37
+ end
38
+
39
+ action 'get' do |params|
40
+ username = params['username']
41
+ api_key = params['api_key']
42
+ flavor_id = params['id']
43
+ region = (params['region'] || 'ord').to_sym
44
+
45
+ fail "Username is required" unless username
46
+ fail "API Key is required" unless api_key
47
+ fail "Flavor ID is required" unless flavor_id
48
+
49
+ compute_settings = {
50
+ provider:'Rackspace',
51
+ rackspace_username:username,
52
+ rackspace_api_key:api_key,
53
+ version: :v2,
54
+ rackspace_region: region
55
+ }
56
+
57
+ info "Initializing connection settings"
58
+ begin
59
+ compute = Fog::Compute.new compute_settings
60
+ rescue
61
+ fail "Couldn't initialize connection"
62
+ end
63
+
64
+ info "Retreiving flavor"
65
+ begin
66
+ flavor = compute.flavors.get(server_id).attributes
67
+ rescue
68
+ fail "Failed to retrieve flavor"
69
+ end
70
+
71
+ action_callback flavor
72
+ end
73
+
74
+ end
@@ -0,0 +1,74 @@
1
+ require 'factor-connector-api'
2
+ require 'fog'
3
+
4
+ Factor::Connector.service 'rackspace_compute_images' do
5
+
6
+ action 'list' do |params|
7
+ username = params['username']
8
+ api_key = params['api_key']
9
+ region = (params['region'] || 'ord').to_sym
10
+
11
+ fail "Username is required" unless username
12
+ fail "API Key is required" unless api_key
13
+
14
+ compute_settings = {
15
+ provider:'Rackspace',
16
+ rackspace_username:username,
17
+ rackspace_api_key:api_key,
18
+ version: :v2,
19
+ rackspace_region: region
20
+ }
21
+
22
+ info "Initializing connection settings"
23
+ begin
24
+ compute = Fog::Compute.new compute_settings
25
+ rescue
26
+ fail "Couldn't initialize connection"
27
+ end
28
+
29
+ info "Retreiving list of images"
30
+ begin
31
+ images = compute.images.map {|s| s.attributes}
32
+ rescue
33
+ fail "Failed to retrieve list of images"
34
+ end
35
+
36
+ action_callback images
37
+ end
38
+
39
+ action 'get' do |params|
40
+ username = params['username']
41
+ api_key = params['api_key']
42
+ image_id = params['id']
43
+ region = (params['region'] || 'ord').to_sym
44
+
45
+ fail "Username is required" unless username
46
+ fail "API Key is required" unless api_key
47
+ fail "Image ID is required" unless image_id
48
+
49
+ compute_settings = {
50
+ provider:'Rackspace',
51
+ rackspace_username:username,
52
+ rackspace_api_key:api_key,
53
+ version: :v2,
54
+ rackspace_region: region
55
+ }
56
+
57
+ info "Initializing connection settings"
58
+ begin
59
+ compute = Fog::Compute.new compute_settings
60
+ rescue
61
+ fail "Couldn't initialize connection"
62
+ end
63
+
64
+ info "Retreiving image"
65
+ begin
66
+ image = compute.images.get(server_id).attributes
67
+ rescue
68
+ fail "Failed to retrieve image"
69
+ end
70
+
71
+ action_callback image
72
+ end
73
+
74
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: factor-connector-rackspace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Maciej Skierkowski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-10-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: factor-connector-api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: fog
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.23.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.23.0
46
+ description:
47
+ email:
48
+ - maciej@factor.io
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/factor/connector/rackspace_compute.rb
54
+ - lib/factor/connector/rackspace_compute_flavors.rb
55
+ - lib/factor/connector/rackspace_compute_images.rb
56
+ homepage: https://factor.io
57
+ licenses: []
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 1.8.25
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Rackspace Factor.io Connector
80
+ test_files: []