amazon-pricing 0.1.48 → 0.1.49

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- amazon-pricing (0.1.36)
4
+ amazon-pricing (0.1.49)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/Rakefile CHANGED
@@ -62,7 +62,7 @@ task :default => [:test]
62
62
  def print_ec2_table(pricing)
63
63
  line = "Region,Instance Type,API Name,Memory (MB),Disk (GB),Compute Units,Virtual Cores,Disk Type,OD Linux PPH,OD Windows PPH,OD RHEL PPH,OD SLES PPH,OD MsWinSQL PPH,OD MsWinSQLWeb PPH,"
64
64
  [:year1, :year3].each do |term|
65
- [:light, :medium, :heavy].each do |res_type|
65
+ [:light, :medium, :heavy, :allupfront, :partialupfront, :noupfront].each do |res_type|
66
66
  [:linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb].each do |os|
67
67
  line += "#{term} #{res_type} #{os} Prepay,#{term} #{res_type} #{os} PPH,"
68
68
  end
@@ -76,7 +76,7 @@ def print_ec2_table(pricing)
76
76
  line += "#{t.price_per_hour(os, :ondemand)},"
77
77
  end
78
78
  [:year1, :year3].each do |term|
79
- [:light, :medium, :heavy].each do |res_type|
79
+ [:light, :medium, :heavy, :allupfront, :partialupfront, :noupfront].each do |res_type|
80
80
  [:linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb].each do |os|
81
81
  line += "#{t.prepay(os, res_type, term)},#{t.price_per_hour(os, res_type, term)},"
82
82
  end
data/lib/.DS_Store ADDED
Binary file
@@ -9,3 +9,8 @@ require 'aws-price-list'
9
9
  require 'ec2-price-list'
10
10
  require 'gov-cloud-price-list'
11
11
  require 'rds-price-list'
12
+
13
+ require 'logger'
14
+ logger = Logger.new(STDERR)
15
+ logger.level = Logger::WARN
16
+
@@ -13,8 +13,10 @@ module AwsPricing
13
13
  attr_accessor :instance_type, :name,
14
14
  :ondemand_price_per_hour, :light_price_per_hour_1_year, :medium_price_per_hour_1_year, :heavy_price_per_hour_1_year,
15
15
  :light_price_per_hour_3_year, :medium_price_per_hour_3_year, :heavy_price_per_hour_3_year,
16
- :light_prepay_1_year, :light_prepay_3_year, :medium_prepay_1_year, :medium_prepay_3_year, :heavy_prepay_1_year, :heavy_prepay_3_year
17
-
16
+ :light_prepay_1_year, :light_prepay_3_year, :medium_prepay_1_year, :medium_prepay_3_year, :heavy_prepay_1_year, :heavy_prepay_3_year,
17
+ :allupfront_price_per_hour_1_year, :allupfront_prepay_1_year, :allupfront_price_per_hour_3_year, :allupfront_prepay_3_year,
18
+ :partialupfront_price_per_hour_1_year, :partialupfront_prepay_1_year, :partialupfront_price_per_hour_3_year, :partialupfront_prepay_3_year,
19
+ :noupfront_price_per_hour_1_year, :noupfront_prepay_1_year, :noupfront_price_per_hour_3_year, :noupfront_prepay_3_year
18
20
 
19
21
  def initialize(instance_type=nil, name=nil)
20
22
  @instance_type = instance_type
@@ -51,11 +53,29 @@ module AwsPricing
51
53
  elsif term == :year3
52
54
  @heavy_prepay_3_year
53
55
  end
56
+ when :allupfront
57
+ if term == :year1
58
+ @allupfront_prepay_1_year
59
+ elsif term == :year3
60
+ @allupfront_prepay_3_year
61
+ end
62
+ when :partialupfront
63
+ if term == :year1
64
+ @partialupfront_prepay_1_year
65
+ elsif term == :year3
66
+ @partialupfront_prepay_3_year
67
+ end
68
+ when :noupfront
69
+ if term == :year1
70
+ @noupfront_prepay_1_year
71
+ elsif term == :year3
72
+ @noupfront_prepay_3_year
73
+ end
54
74
  end
