aws-ec2-instance_types 1.1.0 → 1.3.0

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: 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