amazon-pricing 0.1.28 → 0.1.29

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,6 +2,8 @@
2
2
  source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
+ gem 'mechanize', '~> 2.7.3'
6
+
5
7
  group :test do
6
8
  gem 'rake'
7
9
  gem 'test-unit'
data/Gemfile.lock CHANGED
@@ -1,13 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- amazon-pricing (0.1.28)
4
+ amazon-pricing (0.1.29)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.1.3)
10
- rake (10.1.0)
10
+ domain_name (0.5.18)
11
+ unf (>= 0.0.5, < 1.0.0)
12
+ http-cookie (1.0.2)
13
+ domain_name (~> 0.5)
14
+ mechanize (2.7.3)
15
+ domain_name (~> 0.5, >= 0.5.1)
16
+ http-cookie (~> 1.0)
17
+ mime-types (~> 2.0)
18
+ net-http-digest_auth (~> 1.1, >= 1.1.1)
19
+ net-http-persistent (~> 2.5, >= 2.5.2)
20
+ nokogiri (~> 1.4)
21
+ ntlm-http (~> 0.1, >= 0.1.1)
22
+ webrobots (>= 0.0.9, < 0.2)
23
+ mime-types (2.2)
24
+ mini_portile (0.5.3)
25
+ net-http-digest_auth (1.4)
26
+ net-http-persistent (2.9.4)
27
+ nokogiri (1.6.1)
28
+ mini_portile (~> 0.5.0)
29
+ ntlm-http (0.1.1)
30
+ rake (10.2.2)
11
31
  rspec (2.11.0)
12
32
  rspec-core (~> 2.11.0)
13
33
  rspec-expectations (~> 2.11.0)
@@ -17,12 +37,17 @@ GEM
17
37
  diff-lcs (~> 1.1.3)
18
38
  rspec-mocks (2.11.3)
19
39
  test-unit (2.5.5)
40
+ unf (0.1.4)
41
+ unf_ext
42
+ unf_ext (0.0.6)
43
+ webrobots (0.1.1)
20
44
 
21
45
  PLATFORMS
22
46
  ruby
23
47
 
24
48
  DEPENDENCIES
25
49
  amazon-pricing!
50
+ mechanize (~> 2.7.3)
26
51
  rake
27
52
  rspec (~> 2.11.0)
28
53
  test-unit
data/Rakefile CHANGED
@@ -6,8 +6,8 @@ $: << File.expand_path(File.dirname(__FILE__), 'lib')
6
6
  require File.join('amazon-pricing','version')
7
7
 
8
8
  Rake::TestTask.new(:test) do |test|
9
- test.libs << 'lib' << 'test'
10
- test.pattern = 'test/**/test_*.rb'
9
+ test.libs << 'test'
10
+ test.pattern = 'test/*_test.rb'
11
11
  test.verbose = true
12
12
  end
13
13
 
@@ -27,14 +27,39 @@ task :install => :gem do
27
27
  sh "sudo gem install amazon-pricing-#{AwsPricing::VERSION}.gem --no-rdoc --no-ri"
28
28
  end
29
29
 
30
- task :test do
31
- ruby 'test/ec2_instance_types_test.rb'
32
- end
33
-
34
30
  desc "Prints current EC2 pricing in CSV format"
35
31
  task :print_ec2_price_list do
36
32
  require 'amazon-pricing'
37
33
  pricing = AwsPricing::Ec2PriceList.new