55
75
  end
56
76
 
57
77
  # type_of_instance = :ondemand, :light, :medium, :heavy
58
- # term = :year_1, :year_3, nil
78
+ # term = :year1, :year3, nil
59
79
  def set_prepay(type_of_instance, term, price)
60
80
  case type_of_instance
61
81
  when :light
@@ -76,11 +96,31 @@ module AwsPricing
76
96
  elsif term == :year3
77
97
  @heavy_prepay_3_year = price
78
98
  end
99
+ when :allupfront
100
+ if term == :year1
101
+ @allupfront_prepay_1_year = price
102
+ elsif term == :year3
103
+ @allupfront_prepay_3_year = price
104
+ end
105
+ when :partialupfront
106
+ if term == :year1
107
+ @partialupfront_prepay_1_year = price
108
+ elsif term == :year3
109
+ @partialupfront_prepay_3_year = price
110
+ end
111
+ when :noupfront
112
+ if term == :year1
113
+ @noupfront_prepay_1_year = price
114
+ elsif term == :year3
115
+ @noupfront_prepay_3_year = price
116
+ end
117
+ else
118
+ raise "Unable to set prepay for #{type_of_instance} : #{term} to #{price}"
79
119
  end
80
120
  end
81
121
 
82
122
  # type_of_instance = :ondemand, :light, :medium, :heavy
83
- # term = :year_1, :year_3, nil
123
+ # term = :year1, :year3, nil
84
124
  def price_per_hour(type_of_instance = :ondemand, term = nil)
85
125
  case type_of_instance
86
126
  when :ondemand
@@ -103,6 +143,24 @@ module AwsPricing
103
143
  elsif term == :year3
104
144
  @heavy_price_per_hour_3_year
105
145
  end
146
+ when :allupfront
147
+ if term == :year1
148
+ @allupfront_price_per_hour_1_year
149
+ elsif term == :year3
150
+ @allupfront_price_per_hour_3_year
151
+ end
152
+ when :partialupfront
153
+ if term == :year1
154
+ @partialupfront_price_per_hour_1_year
155
+ elsif term == :year3
156
+ @partialupfront_price_per_hour_3_year
157
+ end
158
+ when :noupfront
159
+ if term == :year1
160
+ @noupfront_price_per_hour_1_year
161
+ elsif term == :year3
162
+ @noupfront_price_per_hour_3_year
163
+ end
106
164
  end
107
165
  end
108
166
 
@@ -130,6 +188,24 @@ module AwsPricing
130
188
  elsif term == :year3
131
189
  @heavy_price_per_hour_3_year = price_per_hour
132
190
  end
191
+ when :allupfront
192
+ if term == :year1
193
+ @allupfront_price_per_hour_1_year = price_per_hour
194
+ elsif term == :year3
195
+ @allupfront_price_per_hour_3_year = price_per_hour
196
+ end
197
+ when :partialupfront
198
+ if term == :year1
199
+ @partialupfront_price_per_hour_1_year = price_per_hour
200
+ elsif term == :year3
201
+ @partialupfront_price_per_hour_3_year = price_per_hour
202
+ end
203
+ when :noupfront
204
+ if term == :year1
205
+ @noupfront_price_per_hour_1_year = price_per_hour
206
+ elsif term == :year3
207
+ @noupfront_price_per_hour_3_year = price_per_hour
208
+ end
133
209
  end
134
210
  end
135
211
 
@@ -17,6 +17,29 @@ module AwsPricing
17
17
  os.available?(type_of_instance)
18
18
  end
19
19
 
20
+ # operating_system = :linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb
21
+ # type_of_instance = :ondemand, :light, :medium, :heavy, :allupfront, partialupfront, :noupfront
22
+ # term = nil (on demand), yrTerm1, yrTerm3
23
+ def update_pricing_new(operating_system, type_of_instance, price, term = nil, is_prepay = false)
24
+ os = get_category_type(operating_system)
25
+ if os.nil?
26
+ os = OperatingSystem.new(self, operating_system)
27
+ @category_types[operating_system] = os
28
+ end
29
+
30
+ if type_of_instance == :ondemand
31
+ os.set_price_per_hour(type_of_instance, nil, price)
32
+ else
33
+ years = :year1 if term == "yrTerm1"
34
+ years = :year3 if term == "yrTerm3"
35
+ if is_prepay
36
+ os.set_prepay(type_of_instance, years, price)
37
+ else
38
+ os.set_price_per_hour(type_of_instance, years, price)
39
+ end
40
+ end
41
+ end
42
+
20
43
  # operating_system = :linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb
21
44
  # type_of_instance = :ondemand, :light, :medium, :heavy
22
45
  def update_pricing(operating_system, type_of_instance, json)
@@ -93,24 +93,26 @@ module AwsPricing
93
93
 
94
94
  def self.populate_lookups
95
95
  # We use Linux on-demand to populate the lookup tables with the basic lookup information
96
- res = AwsPricing::PriceList.fetch_url("http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js")
97
- res['config']['regions'].each do |reg|
98
- reg['instanceTypes'].each do |type|
99
- items = type['sizes']
100
- items = [type] if items.nil?
101
- items.each do |size|
102
- begin
103
- api_name = size["size"]
104
- @@Memory_Lookup[api_name] = size["memoryGiB"].to_f * 1000
105
- @@Compute_Units_Lookup[api_name] = size["ECU"].to_i
106
- @@Virtual_Cores_Lookup[api_name] = size["vCPU"].to_i
107
- rescue UnknownTypeError
108
- $stderr.puts "WARNING: encountered #{$!.message}"
96
+ ["http://a0.awsstatic.com/pricing/1/ec2/linux-od.min.js", "http://a0.awsstatic.com/pricing/1/ec2/previous-generation/linux-od.min.js"].each do |url|
97
+ res = AwsPricing::PriceList.fetch_url(url)
98
+
99
+ res['config']['regions'].each do |reg|
100
+ reg['instanceTypes'].each do |type|
101
+ items = type['sizes']
102
+ items = [type] if items.nil?
103
+ items.each do |size|
104
+ begin
105
+ api_name = size["size"]
106
+ @@Memory_Lookup[api_name] = size["memoryGiB"].to_f * 1000
107
+ @@Compute_Units_Lookup[api_name] = size["ECU"].to_i
108
+ @@Virtual_Cores_Lookup[api_name] = size["vCPU"].to_i
109
+ rescue UnknownTypeError
110
+ $stderr.puts "WARNING: encountered #{$!.message}"
111
+ end
109
112
  end
110
113
  end
111
114
  end
112
115
  end
113
-
114
116
  end
115
117
 
116
118
  protected
@@ -15,7 +15,7 @@ module AwsPricing
15
15
  # e.g. us-east, us-west
16
16
  #
17
17
  class Region
18
- attr_accessor :name, :ebs_price
18
+ attr_accessor :name, :ebs_price, :ec2_instance_types, :rds_instance_types
19
19
 
20
20
  def initialize(name)
21
21
  @name = name
@@ -8,5 +8,5 @@
8
8
  # Home:: http://github.com/CloudHealth/amazon-pricing
9
9
  #++
10
10
  module AwsPricing
11
- VERSION = '0.1.48'
11
+ VERSION = '0.1.49'
12
12
  end
@@ -16,8 +16,27 @@ module AwsPricing
16
16
  class PriceList
17
17
  attr_accessor :regions
18
18
 
19
+ def initialize(is_govcloud = false)
20
+ @_regions = {}
21
+
22
+ # Creating regions upfront since different json files all use different naming conventions. No more ad-hoc creation.
23
+ if is_govcloud
24
+ regions = ["us-gov-west-1"]
25
+ else
26
+ # AWS added some but not all of teh data for us-gov-west-1. Not sure why they have not completed it. If they do not deprecate the screen scraping.
27
+ regions = ["eu-west-1", "sa-east-1", "us-east-1", "ap-northeast-1", "us-west-2", "us-west-1", "ap-southeast-1", "ap-southeast-2", "eu-central-1"]
28
+ end
29
+
30
+ regions.each do |name|
31
+ @_regions[name] = Region.new(name)
32
+ end
33
+ end
34
+
35
+ # EBS now reports regions correctly but all else still has the old format - so we need to handle both
36
+ # region mapping and non-mapping
19
37
  def get_region(name)
