vominator 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66a177e22bafb6bb313e6bb9f3438054424e194a
4
- data.tar.gz: dfc070049d6062072a57dd3d76ba086f3204b802
3
+ metadata.gz: 53df973484342c23fa5dd76112d93161b8963375
4
+ data.tar.gz: a6886455dcb30e4f305c0f9e233cfdffa0936c6f
5
5
  SHA512:
6
- metadata.gz: 66a135ad654b22b8877e3eb6dbaf3a0998b10f55dfb59225591e61e3426153242b8ce0d4c3d5dd78fdcefaa1b8e70e6b8a8f6bd433107577cc22fd62652c4bc6
7
- data.tar.gz: f6ed4717fcf783aa9d4215d3880874adcaf87a0bfa6f8937e2e6f0cad992faafc3a8ce2761fb5ad6d4546bba2a54b8b8607fe63ae2ebe3fe23357c73a38b3eb1
6
+ metadata.gz: aa37b7bfbe5819cbd0c73c64b5f1a4e505b2ab25cf7774e60b0498604a9d40a17574b690fbfda547f0d90e84a64ffb3b303a407b38cbd05531fa865bdbe2cddd
7
+ data.tar.gz: 95bcbd216f5b72fcdeb797a8c2afbf8c2a9f6b942667d242255d2020e61ddaa1f2e7a871b1c51de1b54cd64414ffe19855b46897042569f93552c01cb3f49b21
@@ -4,50 +4,3 @@ LOGGER = Vominator::Logger
4
4
 
5
5
  VOMINATOR_CONFIG ||= Vominator.get_config
6
6
  PUKE_CONFIG ||= Vominator.get_puke_config(VOMINATOR_CONFIG['configuration_path'])
7
-
8
- EC2_INSTANCE_METADATA = {
9
- :'t1.micro' => {:ephemeral_devices => 0, :virtualization_type => 'paravirtual'},
10
- :'t2.micro' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
11
- :'t2.small' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
12
- :'t2.medium' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
13
- :'m1.small' => {:ephemeral_devices => 1, :virtualization_type => 'paravirtual'},
14
- :'m1.medium' => {:ephemeral_devices => 1, :virtualization_type => 'paravirtual'},
15
- :'m1.large' => {:ephemeral_devices => 2, :virtualization_type => 'paravirtual'},
16
- :'m1.xlarge' => {:ephemeral_devices => 4, :virtualization_type => 'paravirtual'},
17
- :'m3.medium' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
18
- :'m3.large' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
19
- :'m3.xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
20
- :'m3.2xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
21
- :'c1.medium' => {:ephemeral_devices => 1, :virtualization_type => 'paravirtual'},
22
- :'c1.xlarge' => {:ephemeral_devices => 4, :virtualization_type => 'paravirtual'},
23
- :'m2.xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'paravirtual'},
24
- :'m2.2xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'paravirtual'},
25
- :'m2.4xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'paravirtual'},
26
- :'hi1.4xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
27
- :'hs1.8xlarge' => {:ephemeral_devices => 24, :virtualization_type => 'hvm'},
28
- :'cr1.8xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
29
- :'cc1.4xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
30
- :'cc2.8xlarge' => {:ephemeral_devices => 4, :virtualization_type => 'hvm'},
31
- :'cg1.4xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
32
- :'c3.large' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
33
- :'c3.xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
34
- :'c3.2xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
35
- :'c3.4xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
36
- :'c3.8xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
37
- :'c4.large' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
38
- :'c4.xlarge' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
39
- :'c4.2xlarge' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
40
- :'c4.4xlarge' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
41
- :'c4.8xlarge' => {:ephemeral_devices => 0, :virtualization_type => 'hvm'},
42
- :'g2.2xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
43
- :'i2.xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
44
- :'i2.2xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
45
- :'i2.4xlarge' => {:ephemeral_devices => 4, :virtualization_type => 'hvm'},
46
- :'i2.8xlarge' => {:ephemeral_devices => 8, :virtualization_type => 'hvm'},
47
- :'r3.large' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
48
- :'r3.xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
49
- :'r3.2xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
50
- :'r3.4xlarge' => {:ephemeral_devices => 1, :virtualization_type => 'hvm'},
51
- :'r3.8xlarge' => {:ephemeral_devices => 2, :virtualization_type => 'hvm'},
52
- }
53
-
data/lib/vominator/ec2.rb CHANGED
@@ -1,19 +1,20 @@
1
1
  require 'aws-sdk'
2
2
  require 'base64'
3
3
  require_relative 'constants'
4
+ require_relative 'ec2info'
4
5
 
5
6
  module Vominator
6
7
  class EC2
7
8
  def self.get_virt_type(instance_type)
8
9
  begin
9
- return EC2_INSTANCE_METADATA[instance_type.to_sym][:virtualization_type]
10
+ return Vominator::EC2Info.get(instance_type).virtualization_type
10
11
  rescue NoMethodError
11
12
  raise ArgumentError, 'You must specify a valid instance type'
12
13
  end
13
14
  end
14
15
 
15
16
  def self.get_ephemeral_dev_count(instance_type)
16
- return EC2_INSTANCE_METADATA[instance_type.to_sym][:ephemeral_devices]
17
+ Vominator::EC2Info.get(instance_type).ephemeral_devices
17
18
  end
18
19
 
19
20
  def self.get_instances(resource)
@@ -0,0 +1,99 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+ require_relative 'constants'
5
+
6
+ module Vominator
7
+ module EC2Info
8
+ def get(type)
9
+ InstanceInfo.new().get_instance(type)
10
+ end
11
+ module_function :get
12
+
13
+ class InstanceInfo
14
+ # The URI to JSON data from ec2instances.info
15
+ @@uri = URI.parse('http://www.ec2instances.info/instances.json')
16
+ @@instances = nil
17
+
18
+ attr_accessor :filepath
19
+ attr_accessor :instances
20
+
21
+ def initialize(file=nil)
22
+ self.filepath = file || filepath_from_config
23
+
24
+ # Get the source file from @@uri if it's too old or missing
25
+ get_instance_info if refresh_info?
26
+
27
+ # Load the json data
28
+ load_instances()
29
+ end
30
+
31
+ def get_instance(type)
32
+ Instance.new(@@instances.detect {|i| i['instance_type'] == type})
33
+ end
34
+
35
+ def load_instances()
36
+ get_instance_info() if refresh_info?
37
+
38
+ instances = JSON.load(File.read(self.filepath))
39
+ @@instances = instances if instances.kind_of?(Array)
40
+ end
41
+
42
+ def refresh_info?
43
+ return true if not File.exist?(self.filepath) or File.zero?(self.filepath)
44
+ last_modified = Net::HTTP.start(@@uri.hostname, @@uri.port,
45
+ :use_ssl => @@uri.scheme == 'https') { |http|
46
+ http.request(Net::HTTP::Head.new(@@uri.request_uri))['last-modified'] }
47
+ Time.parse(last_modified) > File.ctime(self.filepath)
48
+ end
49
+
50
+ def get_instance_info()
51
+ File.open(self.filepath, 'w+') { |f| f.write(Net::HTTP.get(@@uri)) }
52
+ end
53
+
54
+ def filepath_from_config
55
+ file = VOMINATOR_CONFIG['instances_file']
56
+ if File.exist?(file)
57
+ file = File.expand_path(file)
58
+ end
59
+ file
60
+ end
61
+
62
+ private :filepath_from_config
63
+ end
64
+
65
+ class Instance
66
+ attr_accessor :raw
67
+
68
+ def initialize(instance={})
69
+ self.raw = instance
70
+ end
71
+
72
+ def ephemeral_devices
73
+ device_count = if not self.raw['storage'].nil? and self.raw['storage'].key? 'devices'
74
+ self.raw['storage']['devices']
75
+ else 0
76
+ end
77
+ end
78
+
79
+ def virtualization_type
80
+ vt = case
81
+ when self.raw['linux_virtualization_types'].include?('HVM'),
82
+ self.generation.eql?('current'),
83
+ self.instance_type.start_with?('cc2'),
84
+ self.instance_type.start_with?('hi1'),
85
+ self.instance_type.start_with?('hs1'),
86
+ self.instance_type.start_with?('cr1')
87
+ 'hvm'
88
+ else
89
+ 'paravirtual'
90
+ end
91
+ end
92
+
93
+
94
+ def method_missing(name)
95
+ self.raw[name.to_s] if self.raw.key? name.to_s
96
+ end
97
+ end
98
+ end
99
+ end
@@ -1,3 +1,3 @@
1
1
  module Vominator
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -18,11 +18,18 @@ module Vominator
18
18
  def self.get_puke_config(puke_dir)
19
19
  if File.exist?(puke_dir)
20
20
  config_file = "#{puke_dir}/config.yaml"
21
- puke_config = YAML.load(File.read(config_file))
21
+ puke_config = nil
22
+ if File.exist?(config_file)
23
+ puke_config = YAML.load(File.read(config_file))
24
+ end
22
25
  else
23
- raise("Unable to open puke configuration at #{puke_dir}")
26
+ raise("Unable to open puke directory at #{puke_dir}")
24
27
  end
25
- return puke_config if puke_config.kind_of?(Hash)
28
+ if puke_config.kind_of?(Hash)
29
+ return puke_config
30
+ else
31
+ return {}
32
+ end
26
33
  end
27
34
 
28
35
  def self.get_key_pair(vominator_config)
@@ -30,8 +37,12 @@ module Vominator
30
37
  end
31
38
 
32
39
  def self.get_puke_variables(environment)
33
- data = PUKE_CONFIG[environment]
34
- return data
40
+ if environment
41
+ data = PUKE_CONFIG[environment]
42
+ return data
43
+ else
44
+ return nil
45
+ end
35
46
  end
36
47
 
37
48
  def self.yesno?(prompt: 'Continue?', default: true)
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'vominator/ec2'
3
3
  require 'pry'
4
4
  describe Vominator::EC2 do
5
-
5
+ cwd = Dir.pwd()
6
6
  before(:each) do
7
7
  @puke_variables = Vominator.get_puke_variables('test')
8
8
  Aws.config[:stub_responses] = true
@@ -165,7 +165,8 @@ describe Vominator::EC2 do
165
165
  @ec2 = Aws::EC2::Resource.new(client: @ec2_client)
166
166
  end
167
167
 
168
- describe 'get_virt_type' do
168
+ describe 'get_virt_type', fakefs: true do
169
+ before(:each) { FakeFS::FileSystem.clone(cwd, '/') }
169
170
  context 'when I pass a valid instance_type' do
170
171
  let (:instance_type) {Vominator::EC2.get_virt_type('m3.medium')}
171
172
 
@@ -188,7 +189,8 @@ describe Vominator::EC2 do
188
189
  end
189
190
  end
190
191
 
191
- describe 'get_ephemeral_dev_count' do
192
+ describe 'get_ephemeral_dev_count', fakefs: true do
193
+ before(:each) { FakeFS::FileSystem.clone(cwd, '/') }
192
194
  context 'when I pass a valid instance_type' do
193
195
  let (:ephemeral_dev_count) { Vominator::EC2.get_ephemeral_dev_count('m3.medium')}
194
196
 
@@ -211,7 +213,7 @@ describe Vominator::EC2 do
211
213
  end
212
214
  end
213
215
 
214
- describe 'get_instances' do
216
+ describe 'get_instances', fakefs: true do
215
217
  context 'when I pass a valid ec2 resource' do
216
218
  let (:instances) { Vominator::EC2.get_instances(@ec2) }
217
219
 
@@ -234,7 +236,7 @@ describe Vominator::EC2 do
234
236
  end
235
237
  end
236
238
 
237
- describe 'get_instance' do
239
+ describe 'get_instance', fakefs: true do
238
240
  context 'when I pass a valid ec2 resource and a valid instance ID' do
239
241
  let (:instance) { Vominator::EC2.get_instance(@ec2, 'i-1968d168')}
240
242
 
@@ -252,7 +254,7 @@ describe Vominator::EC2 do
252
254
  end
253
255
  end
254
256
 
255
- describe 'get_security_group_name_ids_hash' do
257
+ describe 'get_security_group_name_ids_hash', fakefs: true do
256
258
  context 'when I pass a valid resource and vpc_id' do
257
259
  let (:security_groups) { Vominator::EC2.get_security_group_name_ids_hash(@ec2, @puke_variables['vpc_id'])}
258
260
 
@@ -271,7 +273,7 @@ describe Vominator::EC2 do
271
273
  end
272
274
  end
273
275
 
274
- describe 'get_subnets' do
276
+ describe 'get_subnets', fakefs: true do
275
277
  context 'when I pass a valid resource and vpc_id' do
276
278
  let (:subnets) { Vominator::EC2.get_subnets(@ec2, @puke_variables['vpc_id'])}
277
279
 
@@ -291,7 +293,8 @@ describe Vominator::EC2 do
291
293
  end
292
294
  end
293
295
 
294
- describe 'get_ami' do
296
+ describe 'get_ami', fakefs: true do
297
+ before(:each) { FakeFS::FileSystem.clone(cwd, '/') }
295
298
  context 'when I pass a valid puke_config, HVM instance type, and linux as the os' do
296
299
  let (:ami) { Vominator::EC2.get_ami(@puke_variables, 'm3.medium', 'linux')}
297
300
 
@@ -341,7 +344,7 @@ describe Vominator::EC2 do
341
344
  end
342
345
  end
343
346
 
344
- describe 'create_subnet' do
347
+ describe 'create_subnet', fakefs: true do
345
348
  context 'when I pass a valid resource, subnet, az, and vpc_id' do
346
349
  let (:subnet) { Vominator::EC2.create_subnet(@ec2, '10.203.21.0/24', 'us-east-1a', @puke_variables['vpc_id'])}
347
350
 
@@ -358,7 +361,7 @@ describe Vominator::EC2 do
358
361
  end
359
362
  end
360
363
 
361
- describe 'get_termination_protection' do
364
+ describe 'get_termination_protection', fakefs: true do
362
365
  context 'when I pass a valid client, instance_id and the instance is protected from termination' do
363
366
  let (:termination_protection) { Vominator::EC2.get_termination_protection(@ec2_client, 'i-1968d168')}
364
367
 
@@ -388,7 +391,7 @@ describe Vominator::EC2 do
388
391
  end
389
392
  end
390
393
 
391
- describe 'set_termination_protection' do
394
+ describe 'set_termination_protection', fakefs: true do
392
395
  context 'When I pass a valid client, instance_id and set the instance protection to true' do
393
396
  let (:termination_protection) { Vominator::EC2.set_termination_protection(@ec2_client, 'i-1968d168', true)}
394
397
 
@@ -417,7 +420,7 @@ describe Vominator::EC2 do
417
420
  xit 'do something'
418
421
  end
419
422
  end
420
- describe 'get_instance_state' do
423
+ describe 'get_instance_state', fakefs: true do
421
424
  context 'when I pass a valid resource and instance_id' do
422
425
  let (:instance_state) { Vominator::EC2.get_instance_state(@ec2, 'i-1968d168') }
423
426
 
@@ -455,7 +458,7 @@ describe Vominator::EC2 do
455
458
  end
456
459
  end
457
460
 
458
- describe 'set_instance_type' do
461
+ describe 'set_instance_type', fakefs: true do
459
462
  context 'when I pass a valid resource, instance_id, and instance_type' do
460
463
  let (:instance_type) { Vominator::EC2.set_instance_type(@ec2, 'i-1968d168', 'm3.large', 'sample-api-1.test.example.com')}
461
464
 
@@ -481,7 +484,7 @@ describe Vominator::EC2 do
481
484
  end
482
485
  end
483
486
 
484
- describe 'assign_public_ip' do
487
+ describe 'assign_public_ip', fakefs: true do
485
488
  context 'when I pass a valid resource and instance_id' do
486
489
  let (:public_ip) { Vominator::EC2.assign_public_ip(@ec2_client, 'i-1968d168' )}
487
490
 
@@ -499,7 +502,7 @@ describe Vominator::EC2 do
499
502
  end
500
503
  end
501
504
 
502
- describe 'remove_public_ip' do
505
+ describe 'remove_public_ip', fakefs: true do
503
506
  context 'when I pass a valid resource and instance_id' do
504
507
  let (:removed_public_ip) { Vominator::EC2.remove_public_ip(@ec2_client, 'i-1968d168' )}
505
508
 
@@ -517,7 +520,7 @@ describe Vominator::EC2 do
517
520
  end
518
521
  end
519
522
 
520
- describe 'set_source_dest_check' do
523
+ describe 'set_source_dest_check', fakefs: true do
521
524
  context 'when I pass a valid resource, instance_id and enable source destination checking' do
522
525
  let (:source_dest_check) { Vominator::EC2.set_source_dest_check(@ec2, 'i-1968d168', true )}
523
526
 
@@ -564,7 +567,7 @@ describe Vominator::EC2 do
564
567
  end
565
568
  end
566
569
 
567
- describe 'set_ebs_optimized' do
570
+ describe 'set_ebs_optimized', fakefs: true do
568
571
  context 'when I pass a valid resource, instance_id and enable EBS optimization' do
569
572
  let (:ebs_optimized) { Vominator::EC2.set_ebs_optimized(@ec2, 'i-1968d168', true, 'sample-api-1.example.com' )}
570
573
 
@@ -612,7 +615,7 @@ describe Vominator::EC2 do
612
615
  end
613
616
  end
614
617
 
615
- describe 'set_security_groups' do
618
+ describe 'set_security_groups', fakefs: true do
616
619
  context 'when I pass a valid resource, instance_id, security_groups, and vpc_security_groups' do
617
620
  vpc_security_groups = Hash.new
618
621
  vpc_security_groups['test-sample-api-server'] = 'sg-11111'
@@ -659,7 +662,7 @@ describe Vominator::EC2 do
659
662
  end
660
663
  end
661
664
 
662
- describe 'get_ebs_volume' do
665
+ describe 'get_ebs_volume', fakefs: true do
663
666
  context 'when I pass a valid resource and ebs_volume_id' do
664
667
  let (:volume) { Vominator::EC2.get_ebs_volume(@ec2, 'vol-11111') }
665
668
 
@@ -677,7 +680,7 @@ describe Vominator::EC2 do
677
680
 
678
681
  end
679
682
 
680
- describe 'get_instance_ebs_volumes' do
683
+ describe 'get_instance_ebs_volumes', fakefs: true do
681
684
  context 'when I pass a valid resource and instance id' do
682
685
  let (:volumes) { Vominator::EC2.get_instance_ebs_volumes(@ec2, 'i-1968d168') }
683
686
 
@@ -695,7 +698,7 @@ describe Vominator::EC2 do
695
698
  end
696
699
  end
697
700
 
698
- describe 'add_ebs_volume' do
701
+ describe 'add_ebs_volume', fakefs: true do
699
702
  context 'when I pass a valid resource, instance_id, volume_type, volume_size, and mount_point)' do
700
703
  let (:volume) { Vominator::EC2.add_ebs_volume(@ec2, 'i-1968d168', 'magnetic', 100, 'sdf')}
701
704
 
@@ -713,7 +716,8 @@ describe Vominator::EC2 do
713
716
  end
714
717
  end
715
718
 
716
- describe 'get_ephemeral_devices' do
719
+ describe 'get_ephemeral_devices', fakefs: true do
720
+ before(:each) { FakeFS::FileSystem.clone(cwd, '/') }
717
721
  context 'when I pass a valid instance type' do
718
722
  let (:devices) { Vominator::EC2.get_ephemeral_devices('m3.medium') }
719
723
 
@@ -731,7 +735,7 @@ describe Vominator::EC2 do
731
735
  end
732
736
  end
733
737
 
734
- describe 'create_instance' do
738
+ describe 'create_instance', fakefs: true do
735
739
  context 'when I pass a valid resource, hostname, environment, ami, subnet id, instance type, keypair name, private ip, az and security groups' do
736
740
  let (:instance) { Vominator::EC2.create_instance(@ec2, 'sample-api-1','test','ami-111111','sub-11111','m3.medium','test@example.com','10.203.41.21','us-east-1c',['sg-11111'],'',false,nil)}
737
741
 
@@ -759,7 +763,7 @@ describe Vominator::EC2 do
759
763
  end
760
764
  end
761
765
 
762
- describe 'terminate_instance' do
766
+ describe 'terminate_instance', fakefs: true do
763
767
  context 'when I pass a valid resource and instance id' do
764
768
  let (:instance) { Vominator::EC2.terminate_instance(@ec2, 'i-1968d168')}
765
769
 
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+ require 'vominator/ec2info'
3
+ require 'pry'
4
+
5
+ describe Vominator::EC2Info, fakefs: true do
6
+ describe 'EC2Info' do
7
+ cwd = Dir.pwd()
8
+ before(:each) { FakeFS::FileSystem.clone(cwd, '/') }
9
+
10
+ let (:file) { 'test/instances.json' }
11
+ let (:ec2info) { Vominator::EC2Info::InstanceInfo.new }
12
+ context 'when I do not pass a file to new' do
13
+ it 'creates the file from the http request' do
14
+ expect { ec2info }.to_not raise_error
15
+ expect(File.exist?(file)).to be
16
+ end
17
+ end
18
+
19
+ context 'when I pass a file to new' do
20
+ let (:file) { 'test/myinstances.json' }
21
+ let (:ec2info) { Vominator::EC2Info::InstanceInfo.new(file) }
22
+ it 'creates the file from the http request' do
23
+ expect { ec2info }.to_not raise_error
24
+ expect(File.exist?(file)).to be
25
+ end
26
+ end
27
+
28
+ context 'when I get an instance type' do
29
+ let (:itype) { ec2info.get_instance('t2.nano') }
30
+ it 'returns the instance info' do
31
+ expect { itype }.to_not raise_error
32
+ expect(itype).to be_a(Vominator::EC2Info::Instance)
33
+ expect(itype.instance_type).to eq('t2.nano')
34
+ expect(itype.memory).to eq(0.5)
35
+ expect(itype.ephemeral_devices).to eq(0)
36
+ expect(itype.virtualization_type).to eq('hvm')
37
+ end
38
+ end
39
+
40
+ context 'when I get an instance type with ephemeral_devices' do
41
+ let (:itype) { ec2info.get_instance('m3.medium') }
42
+ it 'returns the correct device count' do
43
+ expect(itype.ephemeral_devices).to eq(1)
44
+ end
45
+ end
46
+
47
+ context 'when I get an instance type with unknown virtualization is current gen' do
48
+ let (:itype) { ec2info.get_instance('t2.micro') }
49
+ it 'returns the correct virtualization_type' do
50
+ expect(itype.virtualization_type).to eq('hvm')
51
+ end
52
+ end
53
+
54
+ context 'when I get an instance type with unknown virtualization is previous gen' do
55
+ let (:itype) { ec2info.get_instance('t1.micro') }
56
+ it 'returns the correct virtualization_type' do
57
+ expect(itype.virtualization_type).to eq('paravirtual')
58
+ end
59
+ end
60
+
61
+ context 'when I get an cc2 instance type' do
62
+ let (:itype) { ec2info.get_instance('cc2.8xlarge') }
63
+ it 'returns the correct virtualization_type' do
64
+ expect(itype.virtualization_type).to eq('hvm')
65
+ end
66
+ end
67
+
68
+ context 'when I get an hi1 instance type' do
69
+ let (:itype) { ec2info.get_instance('hi1.4xlarge') }
70
+ it 'returns the correct virtualization_type' do
71
+ expect(itype.virtualization_type).to eq('hvm')
72
+ end
73
+ end
74
+
75
+ context 'when I get an hs1 instance type' do
76
+ let (:itype) { ec2info.get_instance('hs1.8xlarge') }
77
+ it 'returns the correct virtualization_type' do
78
+ expect(itype.virtualization_type).to eq('hvm')
79
+ end
80
+ end
81
+
82
+ context 'when I get an cr1 instance type' do
83
+ let (:itype) { ec2info.get_instance('cr1.8xlarge') }
84
+ it 'returns the correct virtualization_type' do
85
+ expect(itype.virtualization_type).to eq('hvm')
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+
92
+
93
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'fakefs/spec_helpers'
1
2
  Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each {|file| require_relative file}
2
3
 
3
4
  unless ENV['VOMINATOR_CONFIG']
@@ -29,6 +30,7 @@ end
29
30
  #
30
31
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
31
32
  RSpec.configure do |config|
33
+ config.include FakeFS::SpecHelpers, fakefs: true
32
34
  # rspec-expectations config goes here. You can use an alternate
33
35
  # assertion/expectation library such as wrong or the stdlib/minitest
34
36
  # assertions if you prefer.
data/test/vominator.yaml CHANGED
@@ -5,3 +5,4 @@ configuration_path: test/puke
5
5
  key_pair_name: ci@example.com
6
6
  chef_client_key: ci.pem
7
7
  chef_client_name: ci
8
+ instances_file: test/instances.json
data/vominator.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'rspec_junit_formatter'
32
32
  spec.add_development_dependency 'simplecov'
33
33
  spec.add_development_dependency 'pry'
34
+ spec.add_development_dependency 'fakefs'
34
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vominator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Kelly
@@ -166,6 +166,20 @@ dependencies:
166
166
  - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: fakefs
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
169
183
  description: Leverage the power of CLI with your favorite revision control system
170
184
  to create and manage AWS infrastructure.
171
185
  email:
@@ -192,6 +206,7 @@ files:
192
206
  - lib/vominator/aws.rb
193
207
  - lib/vominator/constants.rb
194
208
  - lib/vominator/ec2.rb
209
+ - lib/vominator/ec2info.rb
195
210
  - lib/vominator/instances.rb
196
211
  - lib/vominator/route53.rb
197
212
  - lib/vominator/security_groups.rb
@@ -204,6 +219,7 @@ files:
204
219
  - spec/lib/instances_spec.rb
205
220
  - spec/lib/vominator/aws_spec.rb
206
221
  - spec/lib/vominator/ec2_spec.rb
222
+ - spec/lib/vominator/ec2info_spec.rb
207
223
  - spec/lib/vominator/instances_spec.rb
208
224
  - spec/lib/vominator/route53_spec.rb
209
225
  - spec/lib/vominator/ssm_spec.rb
@@ -245,6 +261,7 @@ test_files:
245
261
  - spec/lib/instances_spec.rb
246
262
  - spec/lib/vominator/aws_spec.rb
247
263
  - spec/lib/vominator/ec2_spec.rb
264
+ - spec/lib/vominator/ec2info_spec.rb
248
265
  - spec/lib/vominator/instances_spec.rb
249
266
  - spec/lib/vominator/route53_spec.rb
250
267
  - spec/lib/vominator/ssm_spec.rb