awscosts 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/awscosts/ec2.rb CHANGED
@@ -2,6 +2,7 @@ require 'awscosts/ec2_on_demand'
2
2
  require 'awscosts/ec2_reserved_instances'
3
3
  require 'awscosts/ec2_elb'
4
4
  require 'awscosts/ec2_ebs'
5
+ require 'awscosts/ec2_elastic_ips'
5
6
 
6
7
  class AWSCosts::EC2
7
8
 
@@ -29,6 +30,10 @@ class AWSCosts::EC2
29
30
  def ebs
30
31
  AWSCosts::EBS.fetch(self.region.price_mapping)
31
32
  end
33
+
34
+ def elastic_ips
35
+ AWSCosts::ElasticIPs.fetch(self.region.price_mapping)
36
+ end
32
37
  end
33
38
 
34
39
 
@@ -0,0 +1,44 @@
1
+ class AWSCosts::ElasticIPs
2
+
3
+ def initialize data
4
+ @data= data
5
+ end
6
+
7
+ def price_one
8
+ @data['oneEIP']
9
+ end
10
+
11
+ def price_additional_per_hour
12
+ @data['perAdditionalEIPPerHour']
13
+ end
14
+
15
+ def price_non_attached_per_hour
16
+ @data['perNonAttachedPerHour']
17
+ end
18
+
19
+ def price_remap_first_100
20
+ @data['perRemapFirst100']
21
+ end
22
+
23
+ def price_remap_over_100
24
+ @data['perRemapOver100']
25
+ end
26
+
27
+ def self.fetch region
28
+ transformed= AWSCosts::Cache.get('/ec2/pricing/pricing-elastic-ips.json') do |data|
29
+ result = {}
30
+ data['config']['regions'].each do |region|
31
+ container = {}
32
+ region['types'].each do |type|
33
+ type['values'].each do |value|
34
+ container[value['rate']] = value['prices']['USD'].to_f
35
+ end
36
+ end
37
+ result[region['region']] = container
38
+ end
39
+ result
40
+ end
41
+ self.new(transformed[region])
42
+ end
43
+
44
+ end
@@ -67,7 +67,7 @@ class AWSCosts::EC2ReservedInstances
67
67
  end
68
68
  result
69
69
  end
70
- self.new(transformed[region])
70
+ region == 'us-east-1' ? self.new(transformed['us-east']) : self.new(transformed[region])
71
71
  end
72
72
 
73
73
  end
@@ -1,3 +1,3 @@
1
1
  module AWSCosts
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::ElasticIPs do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-southeast-2').ec2.elastic_ips}
7
+
8
+ its(:price_one) { should == 0 }
9
+ its(:price_additional_per_hour) { should > 0 }
10
+ its(:price_non_attached_per_hour) { should > 0 }
11
+ its(:price_remap_first_100) { should == 0 }
12
+ its(:price_remap_over_100) { should > 0 }
13
+
14
+ end
15
+
@@ -2,26 +2,34 @@ require 'spec_helper'
2
2
 
3
3
  describe AWSCosts::EC2ReservedInstances do
4
4
 
5
- [:windows, :linux, :windows_with_sql, :windows_with_sql_web, :rhel, :sles].each do |type|
6
- context "EC2 type of #{type}" do
7
- use_vcr_cassette
5
+ describe 'Reserved instances' do
8
6
 
9
- subject { AWSCosts.region('ap-southeast-1').ec2.reserved(type)}
7
+ AWSCosts::Region::SUPPORTED.keys.each do |r|
10
8
 
11
- it 'upfront price for 1 year term' do
12
- subject.upfront(:one_year).should have_key('m1.small')
13
- end
9
+ context "in the #{r} region" do
10
+ [:windows, :linux, :windows_with_sql, :windows_with_sql_web, :rhel, :sles].each do |type|
11
+ context "EC2 type of #{type}" do
12
+ use_vcr_cassette
14
13
 