20
- @_regions[@@Region_Lookup[name] || name]
38
+ #@_regions[@@Region_Lookup[name] || name]
39
+ @_regions[convert_region(name)]
21
40
  end
22
41
 
23
42
  def regions
@@ -66,34 +85,44 @@ module AwsPricing
66
85
 
67
86
  attr_accessor :_regions
68
87
 
69
- def add_region(region)
70
- @_regions[region.name] = region
71
- end
88
+ #def add_region(region)
89
+ # @_regions[region.name] = region
90
+ #end
72
91
 
73
- def find_or_create_region(name)
74
- region = get_region(name)
75
- if region.nil?
76
- region = Region.new(name)
77
- add_region(region)
78
- end
79
- region
80
- end
92
+ #def find_or_create_region(name)
93
+ # region = get_region(name)
94
+ # if region.nil?
95
+ # # We must use standard names
96
+ # region = Region.new(name)
97
+ # add_region(region)
98
+ # end
99
+ # region
100
+ #end
81
101
 
82
102
  EC2_BASE_URL = "http://a0.awsstatic.com/pricing/1/ec2/"
83
103
  EBS_BASE_URL = "http://a0.awsstatic.com/pricing/1/ebs/"
84
104
  RDS_BASE_URL = "http://a0.awsstatic.com/pricing/1/rds/"
85
105
 
86
- # Lookup allows us to map to AWS API region names
87
- @@Region_Lookup = {
88
- 'us-east-1' => 'us-east',
89
- 'us-west-1' => 'us-west',
90
- 'us-west-2' => 'us-west-2',
91
- 'eu-west-1' => 'eu-ireland',
92
- 'ap-southeast-1' => 'apac-sin',
93
- 'ap-southeast-2' => 'apac-syd',
94
- 'ap-northeast-1' => 'apac-tokyo',
95
- 'sa-east-1' => 'sa-east-1'
96
- }
106
+ def convert_region(name)
107
+ case name
108
+ when "us-east"
109
+ "us-east-1"
110
+ when "us-west"
111
+ "us-west-1"
112
+ when "eu-ireland"
113
+ "eu-west-1"
114
+ when "apac-sin"
115
+ "ap-southeast-1"
116
+ when "apac-syd"
117
+ "ap-southeast-2"
118
+ when "apac-tokyo"
119
+ "ap-northeast-1"
120
+ when "eu-frankfurt"
121
+ "eu-central-1"
122
+ else
123
+ name
124
+ end
125
+ end
97
126
 
98
127
  end
99
128
 
@@ -2,9 +2,10 @@ module AwsPricing
2
2
  class Ec2PriceList < PriceList
3
3
 
4
4
  def initialize
5
- @_regions = {}
5
+ super
6
6
  InstanceType.populate_lookups
7
7
  get_ec2_on_demand_instance_pricing
8
+ get_ec2_legacy_reserved_instance_pricing
8
9
  get_ec2_reserved_instance_pricing
9
10
  fetch_ec2_ebs_pricing
10
11
  end
@@ -12,7 +13,7 @@ module AwsPricing
12
13
  protected
13
14
 
14
15
  @@OS_TYPES = [:linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb]
15
- @@RES_TYPES = [:light, :medium, :heavy]
16
+ @@LEGACY_RES_TYPES = [:light, :medium, :heavy]
16
17
 
17
18
  def get_ec2_on_demand_instance_pricing
18
19
  @@OS_TYPES.each do |os|
@@ -24,9 +25,9 @@ module AwsPricing
24
25
  end
25
26
  end
26
27
 
27
- def get_ec2_reserved_instance_pricing
28
+ def get_ec2_legacy_reserved_instance_pricing
28
29
  @@OS_TYPES.each do |os|
29
- @@RES_TYPES.each do |res_type|
30
+ @@LEGACY_RES_TYPES.each do |res_type|
30
31
  fetch_ec2_instance_pricing(EC2_BASE_URL + "#{os}-ri-#{res_type}.min.js", res_type, os)
