amazon-pricing 0.1.43 → 0.1.44
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 +8 -8
- data/lib/amazon-pricing/version.rb +1 -1
- data/lib/aws-price-list.rb +0 -126
- data/lib/gov-cloud-price-list.rb +129 -1
- data/lib/rds-price-list.rb +10 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmVmZGI2MDkyMzAzZDUwMmYzMzc0NmE2ZjkxY2JmNjdjNTlkYzg5Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzZiZDJhNDc3ZWIxZWU4ZWQyYjAyM2RmMWQ3OGFmYTAyNTA1NDIyNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzQ4YWM0NWM1MjRlMGFjNjFkNTc0ZjFjZWExMjJjYjgzYTJlMDMwM2Y0ZDkw
|
10
|
+
MTU1MGQ3MDMyNjI3NDk5YzM3ZjNkOWJjNzdhYTJkY2I3YTk5ODZjODRiMjIz
|
11
|
+
YzI1ZDYwMDk2M2M3ZDQ4ODg2NjdjN2VlZTZmNjQ1MzIxYTlmMTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGJlZGM0NzdiMDY5Yjg1MjllN2M5NmY3OTQzZjE2ZTE3NWEyNjBiNDUyY2M5
|
14
|
+
OGJhOTcxOWM4MzcwMzc2MzA4Mzc5ZWQ1ZjE3OGIyOTRiM2UyNDQ2MjkzMjky
|
15
|
+
MDJkMDY4MTA0NzFhOGFmYzViNjJiZTFmOTEzZjNmNmE5MzllOGM=
|
data/lib/aws-price-list.rb
CHANGED
@@ -98,130 +98,4 @@ module AwsPricing
|
|
98
98
|
end
|
99
99
|
|
100
100
|
|
101
|
-
class GovCloudEc2PriceList < PriceList
|
102
|
-
GOV_CLOUD_URL = "http://aws.amazon.com/govcloud-us/pricing/ec2/"
|
103
|
-
GOV_CLOUD_EBS_URL = "http://aws.amazon.com/govcloud-us/pricing/ebs/"
|
104
|
-
|
105
|
-
def initialize
|
106
|
-
@_regions = {}
|
107
|
-
@_regions["us-gov-west-1"] = Region.new("us-gov-west-1")
|
108
|
-
InstanceType.populate_lookups
|
109
|
-
get_ec2_instance_pricing
|
110
|
-
fetch_ec2_ebs_pricing
|
111
|
-
end
|
112
|
-
|
113
|
-
protected
|
114
|
-
|
115
|
-
def get_ec2_instance_pricing
|
116
|
-
|
117
|
-
client = Mechanize.new
|
118
|
-
page = client.get(GOV_CLOUD_URL)
|
119
|
-
tables = page.search("//div[@class='aws-table section']")
|
120
|
-
create_ondemand_instances(get_rows(tables[0]))
|
121
|
-
create_ondemand_instances(get_rows(tables[1]))
|
122
|
-
|
123
|
-
for i in 2..7
|
124
|
-
create_reserved_instances(get_rows(tables[i]), :light)
|
125
|
-
end
|
126
|
-
for i in 8..13
|
127
|
-
create_reserved_instances(get_rows(tables[i]), :medium)
|
128
|
-
end
|
129
|
-
for i in 14..19
|
130
|
-
create_reserved_instances(get_rows(tables[i]), :heavy)
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
# e.g. [["Prices / Hour", "Amazon Linux", "RHEL", "SLES"], ["m1.small", "$0.053", "$0.083", "$0.083"]]
|
136
|
-
def create_ondemand_instances(rows)
|
137
|
-
header = rows[0]
|
138
|
-
@_regions.values.each do |region|
|
139
|
-
|
140
|
-
rows.slice(1, rows.size).each do |row|
|
141
|
-
api_name = row[0]
|
142
|
-
instance_type = region.get_ec2_instance_type(api_name)
|
143
|
-
if instance_type.nil?
|
144
|
-
api_name, name = Ec2InstanceType.get_name(nil, row[0], false)
|
145
|
-
instance_type = region.add_or_update_ec2_instance_type(api_name, name)
|
146
|
-
end
|
147
|
-
instance_type.update_pricing2(get_os(header[1]), :ondemand, row[1])
|
148
|
-
instance_type.update_pricing2(get_os(header[2]), :ondemand, row[2])
|
149
|
-
instance_type.update_pricing2(get_os(header[3]), :ondemand, row[3])
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
# 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"]]
|
155
|
-
def create_reserved_instances(rows, res_type)
|
156
|
-
header = rows[0]
|
157
|
-
operating_system = get_os(header[0])
|
158
|
-
@_regions.values.each do |region|
|
159
|
-
|
160
|
-
rows.slice(1, rows.size).each do |row|
|
161
|
-
api_name = row[0]
|
162
|
-
instance_type = region.get_instance_type(api_name)
|
163
|
-
if instance_type.nil?
|
164
|
-
api_name, name = Ec2InstanceType.get_name(nil, row[0], true)
|
165
|
-
instance_type = region.add_or_update_ec2_instance_type(api_name, name)
|
166
|
-
end
|
167
|
-
instance_type.update_pricing2(operating_system, res_type, nil, row[1], row[3], row[2], row[4])
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def fetch_ec2_ebs_pricing
|
173
|
-
client = Mechanize.new
|
174
|
-
page = client.get(GOV_CLOUD_EBS_URL)
|
175
|
-
ebs_costs = page.search("//div[@class='text section']//li")
|
176
|
-
@_regions.values.each do |region|
|
177
|
-
region.ebs_price = EbsPrice.new(region)
|
178
|
-
region.ebs_price.preferred_per_gb = get_ebs_price(ebs_costs[1])
|
179
|
-
region.ebs_price.preferred_per_iops = get_ebs_price(ebs_costs[2])
|
180
|
-
region.ebs_price.standard_per_gb = get_ebs_price(ebs_costs[3])
|
181
|
-
region.ebs_price.standard_per_million_io = get_ebs_price(ebs_costs[4])
|
182
|
-
region.ebs_price.ssd_per_gb = nil
|
183
|
-
region.ebs_price.s3_snaps_per_gb = get_ebs_price(ebs_costs[5])
|
184
|
-
end
|
185
|
-
|
186
|
-
end
|
187
|
-
|
188
|
-
# e.g. $0.065 per GB-Month of provisioned storage
|
189
|
-
def get_ebs_price(xml_element)
|
190
|
-
tokens = xml_element.text.split(" ")
|
191
|
-
tokens[0].gsub("$", "").to_f
|
192
|
-
end
|
193
|
-
|
194
|
-
def get_os(val)
|
195
|
-
case val
|
196
|
-
when "Amazon Linux"
|
197
|
-
:linux
|
198
|
-
when "RHEL"
|
199
|
-
:rhel
|
200
|
-
when "SLES"
|
201
|
-
:sles
|
202
|
-
when "Windows"
|
203
|
-
:mswin
|
204
|
-
when "Windows SQL Server Web", "Windows SQL Server Web Edition"
|
205
|
-
:mswinSQL
|
206
|
-
when "Windows SQL Server Standard", "Windows SQL Server Standard Edition"
|
207
|
-
:mswinSQLWeb
|
208
|
-
else
|
209
|
-
raise "Unable to identify operating system '#{val}'"
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def get_rows(html_table)
|
214
|
-
rows = []
|
215
|
-
html_table.search(".//tr").each do |tr|
|
216
|
-
row = []
|
217
|
-
tr.search(".//td").each do |td|
|
218
|
-
row << td.inner_text.strip.sub("\n", " ").sub(" ", " ")
|
219
|
-
end
|
220
|
-
next if row.size == 1
|
221
|
-
rows << row unless row.empty?
|
222
|
-
end
|
223
|
-
rows
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
101
|
end
|
data/lib/gov-cloud-price-list.rb
CHANGED
@@ -1,4 +1,132 @@
|
|
1
1
|
module AwsPricing
|
2
|
+
|
3
|
+
class GovCloudEc2PriceList < PriceList
|
4
|
+
GOV_CLOUD_URL = "http://aws.amazon.com/govcloud-us/pricing/ec2/"
|
5
|
+
GOV_CLOUD_EBS_URL = "http://aws.amazon.com/govcloud-us/pricing/ebs/"
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@_regions = {}
|
9
|
+
@_regions["us-gov-west-1"] = Region.new("us-gov-west-1")
|
10
|
+
InstanceType.populate_lookups
|
11
|
+
get_ec2_instance_pricing
|
12
|
+
fetch_ec2_ebs_pricing
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def get_ec2_instance_pricing
|
18
|
+
|
19
|
+
client = Mechanize.new
|
20
|
+
page = client.get(GOV_CLOUD_URL)
|
21
|
+
tables = page.search("//div[@class='aws-table ']")
|
22
|
+
create_ondemand_instances(get_rows(tables[0]))
|
23
|
+
create_ondemand_instances(get_rows(tables[1]))
|
24
|
+
|
25
|
+
for i in 2..7
|
26
|
+
create_reserved_instances(get_rows(tables[i]), :light)
|
27
|
+
end
|
28
|
+
for i in 8..13
|
29
|
+
create_reserved_instances(get_rows(tables[i]), :medium)
|
30
|
+
end
|
31
|
+
for i in 14..19
|
32
|
+
create_reserved_instances(get_rows(tables[i]), :heavy)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# e.g. [["Prices / Hour", "Amazon Linux", "RHEL", "SLES"], ["m1.small", "$0.053", "$0.083", "$0.083"]]
|
38
|
+
def create_ondemand_instances(rows)
|
39
|
+
header = rows[0]
|
40
|
+
@_regions.values.each do |region|
|
41
|
+
|
42
|
+
rows.slice(1, rows.size).each do |row|
|
43
|
+
api_name = row[0]
|
44
|
+
instance_type = region.get_ec2_instance_type(api_name)
|
45
|
+
if instance_type.nil?
|
46
|
+
api_name, name = Ec2InstanceType.get_name(nil, row[0], false)
|
47
|
+
instance_type = region.add_or_update_ec2_instance_type(api_name, name)
|
48
|
+
end
|
49
|
+
instance_type.update_pricing2(get_os(header[1]), :ondemand, row[1])
|
50
|
+
instance_type.update_pricing2(get_os(header[2]), :ondemand, row[2])
|
51
|
+
instance_type.update_pricing2(get_os(header[3]), :ondemand, row[3])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# 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"]]
|
57
|
+
def create_reserved_instances(rows, res_type)
|
58
|
+
header = rows[0]
|
59
|
+
operating_system = get_os(header[0])
|
60
|
+
@_regions.values.each do |region|
|
61
|
+
|
62
|
+
rows.slice(1, rows.size).each do |row|
|
63
|
+
api_name = row[0]
|
64
|
+
instance_type = region.get_instance_type(api_name)
|
65
|
+
if instance_type.nil?
|
66
|
+
api_name, name = Ec2InstanceType.get_name(nil, row[0], true)
|
67
|
+
instance_type = region.add_or_update_ec2_instance_type(api_name, name)
|
68
|
+
end
|
69
|
+
instance_type.update_pricing2(operating_system, res_type, nil, row[1], row[3], row[2], row[4])
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def fetch_ec2_ebs_pricing
|
75
|
+
client = Mechanize.new
|
76
|
+
page = client.get(GOV_CLOUD_EBS_URL)
|
77
|
+
ebs_costs = page.search("//div[@class='text-box section']//li")
|
78
|
+
@_regions.values.each do |region|
|
79
|
+
region.ebs_price = EbsPrice.new(region)
|
80
|
+
region.ebs_price.preferred_per_gb = get_ebs_price(ebs_costs[1])
|
81
|
+
region.ebs_price.preferred_per_iops = get_ebs_price(ebs_costs[2])
|
82
|
+
region.ebs_price.standard_per_gb = get_ebs_price(ebs_costs[3])
|
83
|
+
region.ebs_price.standard_per_million_io = get_ebs_price(ebs_costs[4])
|
84
|
+
region.ebs_price.ssd_per_gb = nil
|
85
|
+
region.ebs_price.s3_snaps_per_gb = get_ebs_price(ebs_costs[5])
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
# e.g. $0.065 per GB-Month of provisioned storage
|
91
|
+
def get_ebs_price(xml_element)
|
92
|
+
tokens = xml_element.text.split(" ")
|
93
|
+
tokens[0].gsub("$", "").to_f
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_os(val)
|
97
|
+
case val
|
98
|
+
when "Amazon Linux"
|
99
|
+
:linux
|
100
|
+
when "RHEL"
|
101
|
+
:rhel
|
102
|
+
when "SLES"
|
103
|
+
:sles
|
104
|
+
when "Windows"
|
105
|
+
:mswin
|
106
|
+
when "Windows SQL Server Web", "Windows SQL Server Web Edition"
|
107
|
+
:mswinSQL
|
108
|
+
when "Windows SQL Server Standard", "Windows SQL Server Standard Edition"
|
109
|
+
:mswinSQLWeb
|
110
|
+
else
|
111
|
+
raise "Unable to identify operating system '#{val}'"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def get_rows(html_table)
|
116
|
+
rows = []
|
117
|
+
html_table.search(".//tr").each do |tr|
|
118
|
+
row = []
|
119
|
+
tr.search(".//td").each do |td|
|
120
|
+
row << td.inner_text.strip.sub("\n", " ").sub(" ", " ")
|
121
|
+
end
|
122
|
+
next if row.size == 1
|
123
|
+
rows << row unless row.empty?
|
124
|
+
end
|
125
|
+
rows
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
|
2
130
|
class GovCloudRdsPriceList < PriceList
|
3
131
|
GOV_CLOUD_URL = "http://aws.amazon.com/govcloud-us/pricing/rds/"
|
4
132
|
|
@@ -17,7 +145,7 @@ module AwsPricing
|
|
17
145
|
|
18
146
|
client = Mechanize.new
|
19
147
|
page = client.get(GOV_CLOUD_URL)
|
20
|
-
tables = page.search("//div[@class='aws-table
|
148
|
+
tables = page.search("//div[@class='aws-table ']")
|
21
149
|
|
22
150
|
# Mysql
|
23
151
|
create_ondemand_instances(:mysql, :ondemand, false, false, get_rows(tables[0]))
|
data/lib/rds-price-list.rb
CHANGED
@@ -28,7 +28,7 @@ module AwsPricing
|
|
28
28
|
|
29
29
|
|
30
30
|
def is_multi_az?(type)
|
31
|
-
return true if type.match("
|
31
|
+
return true if type.upcase.match("MULTI-AZ")
|
32
32
|
false
|
33
33
|
end
|
34
34
|
|
@@ -44,11 +44,12 @@ module AwsPricing
|
|
44
44
|
#
|
45
45
|
# to find out the byol type
|
46
46
|
is_byol = is_byol? dp_type
|
47
|
+
is_multi_az = dp_type.upcase.include?("MULTIAZ")
|
47
48
|
|
48
49
|
if [:mysql, :postgresql, :oracle].include? db
|
49
|
-
fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.min.js",:ondemand, db_type, is_byol)
|
50
|
+
fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.min.js",:ondemand, db_type, is_byol, is_multi_az)
|
50
51
|
elsif db == :sqlserver
|
51
|
-
fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.min.js",:ondemand, db_type, is_byol)
|
52
|
+
fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.min.js",:ondemand, db_type, is_byol, is_multi_az)
|
52
53
|
end
|
53
54
|
end
|
54
55
|
}
|
@@ -82,7 +83,7 @@ module AwsPricing
|
|
82
83
|
end
|
83
84
|
end
|
84
85
|
|
85
|
-
def fetch_on_demand_rds_instance_pricing(url, type_of_rds_instance, db_type, is_byol)
|
86
|
+
def fetch_on_demand_rds_instance_pricing(url, type_of_rds_instance, db_type, is_byol, is_multi_az = false)
|
86
87
|
res = PriceList.fetch_url(url)
|
87
88
|
res['config']['regions'].each do |reg|
|
88
89
|
region_name = reg['region']
|
@@ -92,11 +93,11 @@ module AwsPricing
|
|
92
93
|
begin
|
93
94
|
#
|
94
95
|
# this is special case URL, it is oracle - multiAZ type of deployment but it doesn't have mutliAZ attributes in json.
|
95
|
-
if url == "http://aws.amazon.com/rds/pricing/oracle/pricing-li-multiAZ-deployments.min.js"
|
96
|
-
|
97
|
-
else
|
98
|
-
|
99
|
-
end
|
96
|
+
#if url == "http://aws.amazon.com/rds/pricing/oracle/pricing-li-multiAZ-deployments.min.js"
|
97
|
+
# is_multi_az = true
|
98
|
+
#else
|
99
|
+
# is_multi_az = is_multi_az? type["name"]
|
100
|
+
#end
|
100
101
|
api_name, name = RdsInstanceType.get_name(type["name"], tier["name"], type_of_rds_instance != :ondemand)
|
101
102
|
|
102
103
|
instance_type = region.add_or_update_rds_instance_type(api_name, name)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon-pricing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.44
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Kinsella
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A Ruby library for retrieving pricing for Amazon Web Services
|
14
14
|
email:
|