34
+ print_ec2_table(pricing)
35
+ end
36
+
37
+ desc "Prints current RDS pricing in CSV format"
38
+ task :print_rds_price_list do
39
+ require 'amazon-pricing'
40
+ pricing = AwsPricing::RdsPriceList.new
41
+ print_rds_table(pricing)
42
+ end
43
+
44
+ desc "Prints current GovCloud EC2 pricing in CSV format"
45
+ task :print_govcloud_ec2_price_list do
46
+ require 'amazon-pricing'
47
+ pricing = AwsPricing::GovCloudEc2PriceList.new
48
+ print_ec2_table(pricing)
49
+ end
50
+
51
+ desc "Prints current GovCloud RDS pricing in CSV format"
52
+ task :print_govcloud_rds_price_list do
53
+ require 'amazon-pricing'
54
+ pricing = AwsPricing::GovCloudRdsPriceList.new
55
+ print_rds_table(pricing)
56
+ end
57
+
58
+ task :default => [:test]
59
+
60
+ #########################################
61
+
62
+ def print_ec2_table(pricing)
38
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,"
39
64
  [:year1, :year3].each do |term|
40
65
  [:light, :medium, :heavy].each do |res_type|
@@ -62,14 +87,9 @@ task :print_ec2_price_list do
62
87
  end
63
88
  end
64
89
 
65
-
66
- desc "Prints current RDS pricing in CSV format"
67
- task :print_rds_price_list do
68
- require 'amazon-pricing'
69
- pricing = AwsPricing::RdsPriceList.new
70
-
90
+ def print_rds_table(pricing)
71
91
  line = "Region,Instance Type,API Name,Memory (MB),Disk (GB),Compute Units,Virtual Cores,Disk Type,"
72
-
92
+
73
93
  AwsPricing::DatabaseType.get_database_name.each do |db|
74
94
  unless AwsPricing::DatabaseType.get_available_types(db).nil?
75
95
  AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
@@ -94,10 +114,10 @@ task :print_rds_price_list do
94
114
  end
95
115
  end
96
116
 
97
-
98
- puts line.chop
99
117
 
100
- pricing.regions.each do |region|
118
+ puts line.chop
119
+
120
+ pricing.regions.each do |region|
101
121
  region.rds_instance_types.each do |t|
102
122
  line = "#{region.name},#{t.name},#{t.api_name},#{t.memory_in_mb},#{t.disk_in_gb},#{t.compute_units},#{t.virtual_cores},#{t.disk_type},"
103
123
  AwsPricing::DatabaseType.get_database_name.each do |db|
@@ -132,7 +152,5 @@ task :print_rds_price_list do
132
152
  end
133
153
  puts line.chop
134
154
  end
135
- end
155
+ end
136
156
  end
137
-
138
- task :default => [:test]
@@ -1,5 +1,6 @@
1
1
  require 'json'
2
2
  require 'net/http'
3
+ require 'mechanize'
3
4
 
4
5
  Dir[File.join(File.dirname(__FILE__), 'amazon-pricing/*.rb')].sort.each { |lib| require lib }
5
6
 
@@ -18,7 +19,7 @@ module AwsPricing
18
19
  # Upon instantiating a PriceList object, all the corresponding pricing
19
20
  # information will be retrieved from Amazon via currently undocumented
20
21
  # json APIs.
21
- class PriceList
22
+ class PriceList
22
23
  attr_accessor :regions
23
24
 
24
25
  def get_region(name)
@@ -93,6 +94,204 @@ module AwsPricing
93
94
  end
94
95
 
95
96
 
