aws-ec2-instance_types 1.1.0 → 1.3.0

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: 9adc7d959d4a03ad1a71178f00c994a35054175a
4
- data.tar.gz: 8b15333f39d3ce202421acd32ecf768b8c28e38f
3
+ metadata.gz: caa316960c670b445c5ad37dc905ec031a34ee41
4
+ data.tar.gz: 77e89cbd893fa0cb3f93982c8d6adf37c5e50351
5
5
  SHA512:
6
- metadata.gz: a403ef4e5b35df096b10904cd877b877883beb8658bdd71f7f79cd82c40baeee646b49e92d3727034bf4bc5c23950422ef41feb50edd96315fa76c58df676e9a
7
- data.tar.gz: 73c8b992a8f47e0f482e9fc3986afc35bae45da90ffb0a37b86c9fc019cdbbcfa7c8e77b3efd0e248b323ccc4c1f92afb79b9b31931f387f4db397b967520b1f
6
+ metadata.gz: bc073cd502e92bf02f75e36b332d25c9728a75c4633d682d39e88e02944a5c592ef0378b97b6f849a6cafcb8ee3de6681717f48cb3a0b7cdf43bcc84d7558578
7
+ data.tar.gz: 50d0266df247bb3e6c1be7a8e87712b06a10052b56b58321a61f908ec47b8bdd85ee4088d88718ce524f3a7ba92b8ebf380df0d509274d9a3b041692dc74c01b
@@ -1,10 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- require File.expand_path('../lib/aws/ec2/instance_types/version', __FILE__)
3
+ require File.expand_path('../lib/dldinternet/aws/ec2/instance_types/version', __FILE__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'aws-ec2-instance_types'
7
- gem.version = Aws::Ec2::InstanceTypes::VERSION
7
+ gem.version = DLDInternet::AWS::EC2::Instance_Types::VERSION
8
8
  gem.summary =
9
9
  gem.description = %q{Retrieve an up to date list of valid AWS EC2 Instance Types directly from Amazon Web Services official site.}
10
10
  gem.license = 'Apachev2'
@@ -21,9 +21,14 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency 'rake', '~> 0.8'
22
22
  gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
23
23
 
24
+ gem.add_runtime_dependency('thor', ['>= 0.19.1'])
24
25
  gem.add_runtime_dependency(%q<mechanize>, ['>= 2.7.2'])
25
26
  gem.add_runtime_dependency(%q<nokogiri>, ['>= 1.5.0'])
26
- gem.add_runtime_dependency(%q<awesome_print>, ['>= 1.2.0'])
27
- gem.add_runtime_dependency(%q<colorize>, ['>= 0.7.2'])
27
+ gem.add_dependency 'awesome_print', '> 0'
28
+ gem.add_dependency 'inifile', '> 0'
29
+ gem.add_dependency 'colorize', '>= 0'
30
+ gem.add_dependency 'dldinternet-mixlib-logging', '>= 0.4.0'
31
+ gem.add_dependency 'psych'
32
+ gem.add_dependency 'json'
28
33
 
29
34
  end
@@ -3,20 +3,14 @@
3
3
  # Adjust lib path
4
4
  _lib=File.expand_path(File.dirname(__FILE__) + '/../lib')
5
5
  $:.unshift(_lib) unless $:.include?(_lib)
6
+ require 'dldinternet/aws/ec2/instance_types/cli'
6
7
 
7
- require "dldinternet/aws/ec2"
8
- include DLDInternet::AWS::EC2
9
-
10
- require 'mechanize'
11
- mechanize = Mechanize.new
12
- mechanize.open_timeout = 5
13
- mechanize.read_timeout = 10
14
-
15
- require 'awesome_print'
16
- require 'colorize'
17
-
18
- begin
19
- puts getInstanceTypes(:mechanize => mechanize).ai
20
- rescue Timeout::Error => e
21
- puts "Unable to retrieve instance type details in a reasonable time (#{mechanize.open_timeout}s). Giving up ...".light_red
8
+ # =====================================================================================================================
9
+ rc = DLDInternet::AWS::EC2::Instance_Types::Cli.start(ARGV)
10
+ if rc.is_a?(Fixnum)
11
+ exit rc
12
+ else
13
+ puts rc.ai
14
+ exit 0
22
15
  end
16
+
@@ -1,124 +1,17 @@
1
1
  module DLDInternet
2
2
  module AWS
3
3
  module EC2
4
- class Error < StandardError ; end
5
- # HEADINGS = [
6
- # :instance_family, # [0]
7
- # :instance_type, # [1]
8
- # :processor_arch, # [2]
9
- # :vCPU, # [3]
10
- # :ECU, # [4]
11
- # :memory, # [5]
12
- # :instance_storage, # [6]
13
- # :EBS_optimized_available, # [7]
14
- # :network_performance # [8]
15
- # ]
16
- #'Instance Type','vCPU','Memory (GiB)',' Storage (GB)','Networking Performance','Physical Processor','Clock Speed (GHz)','Intel® AES-NI','Intel® AVX†','Intel® Turbo','EBS OPT','Enhanced Networking'
17
- HEADINGS_CPU = [
18
- :instance_type, # [0]
19
- :vCPU, # [1]
20
- :memory, # [2]
21
- :instance_storage, # [3]
22
- :networking_performance, # [4]
23
- :physical_processor, # [5]
24
- :clock_speed, # [6]
25
- :Intel_AES_NI, # [7]
26
- :Intel_AVX, # [8]
27
- :Intel_Turbo, # [9]
28
- :EBS_OPT, # [10]
29
- :enhanced_networking # [11]
30
- ]
31
- DEBUG = true
32
- attr_reader :instance_types
4
+ module Instance_Types
33
5
 
34
- # ---------------------------------------------------------------------------------------------------------------
35
- def getInstanceTypes(options={})
36
- unless @instance_types
37
- @instance_types = {}
38
- require "mechanize"
39
- mechanize = options[:mechanize]
40
- unless mechanize
41
- mechanize = Mechanize.new
42
- mechanize.user_agent_alias = 'Mac Safari' # Pretend to use a Mac
43
- end
44
- url = options[:url] || 'http://aws.amazon.com/ec2/instance-types/instance-details/'
45
-
46
- page = mechanize.get(url)
47
-
48
- require 'nokogiri'
49
-
50
- nk = Nokogiri::HTML(page.body)
51
- # noinspection RubyAssignmentExpressionInConditionalInspection
52
- if div = find_div(nk, %r'^<div\s+class="nine columns content-with-nav')
53
- # noinspection RubyAssignmentExpressionInConditionalInspection
54
- if div = find_div(div, %r'^<div\s+class="content parsys')
55
- divs = div.css('div').to_a
56
- itm = nil
57
- idx = 0
58
- divs.each do |d|
59
- as = d.css('div div h2 a')
60
- as.each do |a|
61
- # puts "'#{a.text}'"
62
- if a.text == ' Instance Types Matrix '
63
- itm = d
64
- break
65
- end
66
- end
67
- break if itm
68
- idx += 1
69
- end
70
- itm = divs[idx+1+2]
71
- table = itm.css('div table').first
72
- # puts "#{idx}: #{table.to_s}"
73
- @instance_types = scrapeTable(HEADINGS_CPU, table)
74
- end
75
- end
6
+ class << self
7
+ require 'dldinternet/aws/ec2/instance_types/mixins/ec2_instance_types'
8
+ include DLDInternet::AWS::EC2::Instance_Types::MixIns::EC2_Instance_Types
76
9
  end
77
- @instance_types
78
- end
79
10
 
80
- def find_div(nk,regex)
81
- ret = nil
82
- divs = nk.search('div')
83
- if divs.count > 0
84
- nine = divs.select { |div| div.to_s.match regex }
85
- if nine.count == 1
86
- nine = nine.shift
87
- ret = nine
88
- end
89
- end
90
- ret
91
11
  end
92
12
 
93
- # ---------------------------------------------------------------------------------------------------------------
94
- def scrapeTable(cHeadings,table)
95
- raise Error.new 'Cannot find instance type table' unless table.is_a?(Nokogiri::XML::Element)
96
- rows = table.search('tr')[0..-1]
97
- head = rows.shift
98
-
99
- cols = head.search('td').collect { |td|
100
- text = td.text.to_s
101
- text = text.gsub(%r/(\r?\n)+/, ' ').strip
102
- CGI.unescapeHTML(text)
103
- }
104
- instance_types = {
105
- :headings => {},
106
- :details => []
107
- }
108
- (0..cols.size-1).map { |i| instance_types[:headings][cHeadings[i]] = cols[i] }
109
-
110
- rows.each do |row|
111
-
112
- cells = row.search('td').collect { |td|
113
- CGI.unescapeHTML(td.text.to_s.gsub(%r/(\r?\n)+/, ' ').strip.gsub('32-bit or64-bit', '32-bit or 64-bit'))
114
- }
115
- raise StandardError.new "This row does not have the same number of cells as the table header: #{row.text.to_s.strip}" unless cells.size == cols.size
116
- instance = {}
117
- (0..cells.size-1).map { |i| instance[cHeadings[i]] = cells[i] }
118
- instance_types[:details] << instance
119
- end
120
- instance_types
121
- end
122
13
  end
14
+
123
15
  end
124
- end
16
+
17
+ end
@@ -0,0 +1,72 @@
1
+ require 'thor'
2
+ require 'awesome_print'
3
+ require 'colorize'
4
+ require 'dldinternet/aws/ec2/instance_types/version'
5
+ require 'dldinternet/aws/ec2/instance_types/error'
6
+ require 'dldinternet/aws/ec2/instance_types/scraper'
7
+ require 'dldinternet/aws/ec2/instance_types/cli'
8
+ require 'dldinternet/aws/ec2/instance_types'
9
+
10
+ module DLDInternet
11
+ module AWS
12
+ module EC2
13
+ module Instance_Types
14
+ class Cli < Thor
15
+ class_option :verbose, :type => :boolean
16
+ class_option :debug, :type => :boolean
17
+ class_option :log_level, :type => :string, :banner => 'Log level ([:trace, :debug, :info, :step, :warn, :error, :fatal, :todo])'
18
+ class_option :inifile, :type => :string
19
+
20
+ no_commands do
21
+
22
+ require 'dldinternet/aws/ec2/instance_types/mixins/no_commands'
23
+ include DLDInternet::AWS::EC2::Instance_Types::MixIns::NoCommands
24
+
25
+ end
26
+
27
+ def self.start(argv = ARGV, config = {})
28
+ if argv.size == 0 or argv[0].match(%r'^--')
29
+ argv.unshift('get')
30
+ end
31
+ super(argv,config)
32
+ end
33
+
34
+ def initialize(args = [], local_options = {}, config = {})
35
+ super(args,local_options,config)
36
+ @log_level = :step
37
+ end
38
+
39
+ desc 'get', 'get instance types'
40
+ def get()
41
+ parse_options
42
+ puts 'get instance types' if options[:verbose]
43
+
44
+ puts DLDInternet::AWS::EC2::Instance_Types.getEC2_Instance_Types().ai
45
+ 0
46
+ end
47
+
48
+ desc 'load ARGS', 'load instance types'
49
+ def load(path)
50
+ parse_options
51
+ puts 'load instance types' if options[:verbose]
52
+
53
+ it = DLDInternet::AWS::EC2::Instance_Types.loadEC2_Instance_Types(path)
54
+ ap it
55
+ end
56
+
57
+ desc 'save', 'save instance types'
58
+ def save(path)
59
+ parse_options
60
+ puts 'save instance types' if options[:verbose]
61
+
62
+ it = DLDInternet::AWS::EC2::Instance_Types.getEC2_Instance_Types()
63
+ DLDInternet::AWS::EC2::Instance_Types.saveEC2_Instance_Types(path, it)
64
+ end
65
+
66
+ default_task 'get'
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
@@ -0,0 +1,9 @@
1
+ module DLDInternet
2
+ module AWS
3
+ module EC2
4
+ module Instance_Types
5
+ class Error < StandardError ; end
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,42 @@
1
+ require 'thor'
2
+ require 'awesome_print'
3
+ require 'dldinternet/aws/ec2/instance_types/scraper'
4
+ require 'colorize'
5
+ require 'json'
6
+ require 'yaml'
7
+
8
+ module DLDInternet
9
+ module AWS
10
+ module EC2
11
+ module Instance_Types
12
+ # noinspection RubyParenthesesAfterMethodCallInspection
13
+ class Get < ::Thor
14
+ no_commands do
15
+
16
+ require 'dldinternet/aws/ec2/instance_types/mixins/no_commands'
17
+ include DLDInternet::AWS::EC2::Instance_Types::MixIns::NoCommands
18
+
19
+ end
20
+
21
+ desc 'load ARGS', 'load instance types'
22
+ def load(path)
23
+ parse_options
24
+ puts 'load instance types' if options[:verbose]
25
+
26
+ it = loadEC2_Instance_Types(path)
27
+ ap it
28
+ end
29
+
30
+ desc 'save', 'save instance types'
31
+ def save(path)
32
+ parse_options
33
+ puts 'save instance types' if options[:verbose]
34
+
35
+ it = getEC2_Instance_Types()
36
+ saveEC2_Instance_Types(path, it)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,88 @@
1
+ require 'thor'
2
+ require 'awesome_print'
3
+ require 'inifile'
4
+ require 'colorize'
5
+
6
+ module DLDInternet
7
+ module AWS
8
+ module EC2
9
+ module Instance_Types
10
+ module MixIns
11
+ module EC2_Instance_Types
12
+
13
+ def getFileFormat(path)
14
+ format = case File.extname(File.basename(path)).downcase
15
+ when /json|js/
16
+ 'json'
17
+ when /yaml|yml/
18
+ 'yaml'
19
+ else
20
+ raise DLDInternet::AWS::EC2::Instance_Types::Error.new("Unsupported file type: #{path}")
21
+ end
22
+ end
23
+
24
+ def saveEC2_Instance_Types(path,it)
25
+ format = getFileFormat(path)
26
+ begin
27
+ File.open path, File::CREAT|File::TRUNC|File::RDWR, 0644 do |f|
28
+ case format
29
+ when /yaml/
30
+ f.write it.to_yaml line_width: 1024, indentation: 4, canonical: false
31
+ when /json/
32
+ f.write JSON.pretty_generate(it, { indent: "\t", space: ' '})
33
+ else
34
+ abort! "Internal: Unsupported format #{format}. Should have noticed this earlier!"
35
+ end
36
+ f.close
37
+ end
38
+ rescue
39
+ abort! "!!! Could not write file #{path}: \nException: #{$!}\nParent directory exists? #{File.directory?(File.dirname(path))}\n"
40
+ end
41
+ 0
42
+ end
43
+
44
+ def loadEC2_Instance_Types(path)
45
+ format = getFileFormat(path)
46
+ spec = File.read(path)
47
+ case format
48
+ when /json/
49
+ JSON.parse(spec)
50
+ when /yaml/
51
+ begin
52
+ YAML.load(spec)
53
+ rescue Psych::SyntaxError => e
54
+ abort! "Error in the template specification: #{e.message}\n#{spec.split(/\n/).map{|l| "#{i+=1}: #{l}"}.join("\n")}"
55
+ end
56
+ else
57
+ abort! "Unsupported file type: #{path}"
58
+ end
59
+ end
60
+
61
+ def getEC2_Instance_Types(mechanize=nil)
62
+ unless mechanize
63
+ require 'mechanize'
64
+ mechanize = ::Mechanize.new
65
+ mechanize.open_timeout = 5
66
+ mechanize.read_timeout = 10
67
+ end
68
+
69
+ scraper = DLDInternet::AWS::EC2::Instance_Types::Scraper.new()
70
+
71
+ begin
72
+ return scraper.getInstanceTypes(:mechanize => mechanize)
73
+ rescue Timeout::Error => e
74
+ puts "Unable to retrieve instance type details in a reasonable time (#{mechanize.open_timeout}s). Giving up ...".light_red
75
+ return nil
76
+ end
77
+ end
78
+
79
+ def abort!(msg)
80
+ raise DLDInternet::AWS::EC2::Instance_Types::Error.new msg
81
+ end
82
+
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,115 @@
1
+ require 'thor'
2
+ require 'awesome_print'
3
+ require 'inifile'
4
+ require 'colorize'
5
+
6
+ module DLDInternet
7
+ module AWS
8
+ module EC2
9
+ module Instance_Types
10
+
11
+ LOG_LEVELS = [:trace, :debug, :info, :step, :warn, :error, :fatal, :todo]
12
+
13
+ module MixIns
14
+ module NoCommands
15
+ require 'dldinternet/mixlib/logging'
16
+ include DLDInternet::Mixlib::Logging
17
+
18
+ def validate_options
19
+ _options = options.dup
20
+ if options[:log_level]
21
+ log_level = options[:log_level].to_sym
22
+ raise "Invalid log-level: #{log_level}" unless LOG_LEVELS.include?(log_level)
23
+ _options[:log_level] = log_level
24
+ else
25
+ _options[:log_level] ||= :step
26
+ end
27
+ @options = _options
28
+ end
29
+
30
+ def parse_options
31
+ validate_options
32
+
33
+ lcs = ::Logging::ColorScheme.new( 'compiler', :levels => {
34
+ :trace => :blue,
35
+ :debug => :cyan,
36
+ :info => :green,
37
+ :step => :green,
38
+ :warn => :yellow,
39
+ :error => :red,
40
+ :fatal => :red,
41
+ :todo => :purple,
42
+ })
43
+ scheme = lcs.scheme
44
+ scheme['trace'] = "\e[38;5;33m"
45
+ scheme['fatal'] = "\e[38;5;89m"
46
+ scheme['todo'] = "\e[38;5;55m"
47
+ lcs.scheme scheme
48
+ @config = @options.dup
49
+ @config[:log_opts] = lambda{|mlll| {
50
+ :pattern => "%#{mlll}l: %m %g\n",
51
+ :date_pattern => '%Y-%m-%d %H:%M:%S',
52
+ :color_scheme => 'compiler',
53
+ :trace => (@config[:trace].nil? ? false : @config[:trace]),
54
+ # [2014-06-30 Christo] DO NOT do this ... it needs to be a FixNum!!!!
55
+ # If you want to do ::Logging.init first then fine ... go ahead :)
56
+ # :level => @config[:log_level],
57
+ }
58
+ }
59
+ @logger = getLogger(@config)
60
+
61
+ if @options[:inifile]
62
+ @options[:inifile] = File.expand_path(@options[:inifile])
63
+ unless File.exist?(@options[:inifile])
64
+ raise "#{@options[:inifile]} not found!"
65
+ end
66
+ begin
67
+ ini = ::IniFile.load(@options[:inifile])
68
+ ini['global'].each{ |key,value|
69
+ @options[key.to_s]=value
70
+ }
71
+ def _expand(k,v,regex,rerun)
72
+ matches = v.match(regex)
73
+ if matches
74
+ var = matches[1]
75
+ if options[var]
76
+ options[k]=v.gsub(/\%\(#{var}\)/,options[var]).gsub(/\%#{var}/,options[var])
77
+ else
78
+ rerun[var] = 1
79
+ end
80
+ end
81
+ end
82
+
83
+ pending = nil
84
+ rerun = {}
85
+ begin
86
+ pending = rerun
87
+ rerun = {}
88
+ options.to_hash.each{|k,v|
89
+ if v.to_s.match(/\%/)
90
+ _expand(k,v,%r'[^\\]\%\((\w+)\)', rerun)
91
+ _expand(k,v,%r'[^\\]\%(\w+)', rerun)
92
+ end
93
+ }
94
+ # Should break out the first time that we make no progress!
95
+ end while pending != rerun
96
+ rescue ::IniFile::Error => e
97
+ # noop
98
+ rescue ::Exception => e
99
+ @logger.error "#{e.class.name} #{e.message}"
100
+ raise e
101
+ end
102
+ end
103
+
104
+ if options[:verbose]
105
+ @logger.info "Options:\n#{options.ai}"
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,129 @@
1
+ module DLDInternet
2
+ module AWS
3
+ module EC2
4
+
5
+ module Instance_Types
6
+ HEADINGS_CPU = [
7
+ :instance_type, # [0]
8
+ :vCPU, # [1]
9
+ :memory, # [2]
10
+ :instance_storage, # [3]
11
+ :networking_performance, # [4]
12
+ :physical_processor, # [5]
13
+ :clock_speed, # [6]
14
+ :Intel_AES_NI, # [7]
15
+ :Intel_AVX, # [8]
16
+ :Intel_Turbo, # [9]
17
+ :EBS_OPT, # [10]
18
+ :enhanced_networking # [11]
19
+ ]
20
+ DEBUG = true
21
+ class Scraper
22
+ attr_reader :instance_types
23
+
24
+ def initialize
25
+ @instance_types = {}
26
+ end
27
+
28
+ # ---------------------------------------------------------------------------------------------------------------
29
+ def getInstanceTypes(options={})
30
+ unless @instance_types.size > 0
31
+ mechanize = options[:mechanize]
32
+ unless mechanize
33
+ require 'mechanize'
34
+ mechanize = Mechanize.new
35
+ mechanize.user_agent_alias = 'Mac Safari' # Pretend to use a Mac
36
+ end
37
+ url = options[:url] || 'http://aws.amazon.com/ec2/instance-types/instance-details/'
38
+
39
+ page = mechanize.get(url)
40
+
41
+ require 'nokogiri'
42
+
43
+ nk = Nokogiri::HTML(page.body)
44
+ div = nk.css('div#aws-page-content')
45
+ div = nk.css('div.page-content') unless div.to_s.match %r'^<div id="'m
46
+ # noinspection RubyAssignmentExpressionInConditionalInspection
47
+ if div = find_div(div, %r'^<div\s+class="nine columns content-with-nav'm )
48
+ # noinspection RubyAssignmentExpressionInConditionalInspection
49
+ if div = find_div(div, %r'^<div\s+class="content parsys'm )
50
+ divs = div.css('div').to_a
51
+ itm = nil
52
+ idx = 0
53
+ divs.each do |d|
54
+ as = d.css('div div h2 a')
55
+ as.each do |a|
56
+ # puts "'#{a.text}'"
57
+ if a.text.match %r'\s*Instance Types Matrix\s*'
58
+ itm = d
59
+ break
60
+ end
61
+ end
62
+ break if itm
63
+ idx += 1
64
+ end
65
+ if idx < divs.count
66
+ divs = divs[idx..-1]
67
+ table = nil
68
+ divs.each do |d|
69
+ table = d.css('div.aws-table table')
70
+ break if table.to_s.match(%r'^<table'i)
71
+ end
72
+
73
+ @instance_types = scrapeTable(HEADINGS_CPU, table) if table
74
+ end
75
+ end
76
+ end
77
+ end
78
+ @instance_types
79
+ end
80
+
81
+ def find_div(nk,regex)
82
+ ret = nil
83
+ divs = nk.search('div').to_a
84
+ if divs.count > 0
85
+ nine = divs.select{ |div|
86
+ div.to_s.gsub(%r'\n',' ').match(regex)
87
+ }
88
+ if nine.count >= 1
89
+ nine = nine.shift
90
+ ret = nine
91
+ end
92
+ end
93
+ ret
94
+ end
95
+
96
+ # ---------------------------------------------------------------------------------------------------------------
97
+ def scrapeTable(cHeadings,table)
98
+ raise Error.new 'Cannot find instance type table' unless (table.is_a?(Nokogiri::XML::Element) or table.is_a?(Nokogiri::XML::NodeSet))
99
+ rows = table.search('tr')[0..-1].to_a
100
+ head = rows.shift
101
+
102
+ cols = head.search('td').collect { |td|
103
+ text = td.text.to_s
104
+ text = text.gsub(%r/(\r?\n)+/, ' ').strip
105
+ CGI.unescapeHTML(text)
106
+ }
107
+ instance_types = {
108
+ :headings => {},
109
+ :details => []
110
+ }
111
+ (0..cols.size-1).map { |i| instance_types[:headings][cHeadings[i]] = cols[i] }
112
+
113
+ rows.each do |row|
114
+
115
+ cells = row.search('td').collect { |td|
116
+ CGI.unescapeHTML(td.text.to_s.gsub(%r/(\r?\n)+/, ' ').strip.gsub('32-bit or64-bit', '32-bit or 64-bit'))
117
+ }
118
+ raise StandardError.new "This row does not have the same number of cells as the table header: #{row.text.to_s.strip}" unless cells.size == cols.size
119
+ instance = {}
120
+ (0..cells.size-1).map { |i| instance[cHeadings[i]] = cells[i] }
121
+ instance_types[:details] << instance
122
+ end
123
+ instance_types
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,10 @@
1
+ module DLDInternet
2
+ module AWS
3
+ module EC2
4
+ module Instance_Types
5
+ # aws-ec2-instance_types version
6
+ VERSION = '1.3.0'
7
+ end
8
+ end
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-ec2-instance_types
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christo De Lange
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-19 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.19.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.19.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: mechanize
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -82,32 +96,88 @@ dependencies:
82
96
  version: 1.5.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: awesome_print
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: inifile
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: colorize
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
129
  - - ">="
88
130
  - !ruby/object:Gem::Version
89
- version: 1.2.0
131
+ version: '0'
90
132
  type: :runtime
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
136
  - - ">="
95
137
  - !ruby/object:Gem::Version
96
- version: 1.2.0
138
+ version: '0'
97
139
  - !ruby/object:Gem::Dependency
98
- name: colorize
140
+ name: dldinternet-mixlib-logging
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 0.4.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 0.4.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: psych
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: json
99
169
  requirement: !ruby/object:Gem::Requirement
100
170
  requirements:
101
171
  - - ">="
102
172
  - !ruby/object:Gem::Version
103
- version: 0.7.2
173
+ version: '0'
104
174
  type: :runtime
105
175
  prerelease: false
106
176
  version_requirements: !ruby/object:Gem::Requirement
107
177
  requirements:
108
178
  - - ">="
109
179
  - !ruby/object:Gem::Version
110
- version: 0.7.2
180
+ version: '0'
111
181
  description: Retrieve an up to date list of valid AWS EC2 Instance Types directly
112
182
  from Amazon Web Services official site.
113
183
  email: rubygems@dldinternet.com
@@ -135,10 +205,15 @@ files:
135
205
  - features/step_definitions/.gitkeep
136
206
  - features/step_definitions/aws-ec2-instance_types_steps.rb
137
207
  - features/support/env.rb
138
- - lib/aws/ec2/instance_types.rb
139
- - lib/aws/ec2/instance_types/version.rb
140
208
  - lib/dldinternet/aws/ec2.rb
141
209
  - lib/dldinternet/aws/ec2/instance_types.rb
210
+ - lib/dldinternet/aws/ec2/instance_types/cli.rb
211
+ - lib/dldinternet/aws/ec2/instance_types/error.rb
212
+ - lib/dldinternet/aws/ec2/instance_types/get.rb
213
+ - lib/dldinternet/aws/ec2/instance_types/mixins/ec2_instance_types.rb
214
+ - lib/dldinternet/aws/ec2/instance_types/mixins/no_commands.rb
215
+ - lib/dldinternet/aws/ec2/instance_types/scraper.rb
216
+ - lib/dldinternet/aws/ec2/instance_types/version.rb
142
217
  - test/helper.rb
143
218
  - test/test_aws-ec2-instance_types.rb
144
219
  homepage: https://rubygems.org/gems/aws-ec2-instance_types
@@ -1 +0,0 @@
1
- require 'aws/ec2/instance_types/version'
@@ -1,8 +0,0 @@
1
- module Aws
2
- module Ec2
3
- module InstanceTypes
4
- # aws-ec2-instance_types version
5
- VERSION = '1.1.0'
6
- end
7
- end
8
- end