31
32
  # Rinse & repeat for legacy instances (note: amazon changed URLs for legacy reserved instances)
32
33
  os_rewrite = os
@@ -39,13 +40,22 @@ module AwsPricing
39
40
  end
40
41
  end
41
42
 
43
+ def get_ec2_reserved_instance_pricing
44
+ # I give up on finding a pattern so just iterating over known URLs
45
+ page_targets = {"linux-unix" => :linux, "red-hat-enterprise-linux" => :rhel, "suse-linux" => :sles, "windows" => :mswin, "windows-with-sql-server-standard" => :mswinSQL, "windows-with-sql-server-web" => :mswinSQLWeb}
46
+ page_targets.each_pair do |target, operating_system|
47
+ url = "#{EC2_BASE_URL}ri-v2/#{target}-shared.min.js"
48
+ fetch_ec2_instance_pricing_ri_v2(url, operating_system)
49
+ end
50
+ end
51
+
42
52
  # Retrieves the EC2 on-demand instance pricing.
43
53
  # type_of_instance = :ondemand, :light, :medium, :heavy
44
54
  def fetch_ec2_instance_pricing(url, type_of_instance, operating_system)
45
55
  res = PriceList.fetch_url(url)
46
56
  res['config']['regions'].each do |reg|
47
57
  region_name = reg['region']
48
- region = find_or_create_region(region_name)
58
+ region = get_region(region_name)
49
59
  # e.g. type = {"type"=>"hiCPUODI", "sizes"=>[{"size"=>"med", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"N/A"}}]}, {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}]}
50
60
  reg['instanceTypes'].each do |type|
51
61
  # e.g. size = {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}
@@ -66,6 +76,79 @@ module AwsPricing
66
76
  end
67
77
  end
68
78
 
79
+ # Retrieves the EC2 on-demand instance pricing.
80
+ # type_of_instance = :ondemand, :light, :medium, :heavy
81
+ def fetch_ec2_instance_pricing(url, type_of_instance, operating_system)
82
+ res = PriceList.fetch_url(url)
83
+ res['config']['regions'].each do |reg|
84
+ region_name = reg['region']
85
+ region = get_region(region_name)
86
+ if region.nil?
87
+ $stderr.puts "WARNING: unable to find region #{region_name}"
88
+ next
89
+ end
90
+ # e.g. type = {"type"=>"hiCPUODI", "sizes"=>[{"size"=>"med", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"N/A"}}]}, {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}]}
91
+ reg['instanceTypes'].each do |type|
92
+ # e.g. size = {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}
93
+ # Amazon now can return array or hash here (hash = only 1 item)
94
+ items = type['sizes']
95
+ items = [type] if items.nil?
96
+ items.each do |size|
97
+ begin
98
+ api_name, name = Ec2InstanceType.get_name(type["type"], size["size"], type_of_instance != :ondemand)
99
+ instance_type = region.add_or_update_ec2_instance_type(api_name, name)
100
+ instance_type.update_pricing(operating_system, type_of_instance, size)
101
+ rescue UnknownTypeError
102
+ $stderr.puts "WARNING: encountered #{$!.message}"
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ # With v2 of RIs they have an entirely new format that needs to be parsed
110
+ def fetch_ec2_instance_pricing_ri_v2(url, operating_system)
111
+ res = PriceList.fetch_url(url)
112
+ res['config']['regions'].each do |reg|
113
+ region_name = reg['region']
114
+ region = get_region(region_name)
115
+ if region.nil?
116
+ $stderr.puts "WARNING: unable to find region #{region_name}"
117
+ next
118
+ end
119
+ reg['instanceTypes'].each do |type|
120
+ api_name = type["type"]
121
+ instance_type = region.get_instance_type(api_name)
122
+ if instance_type.nil?
123
+ $stderr.puts "WARNING: new reserved instances not found for #{api_name} in #{region_name}"
124
+ next
125
+ end
126
+
127
+ type["terms"].each do |term|
128
+ term["purchaseOptions"].each do |option|
129
+ case option["purchaseOption"]
130
+ when "noUpfront"
131
+ reservation_type = :noupfront
132
+ when "allUpfront"
133
+ reservation_type = :allupfront
134
+ when "partialUpfront"
135
+ reservation_type = :partialupfront
136
+ end
137
+
138
+ duration = term["term"]
139
+ prices = option["valueColumns"]
140
+ upfront = prices.select{|i| i["name"] == "upfront"}.first
141
+ instance_type.update_pricing_new(operating_system, reservation_type, upfront["prices"]["USD"].to_f, duration, true) unless upfront.nil?
142
+ hourly = prices.select{|i| i["name"] == "monthlyStar"}.first
143
+ instance_type.update_pricing_new(operating_system, reservation_type, hourly["prices"]["USD"].to_f, duration, false)
144
+ end
145
+ end
146
+
147
+ end
148
+ end
149
+ end
150
+
151
+
69
152
  def fetch_ec2_ebs_pricing