15
- it 'upfront price for 3 year term' do
16
- subject.upfront(:three_year).should have_key('m1.small')
17
- end
14
+ subject { AWSCosts.region(r).ec2.reserved(type)}
18
15
 
19
- it 'hourly price for 1 year term' do
20
- subject.hourly(:one_year).should have_key('m1.small')
21
- end
16
+ it 'upfront price for 1 year term' do
17
+ subject.upfront(:one_year).should have_key('m1.small')
18
+ end
19
+
20
+ it 'upfront price for 3 year term' do
21
+ subject.upfront(:three_year).should have_key('m1.small')
22
+ end
23
+
24
+ it 'hourly price for 1 year term' do
25
+ subject.hourly(:one_year).should have_key('m1.small')
26
+ end
22
27
 
23
- it 'hourly price for 3 year term' do
24
- subject.hourly(:three_year).should have_key('m1.small')
28
+ it 'hourly price for 3 year term' do
29
+ subject.hourly(:three_year).should have_key('m1.small')
30
+ end
31
+ end
32
+ end
25
33
  end
26
34
  end
27
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awscosts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
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: 2013-05-27 00:00:00.000000000 Z
12
+ date: 2013-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -134,6 +134,12 @@ files:
134
134
  - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows.yml
135
135
  - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql.yml
136
136
  - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql_web.yml
137
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_linux.yml
138
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_rhel.yml
139
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_sles.yml
140
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows.yml
141
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows_with_sql.yml
142
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows_with_sql_web.yml
137
143
  - fixtures/vcr_cassettes/AWSCosts_ELB.yml
138
144
  - fixtures/vcr_cassettes/AWSCosts_EMR.yml
139
145
  - fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml
@@ -143,6 +149,7 @@ files:
143
149
  - lib/awscosts/cache.rb
144
150
  - lib/awscosts/ec2.rb
145
151
  - lib/awscosts/ec2_ebs.rb
152
+ - lib/awscosts/ec2_elastic_ips.rb
146
153
  - lib/awscosts/ec2_elb.rb
147
154
  - lib/awscosts/ec2_on_demand.rb
148
155
  - lib/awscosts/ec2_reserved_instances.rb
@@ -154,6 +161,7 @@ files:
154
161
  - lib/awscosts/s3_storage.rb
155
162
  - lib/awscosts/version.rb
156
163
  - spec/awscosts/ec2_ebs_spec.rb
164
+ - spec/awscosts/ec2_elastic_ips_spec.rb
157
165
  - spec/awscosts/ec2_elb_spec.rb
158
166
  - spec/awscosts/ec2_on_demand_spec.rb
159
167
  - spec/awscosts/ec2_reserved_instances_spec.rb
@@ -177,18 +185,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
185
  - - ! '>='
178
186
  - !ruby/object:Gem::Version
179
187
  version: '0'
180
- segments:
181
- - 0
182
- hash: -1851467363620844181
183
188
  required_rubygems_version: !ruby/object:Gem::Requirement
184
189
  none: false
185
190
  requirements:
186
191
  - - ! '>='
187
192
  - !ruby/object:Gem::Version
188
193
  version: '0'
189
- segments:
190
- - 0
191
- hash: -1851467363620844181
192
194
  requirements: []
193
195
  rubyforge_project:
194
196
  rubygems_version: 1.8.23
@@ -197,6 +199,7 @@ specification_version: 3
197
199
  summary: Programmatic access to AWS pricing
198
200
  test_files:
199
201
  - spec/awscosts/ec2_ebs_spec.rb
202
+ - spec/awscosts/ec2_elastic_ips_spec.rb
200
203
  - spec/awscosts/ec2_elb_spec.rb
201
204
  - spec/awscosts/ec2_on_demand_spec.rb
202
205
  - spec/awscosts/ec2_reserved_instances_spec.rb