97
+ class GovCloudEc2PriceList < PriceList
98
+ GOV_CLOUD_URL = "http://aws.amazon.com/govcloud-us/pricing/ec2/"
99
+
100
+ def initialize
101
+ @_regions = {}
102
+ @_regions["us-gov-west"] = Region.new("us-gov-west")
103
+ InstanceType.populate_lookups
104
+ get_ec2_instance_pricing
105
+ end
106
+
107
+ protected
108
+
109
+ def get_ec2_instance_pricing
110
+
111
+ client = Mechanize.new
112
+ page = client.get(GOV_CLOUD_URL)
113
+ tables = page.search("//div[@class='aws-table section']")
114
+
115
+ create_ondemand_instances(get_rows(tables[0]))
116
+ create_ondemand_instances(get_rows(tables[1]))
117
+
118
+ for i in 2..7
119
+ create_reserved_instances(get_rows(tables[i]), :light)
120
+ end
121
+ for i in 8..13
122
+ create_reserved_instances(get_rows(tables[i]), :medium)
123
+ end
124
+ for i in 14..19
125
+ create_reserved_instances(get_rows(tables[i]), :heavy)
126
+ end
127
+
128
+ end
129
+
130
+ # e.g. [["Prices / Hour", "Amazon Linux", "RHEL", "SLES"], ["m1.small", "$0.053", "$0.083", "$0.083"]]
131
+ def create_ondemand_instances(rows)
132
+ header = rows[0]
133
+ @_regions.values.each do |region|
134
+
135
+ rows.slice(1, rows.size).each do |row|
136
+ api_name = row[0]
137
+ instance_type = region.get_ec2_instance_type(api_name)
138
+ if instance_type.nil?
139
+ api_name, name = Ec2InstanceType.get_name(nil, row[0], false)
140
+ instance_type = region.add_or_update_ec2_instance_type(api_name, name)
141
+ end
142
+ instance_type.update_pricing2(get_os(header[1]), :ondemand, row[1])
143
+ instance_type.update_pricing2(get_os(header[2]), :ondemand, row[2])
144
+ instance_type.update_pricing2(get_os(header[3]), :ondemand, row[3])
145
+ end
146
+ end
147
+ end
148
+
149
+ # e.g. [["RHEL", "1 yr Term Upfront", "1 yr TermHourly", "3 yr TermUpfront", "3 yr Term Hourly"], ["m1.small", "$68.00", "$0.099", "$105.00", "$0.098"]]
150
+ def create_reserved_instances(rows, res_type)
151
+ header = rows[0]
152
+ operating_system = get_os(header[0])
153
+ @_regions.values.each do |region|
154
+
155
+ rows.slice(1, rows.size).each do |row|
156
+ api_name = row[0]
157
+ instance_type = region.get_instance_type(api_name)
158
+ if instance_type.nil?
159
+ api_name, name = Ec2InstanceType.get_name(nil, row[0], true)
160
+ instance_type = region.add_or_update_ec2_instance_type(api_name, name)
161
+ end
162
+ instance_type.update_pricing2(operating_system, res_type, nil, row[1], row[2], row[3], row[4])
163
+ end
164
+ end
165
+ end
166
+
167
+ def get_os(val)
168
+ case val
169
+ when "Amazon Linux"
170
+ :linux
171
+ when "RHEL"
172
+ :rhel
173
+ when "SLES"
174
+ :sles
175
+ when "Windows"
176
+ :mswin
177
+ when "Windows SQL Server Web", "Windows SQL Server Web Edition"
178
+ :mswinSQL
179
+ when "Windows SQL Server Standard", "Windows SQL Server Standard Edition"
180
+ :mswinSQLWeb
181
+ else
182
+ raise "Unable to identify operating system '#{val}'"
183
+ end
184
+ end
185
+
186
+ def get_rows(html_table)
187
+ rows = []
188
+ html_table.search(".//tr").each do |tr|
189
+ row = []
190
+ tr.search(".//td").each do |td|
191
+ row << td.inner_text.strip.sub("\n", " ").sub(" ", " ")
192
+ end
193
+ next if row.size == 1
194
+ rows << row unless row.empty?
195
+ end
196
+ rows
197
+ end
198
+ end
199
+
200
+
201
+ class GovCloudRdsPriceList < PriceList
202
+ GOV_CLOUD_URL = "http://aws.amazon.com/govcloud-us/pricing/rds/"
203
+
204
+ def initialize
205
+ @_regions = {}
206
+ @_regions["us-gov-west"] = Region.new("us-gov-west")
207
+ InstanceType.populate_lookups
208
+ get_rds_instance_pricing
209
+ end
210
+
211
+ protected
212
+ #@@DB_TYPE = [:mysql, :postgresql, :oracle, :sqlserver]
213
+ #@@RES_TYPES = [:light, :medium, :heavy]
214
+
215
+ def get_rds_instance_pricing
216
+
217
+ client = Mechanize.new
218
+ page = client.get(GOV_CLOUD_URL)
219
+ tables = page.search("//div[@class='aws-table section']")
220
+
221
+ create_ondemand_instances(:mysql, :ondemand, false, false, get_rows(tables[0]))
222
+ create_ondemand_instances(:mysql, :ondemand, true, false, get_rows(tables[1]))
223
+ # Mysql
224
+ no_multi_az_rows, multi_az_rows = get_reserved_rows(get_rows(tables[2]))
225
+ create_reserved_instances(:mysql, :light, false, false, no_multi_az_rows)
226
+ create_reserved_instances(:mysql, :light, true, false, multi_az_rows)
227
+ no_multi_az_rows, multi_az_rows = get_reserved_rows(get_rows(tables[3]))
228
+ create_reserved_instances(:mysql, :medium, false, false, no_multi_az_rows)
229
+ create_reserved_instances(:mysql, :medium, true, false, multi_az_rows)
230
+ no_multi_az_rows, multi_az_rows = get_reserved_rows(get_rows(tables[4]))
231
+ create_reserved_instances(:mysql, :heavy, false, false, no_multi_az_rows)
232
+ create_reserved_instances(:mysql, :heavy, true, false, multi_az_rows)
233
+ # Oracle
234
+ #no_multi_az_rows, multi_az_rows = get_reserved_rows(get_rows(tables[7]))
235
+ #create_reserved_instances(:oracle_se1, :ondemand, false, false, no_multi_az_rows)
236
+ #create_reserved_instances(:oracle_se1, :ondemand, true, false, multi_az_rows)
237
+ end
238
+
239
+ # e.g. [["General Purpose - Previous Generation", "Price Per Hour"], ["m1.small", "$0.090"], ["m1.medium", "$0.185"]]
240
+ def create_ondemand_instances(db_type, res_type, is_multi_az, is_byol, rows)
241
+ @_regions.values.each do |region|
242
+ # Skip header row
243
+ rows.slice(1, rows.size).each do |row|
244
+ api_name = row[0]
245
+ instance_type = region.get_rds_instance_type(api_name)
246
+ if instance_type.nil?
247
+ api_name, name = RdsInstanceType.get_name(nil, row[0], false)
248
+ instance_type = region.add_or_update_rds_instance_type(api_name, name)
249
+ end
250
+ instance_type.update_pricing2(db_type, res_type, is_multi_az, is_byol, row[1])
251
+ end
252
+ end
253
+ end
254
+
255
+ # e.g. [[" ", "1 yr Term", "3 yr Term"], [" ", "Upfront", "Hourly", "Upfront", "Hourly"], ["m1.small", "$159", "$0.035", "$249", "$0.033"]]
256
+ def create_reserved_instances(db_type, res_type, is_multi_az, is_byol, rows)
257
+ @_regions.values.each do |region|
258
+ rows.each do |row|
259
+ api_name = row[0]
260
+ instance_type = region.get_rds_instance_type(api_name)
261
+ if instance_type.nil?
262
+ api_name, name = RdsInstanceType.get_name(nil, row[0], true)
263
+ instance_type = region.add_or_update_rds_instance_type(api_name, name)
264
+ end
265
+ instance_type.update_pricing2(db_type, res_type, is_multi_az, is_byol, nil, row[1], row[3], row[2], row[4])
266
+ end
267
+ end
268
+ end
269
+
270
+ def get_reserved_rows(rows)
271
+ # Skip 2 header rows
272
+ new_rows = rows.slice(2, rows.size)
273
+ no_multi_az_rows = new_rows.slice(0, new_rows.size / 2)
274
+ multi_az_rows = new_rows.slice(new_rows.size / 2, new_rows.size / 2)
275
+ [no_multi_az_rows, multi_az_rows]
276
+ end
277
+
278
+ def get_rows(html_table)
279
+ rows = []
280
+ html_table.search(".//tr").each do |tr|
281
+ row = []
282
+ tr.search(".//td").each do |td|
283
+ row << td.inner_text.strip.sub("\n", " ").sub(" ", " ")
284
+ end
285
+ # Various <tR> elements contain labels which have only 1 <td> - except heavy multi-az ;)
286
+ next if row.size == 1 || row[0].include?("Multi-AZ Deployment")
287
+ rows << row unless row.empty?
288
+ end
289
+ rows
290
+ end
291
+ end
292
+
293
+
294
+
96
295
  class Ec2PriceList < PriceList