70
153
  res = PriceList.fetch_url(EBS_BASE_URL + "pricing-ebs.min.js")
71
154
  res["config"]["regions"].each do |ebs_types|
@@ -5,8 +5,7 @@ module AwsPricing
5
5
  GOV_CLOUD_EBS_URL = "http://aws.amazon.com/govcloud-us/pricing/ebs/"
6
6
 
7
7
  def initialize
8
- @_regions = {}
9
- @_regions["us-gov-west-1"] = Region.new("us-gov-west-1")
8
+ super(true)
10
9
  InstanceType.populate_lookups
11
10
  get_ec2_instance_pricing
12
11
  fetch_ec2_ebs_pricing
@@ -24,13 +23,16 @@ module AwsPricing
24
23
  end
25
24
 
26
25
  for i in 4..9
27
- create_reserved_instances(tables[i], :light)
26
+ # GovCloud no longer supports reservation types
27
+ #create_reserved_instances(tables[i], :light)
28
28
  end
29
29
  for i in 9..22
30
- create_reserved_instances(tables[i], :medium)
30
+ # GovCloud no longer supports reservation types
31
+ #create_reserved_instances(tables[i], :medium)
31
32
  end
32
33
  for i in 23..33
33
- create_reserved_instances(tables[i], :heavy)
34
+ # GovCloud no longer supports reservation types
35
+ #create_reserved_instances(tables[i], :heavy)
34
36
  end
35
37
 
36
38
  end
@@ -106,7 +108,7 @@ module AwsPricing
106
108
  :sles
107
109
  when "Windows"
108
110
  :mswin
109
- when "Windows SQL Server Web", "Windows SQL Server Web Edition", "Windows SQL Server\n Web Edition"
111
+ when "Windows SQL Server Web", "Windows SQL Server Web Edition", "Windows SQL Server\n Web Edition", "Server Web"
110
112
  :mswinSQL
111
113
  when "Windows SQL Server Standard", "Windows SQL Server Standard Edition", "Windows SQL Server\n Standard Edition"
112
114
  :mswinSQLWeb
@@ -2,7 +2,7 @@ module AwsPricing
2
2
  class RdsPriceList < PriceList
3
3
 
4
4
  def initialize
5
- @_regions = {}
5
+ super
6
6
  InstanceType.populate_lookups
7
7
  get_rds_on_demand_instance_pricing
8
8
  get_rds_reserved_instance_pricing
@@ -110,7 +110,7 @@ module AwsPricing
110
110
  res = PriceList.fetch_url(url)
111
111
  res['config']['regions'].each do |reg|
112
112
  region_name = reg['region']
113
- region = find_or_create_region(region_name)
113
+ region = get_region(region_name)
114
114
  reg['types'].each do |type|
115
115
  type['tiers'].each do |tier|
116
116
  begin
@@ -137,7 +137,7 @@ module AwsPricing
137
137
  res = PriceList.fetch_url(url)
138
138
  res['config']['regions'].each do |reg|
139
139
  region_name = reg['region']
140
- region = find_or_create_region(region_name)
140
+ region = get_region(region_name)
141
141
  reg['instanceTypes'].each do |type|
142
142
  type['tiers'].each do |tier|
143
143
  begin
@@ -47,14 +47,4 @@ class TestGovCloud < Test::Unit::TestCase
47
47
  assert region.ebs_price.s3_snaps_per_gb == 0.125
48
48
  end
49
49
 
50
- # Defect found in which ordering of price per hour and upfront get reversed
51
- def test_ri_pricing
52
- region = @@ec2_pricing.get_region('us-gov-west-1')
53
- instance = region.get_ec2_instance_type('m3.large')
54
- os = instance.get_operating_system(:linux)
55
- assert os.ondemand_price_per_hour == 0.168
56
- assert os.light_prepay_1_year == 300.0
57
- assert os.light_price_per_hour_1_year == 0.167
58
- end
59
-
60
50
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon-pricing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.48
4
+ version: 0.1.49
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Joe Kinsella
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-10-23 00:00:00.000000000 Z
12
+ date: 2014-12-04 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: A Ruby library for retrieving pricing for Amazon Web Services
14
15
  email:
@@ -30,6 +31,7 @@ files:
30
31
  - archive/ec2-2014-05-22.csv
31
32
  - archive/rds-2014-03-18.csv
32
33
  - archive/rds-2014-05-22.csv
34
+ - lib/.DS_Store
33
35
  - lib/amazon-pricing.rb
34
36
  - lib/amazon-pricing/category-type.rb
35
37
  - lib/amazon-pricing/database-type.rb
@@ -55,7 +57,6 @@ files:
55
57
  homepage: http://github.com/CloudHealth/amazon-pricing
56
58
  licenses:
57
59
  - MIT
58
- metadata: {}
59
60
  post_install_message:
60
61
  rdoc_options:
61
62
  - --title
@@ -66,20 +67,28 @@ rdoc_options:
66
67
  require_paths:
67
68
  - lib
68
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
69
71
  requirements:
70
72
  - - ! '>='
71
73
  - !ruby/object:Gem::Version
72
74
  version: '0'
75
+ segments:
76
+ - 0
77
+ hash: -2678167569791819720
73
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
74
80
  requirements:
75
81
  - - ! '>='
76
82
  - !ruby/object:Gem::Version
77
83
  version: '0'
84
+ segments:
85
+ - 0
86
+ hash: -2678167569791819720
78
87
  requirements: []
79
88
  rubyforge_project: amazon-pricing
80
- rubygems_version: 2.2.2
89
+ rubygems_version: 1.8.25
81
90
  signing_key:
82
- specification_version: 4
91
+ specification_version: 3
83
92
  summary: Amazon Web Services Pricing Ruby gem
84
93
  test_files:
85
94
  - spec/instance_type_spec.rb
@@ -90,4 +99,3 @@ test_files:
90
99
  - test/ec2_instance_types_test.rb
91
100
  - test/govcloud_test.rb
92
101
  - test/helper.rb
93
- has_rdoc:
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- M2Y3Y2NjMmVjZWNkZGUxYWY2NDU4ZWQ2YWM4NGQyOWY1YzE2ZjExZQ==
5
- data.tar.gz: !binary |-
6
- NjExZWM5NDg0YTFmZmFlZGZlMjQyMTMxMGY0ZGMzYjI0NmY0OGIwNA==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- ZDY0YzQ2OGYzZWNjN2QwZWNlNzNiODJmZmJjNzkwNjc2YTA2YmUzZDU4Nzk2
10
- ZDNmMWYzZGE0MjUwMGE0MTM3NGIzNzI0ZDU5NDM1YTBmOTFkY2FjNzgyMzE1
11
- ZWVjOGZmNDVkMTRjM2UxNjE5MjExY2JkNDAyYjA3NmY1YzFkOTg=
12
- data.tar.gz: !binary |-
13
- OTdiNTUyOGVjNDFmMDFiNjliODBjYWNlZTc0NTgzZjJkMDBhMDg4NzM3NmY1
14
- ZTY5ZjdhNjk2Yjc2MGM3YzI5NjE1YjEzODg1NTIxZWRmNjI4YzE0NWFhNWM3
15
- OGU4Mzk4OWM1YmFmZmQxZjdiMDE2MWQ5YjFkNWFkNmMzYmRjYmE=