dployr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,516 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dployr::Configuration do
4
+
5
+ config = Dployr::Configuration.new
6
+
7
+ describe "setting config" do
8
+ before :all do
9
+ ENV['DPLOYR'] = '0.1.0'
10
+ end
11
+
12
+ after :all do
13
+ ENV.delete 'DPLOYR'
14
+ end
15
+
16
+ describe "default values" do
17
+ let(:defaults) do
18
+ {
19
+ attributes: {
20
+ name: "example",
21
+ instance_type: "m1.small",
22
+ version: "${DPLOYR}"
23
+ },
24
+ scripts: [
25
+ { path: "configure.sh" }
26
+ ],
27
+ providers: {
28
+ aws: {
29
+ attributes: {
30
+ network_id: "be457fca",
31
+ instance_type: "m1.small",
32
+ "type-%{name}" => "small"
33
+ },
34
+ scripts: [
35
+ { path: "router.sh", args: ["%{name}", "${region}", "${provider}"] }
36
+ ],
37
+ regions: {
38
+ "eu-west-1a" => {
39
+ attributes: {
40
+ keypair: "vagrant-aws-ireland"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ end
48
+
49
+ describe "add default values" do
50
+ before do
51
+ config.set_default defaults
52
+ end
53
+
54
+ context "when was added" do
55
+ it "should create a default instance" do
56
+ config.default.should be_an_instance_of Dployr::Config::Instance
57
+ end
58
+
59
+ it "should have valid attributes" do
60
+ config.default.attributes.should be_a Hash
61
+ config.default.attributes.should have(3).items
62
+ end
63
+
64
+ it "should have scripts" do
65
+ config.default.scripts.should be_a Array
66
+ config.default.scripts.should have(1).items
67
+ end
68
+
69
+ it "should have providers" do
70
+ config.default.providers.should be_a Hash
71
+ config.default.providers.should have(1).items
72
+ end
73
+
74
+ it "should provider must be for AWS" do
75
+ config.default.get_provider(:aws).should be_a Hash
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "instance" do
82
+
83
+ hera_config = {
84
+ attributes: {
85
+ name: "hera"
86
+ },
87
+ providers: {
88
+ gce: {
89
+ attributes: {
90
+ instance_type: "m1.large"
91
+ },
92
+ regions: {
93
+ "los-angeles-ca" => {
94
+ attributes: {
95
+ keypair: "google"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+
103
+ zeus_config = {
104
+ extends: "hera",
105
+ attributes: {
106
+ name: "zeus"
107
+ },
108
+ authentication: {
109
+ user: "admin",
110
+ key_path: "path/to/key.pem"
111
+ },
112
+ scripts: [
113
+ { path: "setup.sh", args: ["--id ${index}"], remote: true }
114
+ ],
115
+ providers: {
116
+ aws: {
117
+ attributes: {
118
+ instance_type: "m1.small"
119
+ },
120
+ regions: {
121
+ "europe-west1-a" => {
122
+ attributes: {
123
+ keypair: "vagrant-aws-ireland"
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+
131
+ before :all do
132
+ config.add_instance :hera, hera_config
133
+ config.add_instance :zeus, zeus_config
134
+ end
135
+
136
+ describe "add new instance" do
137
+ let(:instance) { config.get_instance :zeus }
138
+
139
+ context "when was added" do
140
+ it "should exists the new instance" do
141
+ instance.should be_an_instance_of Dployr::Config::Instance
142
+ end
143
+
144
+ it "should have valid attributes" do
145
+ instance.attributes.should be_a Hash
146
+ instance.attributes.should have(1).items
147
+ end
148
+
149
+ it "should have scripts" do
150
+ instance.scripts.should be_a Array
151
+ instance.scripts.should have(1).items
152
+ end
153
+
154
+ it "should have providers" do
155
+ instance.providers.should be_a Hash
156
+ instance.providers.should have(1).items
157
+ end
158
+
159
+ it "should provider must be for AWS" do
160
+ instance.get_provider(:aws).should be_a Hash
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ describe "getting config" do
167
+ let(:zeus) { config.get_config :zeus }
168
+
169
+ it "should exists and be a valid" do
170
+ zeus.should be_a Hash
171
+ end
172
+
173
+ describe "attributes" do
174
+ it "shoudl exists" do
175
+ zeus[:attributes].should be_a Hash
176
+ end
177
+
178
+ it "should overwrite the name" do
179
+ zeus[:attributes][:name].should eql 'zeus'
180
+ end
181
+
182
+ it "should have the default instance type" do
183
+ zeus[:attributes][:instance_type].should eql 'm1.small'
184
+ end
185
+ end
186
+
187
+ describe "scripts" do
188
+ it "should exists" do
189
+ zeus[:scripts].should be_a Array
190
+ end
191
+
192
+ it "should have a valid number" do
193
+ zeus[:scripts].should have(2).items
194
+ end
195
+
196
+ it "should have the default script" do
197
+ zeus[:scripts][0][:path].should eql 'configure.sh'
198
+ end
199
+
200
+ it "should have the instance specific script" do
201
+ zeus[:scripts][1][:path].should eql 'setup.sh'
202
+ end
203
+ end
204
+
205
+ describe "autentication" do
206
+ it "should exists" do
207
+ zeus[:authentication].should be_a Hash
208
+ end
209
+
210
+ it "should have a valid number of values" do
211
+ zeus[:authentication].should have(2).items
212
+ end
213
+
214
+ it "should have a valid authentication values" do
215
+ zeus[:authentication][:user].should eql 'admin'
216
+ end
217
+ end
218
+
219
+ describe "providers" do
220
+ it "should exists" do
221
+ zeus[:providers].should be_a Hash
222
+ zeus[:providers].should have(2).items
223
+ end
224
+
225
+ it "should exists the aws provider config" do
226
+ zeus[:providers][:aws].should be_a Hash
227
+ end
228
+
229
+ describe "inherited from parent" do
230
+ it "should exists the gce provider config" do
231
+ zeus[:providers][:gce].should be_a Hash
232
+ end
233
+
234
+ describe "gce" do
235
+ let(:gce) {
236
+ zeus[:providers][:gce]
237
+ }
238
+
239
+ it "should have a valid number of attributes" do
240
+ gce[:attributes].should have(3).items
241
+ end
242
+
243
+ it "should have the instance_type attributes" do
244
+ gce[:attributes][:instance_type].should eql "m1.large"
245
+ end
246
+
247
+ it "should have valid number of regions" do
248
+ gce[:regions].should have(1).items
249
+ end
250
+
251
+ it "should have a valid region" do
252
+ gce[:regions]["los-angeles-ca"].should be_a Hash
253
+ end
254
+
255
+ describe "los-angeles-ca region" do
256
+ let(:region) {
257
+ gce[:regions]["los-angeles-ca"]
258
+ }
259
+
260
+ it "should have a valid number of attributes" do
261
+ region[:attributes].should have(4).items
262
+ end
263
+
264
+ it "should have inherited scripts" do
265
+ region[:scripts].should have(2).items
266
+ end
267
+
268
+ it "should have inherited autentication" do
269
+ region[:authentication].should have(2).items
270
+ end
271
+ end
272
+ end
273
+
274
+ end
275
+
276
+ describe "aws" do
277
+ it "should have the expected values" do
278
+ zeus[:providers][:aws].should have(4).items
279
+ end
280
+
281
+ describe "attributes" do
282
+ it "should have valid attributes" do
283
+ zeus[:providers][:aws][:attributes].should be_a Hash
284
+ end
285
+
286
+ it "should have a valid number of attributes" do
287
+ zeus[:providers][:aws][:attributes].should have(5).items
288
+ end
289
+
290
+ it "should have a valid instance_type" do
291
+ zeus[:providers][:aws][:attributes][:instance_type].should eql "m1.small"
292
+ end
293
+
294
+ it "should have a valid netword_id" do
295
+ zeus[:providers][:aws][:attributes][:network_id].should eql "be457fca"
296
+ end
297
+
298
+ it "should have a valid name" do
299
+ zeus[:providers][:aws][:attributes][:name].should eql "zeus"
300
+ end
301
+
302
+ describe "templating" do
303
+ it "should have a version attribute" do
304
+ zeus[:providers][:aws][:attributes][:version].should eql "0.1.0"
305
+ end
306
+
307
+ it "should have a type key with valid replacement" do
308
+ zeus[:providers][:aws][:attributes]["type-zeus"].should eql "small"
309
+ end
310
+ end
311
+ end
312
+
313
+ describe "scripts" do
314
+ it "should exists" do
315
+ zeus[:providers][:aws][:scripts].should be_a Array
316
+ end
317
+
318
+ it "should have a valid number" do
319
+ zeus[:providers][:aws][:scripts].should have(3).items
320
+ end
321
+
322
+ it "should have a valid path" do
323
+ zeus[:providers][:aws][:scripts][0][:path].should eql "configure.sh"
324
+ end
325
+
326
+ it "should have a valid path" do
327
+ zeus[:providers][:aws][:scripts][1][:path].should eql "setup.sh"
328
+ end
329
+
330
+ it "should have a valid path" do
331
+ zeus[:providers][:aws][:scripts][2][:path].should eql "router.sh"
332
+ end
333
+
334
+ describe "templating" do
335
+ it "should replace the argument with the instance name" do
336
+ zeus[:providers][:aws][:scripts][2][:args][0].should eql "zeus"
337
+ end
338
+ end
339
+ end
340
+
341
+ describe "regions" do
342
+ it "should have valid regions" do
343
+ zeus[:providers][:aws][:regions].should be_a Hash
344
+ end
345
+
346
+ it "should have a valid number of providers" do
347
+ zeus[:providers][:aws][:regions].should have(2).items
348
+ end
349
+
350
+ it "should exists an europe-west1-a region" do
351
+ zeus[:providers][:aws][:regions]["europe-west1-a"].should be_a Hash
352
+ end
353
+
354
+ it "should exists an eu-west-1a region" do
355
+ zeus[:providers][:aws][:regions]["eu-west-1a"].should be_a Hash
356
+ end
357
+
358
+ it "should exists an europe-west1-a region" do
359
+ zeus[:providers][:aws][:regions]["eu-west-1a"].should be_a Hash
360
+ end
361
+
362
+ describe "eu-west-1a" do
363
+ let(:region) {
364
+ zeus[:providers][:aws][:regions]["eu-west-1a"]
365
+ }
366
+
367
+ describe "attributes" do
368
+ it "should exists" do
369
+ region[:attributes].should be_a Hash
370
+ end
371
+
372
+ it "should have the name attribute" do
373
+ region[:attributes][:name].should eql "zeus"
374
+ end
375
+
376
+ it "should have the instance_type attribute" do
377
+ region[:attributes][:instance_type].should eql "m1.small"
378
+ end
379
+
380
+ it "should have the network_id attribute" do
381
+ region[:attributes][:network_id].should eql "be457fca"
382
+ end
383
+
384
+ it "should have the keypair attribute" do
385
+ region[:attributes][:keypair].should eql "vagrant-aws-ireland"
386
+ end
387
+ end
388
+
389
+ describe "scripts" do
390
+ it "should exists" do
391
+ region[:scripts].should be_a Array
392
+ end
393
+
394
+ it "should have a valid number" do
395
+ region[:scripts].should have(3).items
396
+ end
397
+
398
+ it "should have the proper first script" do
399
+ region[:scripts][0][:path].should eql "configure.sh"
400
+ end
401
+
402
+ it "should have the proper second script" do
403
+ region[:scripts][1][:path].should eql "setup.sh"
404
+ end
405
+
406
+ it "should have a valid index argument" do
407
+ region[:scripts][1][:args][0].should eql "--id "
408
+ end
409
+
410
+ it "should have the proper third script" do
411
+ region[:scripts][2][:path].should eql "router.sh"
412
+ end
413
+
414
+ describe "templating" do
415
+ it "should replace the argument with the current region" do
416
+ region[:scripts][2][:args][1].should eql "eu-west-1a"
417
+ end
418
+
419
+ it "should replace the argument with the current provider" do
420
+ region[:scripts][2][:args][2].should eql "aws"
421
+ end
422
+ end
423
+ end
424
+
425
+ describe "authentication" do
426
+ it "should exists" do
427
+ region[:authentication].should be_a Hash
428
+ end
429
+
430
+ it "should have a valid number" do
431
+ region[:authentication].should have(2).items
432
+ end
433
+
434
+ it "should have a valid user" do
435
+ region[:authentication][:user].should eql "admin"
436
+ end
437
+
438
+ it "should have a valid key_path" do
439
+ region[:authentication][:key_path].should eql "path/to/key.pem"
440
+ end
441
+ end
442
+ end
443
+ end
444
+ end
445
+ end
446
+ end
447
+
448
+ describe "get instance config" do
449
+ attributes = { name: "hera" }
450
+
451
+ describe "provider" do
452
+ before :all do
453
+ @config = config.get_provider :zeus, :aws, attributes
454
+ end
455
+
456
+ it "should exists the config" do
457
+ @config.should be_a Hash
458
+ end
459
+
460
+ it "should have one provider" do
461
+ @config.should have(4).items
462
+ end
463
+
464
+ it "should have two regions" do
465
+ @config[:regions].should have(2).items
466
+ end
467
+
468
+ describe "attributes" do
469
+ it "should exists" do
470
+ @config[:attributes].should be_a Hash
471
+ end
472
+
473
+ it "should have a valid name" do
474
+ @config[:attributes][:name].should eql "zeus"
475
+ end
476
+ end
477
+
478
+ describe "scripts" do
479
+ it "should exists" do
480
+ @config[:scripts].should be_a Array
481
+ end
482
+
483
+ it "should have a valid number" do
484
+ @config[:scripts].should have(3).items
485
+ end
486
+
487
+ it "should overwrite the argument" do
488
+ @config[:scripts][2][:args][0].should eql "hera"
489
+ end
490
+ end
491
+ end
492
+
493
+ describe "region" do
494
+ before :all do
495
+ @config = config.get_region :zeus, :aws, "eu-west-1a", attributes
496
+ end
497
+
498
+ it "should exists" do
499
+ @config.should be_a Hash
500
+ end
501
+
502
+ it "should have a valid number of keys" do
503
+ @config.should have(3).items
504
+ end
505
+
506
+ it "should have a attributes" do
507
+ @config[:attributes].should be_a Hash
508
+ end
509
+
510
+ it "should have a attributes" do
511
+ @config[:attributes].should be_a Hash
512
+ end
513
+ end
514
+ end
515
+ end
516
+ end
@@ -0,0 +1,59 @@
1
+
2
+ Dployr::configure do |dployr|
3
+ dployr.config.set_default({
4
+ attributes: {
5
+ name: "example",
6
+ instance_type: "m1.small",
7
+ version: "${DPLOYR}"
8
+ },
9
+ scripts: [
10
+ { path: "configure.sh" }
11
+ ],
12
+ providers: {
13
+ aws: {
14
+ attributes: {
15
+ network_id: "be457fca",
16
+ instance_type: "m1.small",
17
+ "type-%{name}" => "small"
18
+ },
19
+ scripts: [
20
+ { path: "router.sh", args: ["%{name}", "${region}", "${provider}"] }
21
+ ],
22
+ regions: {
23
+ "eu-west-1a" => {
24
+ attributes: {
25
+ keypair: "vagrant-aws-ireland"
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ })
32
+
33
+ dployr.config.add_instance('zeus', {
34
+ attributes: {
35
+ name: "zeus"
36
+ },
37
+ authentication: {
38
+ user: "admin",
39
+ key_path: "path/to/key.pem"
40
+ },
41
+ scripts: [
42
+ { path: "setup.sh", args: ["--id ${index}"], remote: true }
43
+ ],
44
+ providers: {
45
+ aws: {
46
+ attributes: {
47
+ instance_type: "m1.small"
48
+ },
49
+ regions: {
50
+ "europe-west1-a" => {
51
+ attributes: {
52
+ keypair: "vagrant-aws-ireland"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ })
59
+ end
@@ -0,0 +1,91 @@
1
+ ---
2
+ default:
3
+ attributes:
4
+ name: "%{name}"
5
+ prefix: dev
6
+ private_key_path: ~/pems/innotechdev.pem
7
+ username: innotechdev
8
+ authentication:
9
+ private_key_path: ~/.ssh/id_rsa
10
+ public_key_path: ~/.ssh/id_rsa.pub
11
+ username: ubuntu
12
+ providers:
13
+ aws:
14
+ attributes:
15
+ instance_type: m1.small
16
+ regions:
17
+ eu-west-1a:
18
+ attributes:
19
+ ami: ami-f5ca3682
20
+ keypair: vagrant-aws-ireland
21
+ security_groups:
22
+ - sg-576c7635
23
+ - sg-1e648a7b
24
+ subnet_id: subnet-be457fca
25
+ us-west-2b:
26
+ attributes:
27
+ ami: ami-c66608f6
28
+ keypair: vagrant-aws-oregon
29
+ security_groups:
30
+ - sg-88283cea
31
+ - sg-f233ca97
32
+ subnet_id: subnet-ef757e8d
33
+ gce:
34
+ attributes:
35
+ client_email: sample@developer.com
36
+ instance_type: m1.small
37
+ key_location: ~/pems/privatekey.p12
38
+ project_id: innotechapp
39
+ regions:
40
+ europe-west1-a:
41
+ attributes:
42
+ ami: centos-base-v5
43
+ instance_type: n1-standard-1
44
+ network: liberty-gce
45
+ scripts:
46
+ -
47
+ path: ./scripts/routes_allregions.sh
48
+ -
49
+ args: "%{name}"
50
+ path: ./scripts/updatedns.sh
51
+
52
+
53
+ custom:
54
+ name: 1
55
+ web-server:
56
+ attributes:
57
+ prefix: zeus-dev
58
+ authentication:
59
+ private_key_path: ~/.ssh/id_rsa
60
+ public_key_path: ~/.ssh/id_rsa.pub
61
+ username: ubuntu
62
+ providers:
63
+ aws:
64
+ regions:
65
+ attributes:
66
+ instance_type: m1.medium
67
+ gce:
68
+ attributes:
69
+ instance_type: m1.large
70
+ scripts:
71
+ -
72
+ args:
73
+ - "%{name}"
74
+ - "%{type}"
75
+ - "%{domain}"
76
+ path: ./scripts/configure.sh
77
+ -
78
+ args:
79
+ - "%{hydra}"
80
+ path: ./scripts/configureListener.sh
81
+ -
82
+ args:
83
+ - "%{$provider}-%{region}"
84
+ - "%{type}"
85
+ path: ./scripts/hydraProbe.sh
86
+
87
+ #instances:
88
+ # zeus:
89
+ # include: ['web-server']
90
+ # attributes:
91
+ # name: zeus
data/spec/fog_spec_.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'fog'
2
+
3
+ describe "Fog" do
4
+
5
+ describe "compute" do
6
+
7
+ before { Fog.mock! }
8
+
9
+ after { Fog.unmock! }
10
+
11
+ let(:fog) do
12
+ Fog::Compute.new({
13
+ provider: 'AWS',
14
+ aws_access_key_id: 'key',
15
+ aws_secret_access_key: 'secret'
16
+ })
17
+ end
18
+
19
+ describe "create server" do
20
+
21
+ before do
22
+ @server = fog.servers.create flavor_id => 1, :image_id => 'ami-5ee70037', :name => 'fake_server'
23
+ @server.wait_for { ready? }
24
+ end
25
+
26
+ it "should create the server" do
27
+ fog.servers.all.should have(1).items
28
+ end
29
+
30
+ it "should have a valid image id" do
31
+ fog.servers.get(@server.id).image_id.should eql 'ami-5ee70037'
32
+ end
33
+
34
+ it "should have a valid dns name" do
35
+ fog.servers.get(@server.id).dns_name.should include("compute-1.amazonaws.com")
36
+ end
37
+
38
+ it "should destroy the server" do
39
+ @server.destroy
40
+ end
41
+
42
+ end
43
+ end
44
+ end