factor-connector-rackspace 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []