vominator 0.0.1 → 0.0.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 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