97
296
 
98
297
  def initialize
@@ -139,7 +338,8 @@ module AwsPricing
139
338
  begin
140
339
  api_name, name = Ec2InstanceType.get_name(type["type"], size["size"], type_of_instance != :ondemand)
141
340
 
142
- region.add_or_update_ec2_instance_type(api_name, name, operating_system, type_of_instance, size)
341
+ instance_type = region.add_or_update_ec2_instance_type(api_name, name)
342
+ instance_type.update_pricing(operating_system, type_of_instance, size)
143
343
  rescue UnknownTypeError
144
344
  $stderr.puts "WARNING: encountered #{$!.message}"
145
345
  end
@@ -258,7 +458,8 @@ module AwsPricing
258
458
  end
259
459
  api_name, name = RdsInstanceType.get_name(type["name"], tier["name"], type_of_rds_instance != :ondemand)
260
460
 
261
- region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
461
+ instance_type = region.add_or_update_rds_instance_type(api_name, name)
462
+ instance_type.update_pricing(db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
262
463
  rescue UnknownTypeError
263
464
  $stderr.puts "WARNING: encountered #{$!.message}"
264
465
  end
@@ -278,7 +479,8 @@ module AwsPricing
278
479
  is_multi_az = is_multi_az? type["type"]
279
480
  api_name, name = RdsInstanceType.get_name(type["type"], tier["size"], true)
280
481
 
281
- region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
482
+ instance_type = region.add_or_update_rds_instance_type(api_name, name)
483
+ instance_type.update_pricing(db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
282
484
  rescue UnknownTypeError
283
485
  $stderr.puts "WARNING: encountered #{$!.message}"
284
486
  end
@@ -43,9 +43,24 @@ module AwsPricing
43
43
  end
44
44
  end
45
45
 
46
+ def update_pricing2(operating_system, type_of_instance, ondemand_pph = nil, year1_prepay = nil, year3_prepay = nil, year1_pph = nil, year3_pph = nil)
47
+
48
+ os = get_category_type(operating_system)
49
+ if os.nil?
50
+ os = OperatingSystem.new(self, operating_system)
51
+ @category_types[operating_system] = os
52
+ end
53
+
54
+ os.set_price_per_hour(type_of_instance, nil, coerce_price(ondemand_pph)) unless ondemand_pph.nil?
55
+ os.set_prepay(type_of_instance, :year1, coerce_price(year1_prepay)) unless year1_prepay.nil?
56
+ os.set_prepay(type_of_instance, :year3, coerce_price(year3_prepay)) unless year3_prepay.nil?
57
+ os.set_price_per_hour(type_of_instance, :year1, coerce_price(year1_pph)) unless year1_pph.nil?
58
+ os.set_price_per_hour(type_of_instance, :year3, coerce_price(year3_pph)) unless year3_pph.nil?
59
+ end
60
+
46
61
  # Maintained for backward compatibility reasons
47
62
  def operating_systems
48
- category_types
63
+ @category_types
49
64
  end
50
65
 
51
66
  protected
@@ -21,7 +21,7 @@ module AwsPricing
21
21
  class InstanceType
22
22
  attr_accessor :name, :api_name, :memory_in_mb, :platform, :compute_units, :virtual_cores, :disk_type, :disk_in_gb
23
23
 
24
- def initialize(region, api_name, name, json)
24
+ def initialize(region, api_name, name)
25
25
  @category_types = {}
26
26
 
27
27
  @region = region
@@ -58,7 +58,7 @@ module AwsPricing
58
58
  db = @category_types["#{name}_byol"]
59
59
  else
60
60
  db = @category_types[name]
61
- end
61
+ end
62
62
  end
63
63
 
64
64
  # type_of_instance = :ondemand, :light, :medium, :heavy
@@ -141,8 +141,8 @@ module AwsPricing
141
141
  end
142
142
 
143
143
  def coerce_price(price)
144
- return nil if price.nil? || price == "N/A"
145
- price.gsub(",","").to_f
144
+ return nil if price.nil? || price.upcase == "N/A"
145
+ price.gsub(",","").gsub("$", "").to_f
146
146
  end
147
147
 
148
148
  def self.get_values(json, category_type)
@@ -2,7 +2,7 @@ require 'amazon-pricing/instance-type'
2
2
  module AwsPricing
3
3
  class RdsInstanceType < InstanceType
4
4
 
5
- def initialize(region, api_name, name, json)
5
+ def initialize(region, api_name, name)
6
6
  @category_types = {}
7
7
 
8
8
  @region = region
@@ -79,6 +79,31 @@ module AwsPricing
79
79
  end
80
80
  end
81
81
 
82
+ def update_pricing2(database_type, type_of_instance, is_multi_az, is_byol, ondemand_pph = nil, year1_prepay = nil, year3_prepay = nil, year1_pph = nil, year3_pph = nil)
83
+ db = get_category_type(database_type, is_multi_az, is_byol)
84
+ if db.nil?
85
+ db = DatabaseType.new(self, database_type)
86
+
87
+ if is_multi_az == true and is_byol == true
88
+ @category_types["#{database_type}_byol_multiaz"] = db
89
+ elsif is_multi_az == true and is_byol == false
90
+ @category_types["#{database_type}_multiaz"] = db
91
+ elsif is_multi_az == false and is_byol == true
92
+ @category_types["#{database_type}_byol"] = db
93
+ else
94
+ @category_types[database_type] = db
95
+ end
96
+
97
+ end
98
+
99
+ db.set_price_per_hour(type_of_instance, nil, coerce_price(ondemand_pph)) unless ondemand_pph.nil?
100
+ db.set_prepay(type_of_instance, :year1, coerce_price(year1_prepay)) unless year1_prepay.nil?
101
+ db.set_prepay(type_of_instance, :year3, coerce_price(year3_prepay)) unless year3_prepay.nil?
102
+ db.set_price_per_hour(type_of_instance, :year1, coerce_price(year1_pph)) unless year1_pph.nil?
103
+ db.set_price_per_hour(type_of_instance, :year3, coerce_price(year3_pph)) unless year3_pph.nil?
104
+ end
105
+
106
+
82
107
  protected
83
108
 
84
109
  # Returns [api_name, name]
@@ -46,23 +46,21 @@ module AwsPricing
46
46
  end
47
47
 
48
48
  # type_of_instance = :ondemand, :light, :medium, :heavy
49
- def add_or_update_ec2_instance_type(api_name, name, operating_system, type_of_instance, json)
49
+ def add_or_update_ec2_instance_type(api_name, name)
50
50
  current = get_ec2_instance_type(api_name)
51
51
  if current.nil?
52
- current = Ec2InstanceType.new(self, api_name, name, json)
52
+ current = Ec2InstanceType.new(self, api_name, name)
53
53
  @ec2_instance_types[api_name] = current
54
54
  end
55
- current.update_pricing(operating_system, type_of_instance, json)
56
55
  current
57
56
  end
58
57
 
59
- def add_or_update_rds_instance_type(api_name, name, db_type, type_of_instance, json, is_multi_az, is_byol)
58
+ def add_or_update_rds_instance_type(api_name, name)
60
59
  current = get_rds_instance_type(api_name)
61
60
  if current.nil?
62
- current = RdsInstanceType.new(self, api_name, name, json)
61
+ current = RdsInstanceType.new(self, api_name, name)
63
62
  @rds_instance_types[api_name] = current
64
63
  end
65
- current.update_pricing(db_type, type_of_instance, json, is_multi_az, is_byol)
66
64
  current
67
65
  end
68
66
 
@@ -8,5 +8,5 @@
8
8
  # Home:: http://github.com/CloudHealth/amazon-pricing
9
9
  #++
10
10
  module AwsPricing
11
- VERSION = '0.1.28'
11
+ VERSION = '0.1.29'
12
12
  end
@@ -70,7 +70,7 @@ class TestEc2InstanceTypes < Test::Unit::TestCase
70
70
  region = @@ec2_pricing.get_region('us-east')
71
71
  instance = region.get_ec2_instance_type('m1.large')
72
72
  bem = instance.get_breakeven_month(:linux, :heavy, :year1)
73
- assert bem == 8
73
+ assert bem == 6
74
74
  end
75
75
 
76
76
  def test_memory
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Amazon Web Services Pricing Ruby library
5
+ #
6
+ # Ruby Gem Name:: amazon-pricing
7
+ # Author:: Joe Kinsella (mailto:joe.kinsella@gmail.com)
8
+ # Copyright:: Copyright (c) 2011-2013 CloudHealth
9
+ # License:: Distributes under the same terms as Ruby
10
+ # Home:: http://github.com/CloudHealth/amazon-pricing
11
+ #++
12
+
13
+ $: << File.expand_path(File.dirname(__FILE__))
14
+ require 'helper'
15
+ require 'test/unit'
16
+
17
+ class TestGovCloud < Test::Unit::TestCase
18
+ class << self
19
+ def startup
20
+ #This is expensive, so only do once.
21
+ @@ec2_pricing = AwsPricing::GovCloudEc2PriceList.new
22
+ end
23
+ end
24
+
25
+ def test_cc8xlarge_issue
26
+ obj = @@ec2_pricing.get_instance_type('us-gov-west', 'cc2.8xlarge')
27
+ assert obj.api_name == 'cc2.8xlarge'
28
+ end
29
+
30
+ def test_memory
31
+ # Validate instance types in specific regions are available
32
+ region = @@ec2_pricing.get_region('us-gov-west')
33
+ instance = region.get_ec2_instance_type('m1.large')
34
+ assert instance.memory_in_mb == 7500
35
+ end
36
+
37
+ def test_virtual_cores
38
+ region = @@ec2_pricing.get_region('us-gov-west')
39
+ instance = region.get_ec2_instance_type('m1.large')
40
+ assert instance.virtual_cores == 2
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon-pricing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.28
4
+ version: 0.1.29
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-02 00:00:00.000000000 Z
12
+ date: 2014-04-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby library for retrieving pricing for Amazon Web Services
15
15
  email:
@@ -43,6 +43,7 @@ files:
43
43
  - spec/spec_helper.rb
44
44
  - spec/support/.gitignore
45
45
  - test/ec2_instance_types_test.rb
46
+ - test/govcloud_test.rb
46
47
  - test/helper.rb
47
48
  homepage: http://github.com/CloudHealth/amazon-pricing
48
49
  licenses:
@@ -64,7 +65,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
65
  version: '0'
65
66
  segments:
66
67
  - 0
67
- hash: -179272630512161026
68
+ hash: 1325936641347822274
68
69
  required_rubygems_version: !ruby/object:Gem::Requirement
69
70
  none: false
70
71
  requirements:
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
74
  version: '0'
74
75
  segments:
75
76
  - 0
76
- hash: -179272630512161026
77
+ hash: 1325936641347822274
77
78
  requirements: []
78
79
  rubyforge_project: amazon-pricing
79
80
  rubygems_version: 1.8.25
@@ -87,4 +88,5 @@ test_files:
87
88
  - spec/spec_helper.rb
88
89
  - spec/support/.gitignore
89
90
  - test/ec2_instance_types_test.rb
91
+ - test/govcloud_test.rb
90
92
  - test/helper.rb