awscosts 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -0
- data/Rakefile +1 -0
- data/awscosts.gemspec +2 -0
- data/fixtures/vcr_cassettes/AWSCosts_EBS.yml +225 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_linux.yml +726 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_rhel.yml +740 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_sles.yml +740 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows.yml +450 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql.yml +450 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql_web.yml +450 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_linux.yml +1810 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_rhel.yml +1810 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_sles.yml +1810 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows.yml +1609 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql.yml +1810 -0
- data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql_web.yml +1810 -0
- data/fixtures/vcr_cassettes/AWSCosts_ELB.yml +119 -0
- data/fixtures/vcr_cassettes/AWSCosts_EMR.yml +767 -0
- data/fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml +369 -0
- data/fixtures/vcr_cassettes/AWSCosts_S3Requests.yml +170 -0
- data/fixtures/vcr_cassettes/AWSCosts_S3Storage.yml +591 -0
- data/lib/awscosts/cache.rb +22 -0
- data/lib/awscosts/ec2.rb +7 -2
- data/lib/awscosts/ec2_ebs.rb +36 -0
- data/lib/awscosts/ec2_elb.rb +2 -6
- data/lib/awscosts/ec2_on_demand.rb +6 -14
- data/lib/awscosts/ec2_reserved_instances.rb +4 -11
- data/lib/awscosts/emr.rb +2 -7
- data/lib/awscosts/s3_data_transfer.rb +2 -3
- data/lib/awscosts/s3_requests.rb +2 -5
- data/lib/awscosts/s3_storage.rb +2 -6
- data/lib/awscosts/version.rb +1 -1
- data/lib/awscosts.rb +1 -0
- data/spec/awscosts/ec2_ebs_spec.rb +42 -0
- data/spec/awscosts/ec2_elb_spec.rb +12 -0
- data/spec/awscosts/ec2_on_demand_spec.rb +14 -0
- data/spec/awscosts/ec2_reserved_instances_spec.rb +28 -0
- data/spec/awscosts/emr_spec.rb +15 -0
- data/spec/awscosts/s3_data_transfer_spec.rb +11 -0
- data/spec/awscosts/s3_requests_spec.rb +10 -0
- data/spec/awscosts/s3_storage_spec.rb +12 -0
- data/spec/spec_helper.rb +9 -0
- metadata +72 -4
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module AWSCosts::Cache
|
5
|
+
extend self
|
6
|
+
|
7
|
+
BASE_URI = "http://aws.amazon.com"
|
8
|
+
|
9
|
+
def get uri, &block
|
10
|
+
cache[uri] ||= begin
|
11
|
+
yield JSON.parse(HTTParty.get("#{BASE_URI}#{uri}").body)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def cache
|
17
|
+
@cache ||= {}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
data/lib/awscosts/ec2.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'awscosts/ec2_on_demand'
|
2
2
|
require 'awscosts/ec2_reserved_instances'
|
3
3
|
require 'awscosts/ec2_elb'
|
4
|
+
require 'awscosts/ec2_ebs'
|
4
5
|
|
5
6
|
class AWSCosts::EC2
|
6
7
|
|
@@ -14,16 +15,20 @@ class AWSCosts::EC2
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def on_demand(type)
|
17
|
-
AWSCosts::EC2OnDemand.fetch(type, self.region.price_mapping)
|
18
|
+
AWSCosts::EC2OnDemand.fetch(TYPES[type], self.region.price_mapping)
|
18
19
|
end
|
19
20
|
|
20
21
|
def reserved(type, utilisation= :light)
|
21
|
-
AWSCosts::EC2ReservedInstances.fetch(type, utilisation, self.region.
|
22
|
+
AWSCosts::EC2ReservedInstances.fetch(TYPES[type], utilisation, self.region.name)
|
22
23
|
end
|
23
24
|
|
24
25
|
def elb
|
25
26
|
AWSCosts::ELB.fetch(self.region.price_mapping)
|
26
27
|
end
|
28
|
+
|
29
|
+
def ebs
|
30
|
+
AWSCosts::EBS.fetch(self.region.price_mapping)
|
31
|
+
end
|
27
32
|
end
|
28
33
|
|
29
34
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class AWSCosts::EBS
|
5
|
+
|
6
|
+
TYPES = { 'ebsVols' => :standard, 'ebsPIOPSVols' => :provisioned_iops,
|
7
|
+
'ebsSnapsToS3' => :snapshots_to_s3 }
|
8
|
+
|
9
|
+
def initialize data
|
10
|
+
@data= data
|
11
|
+
end
|
12
|
+
|
13
|
+
def price type = nil
|
14
|
+
type.nil? ? @data : @data[type]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.fetch region
|
18
|
+
transformed= AWSCosts::Cache.get('/ec2/pricing/pricing-ebs.json') do |data|
|
19
|
+
result = {}
|
20
|
+
data['config']['regions'].each do |region|
|
21
|
+
container = {}
|
22
|
+
region['types'].each do |type|
|
23
|
+
container[TYPES[type['name']]] = {}
|
24
|
+
type['values'].each do |value|
|
25
|
+
container[TYPES[type['name']]][value['rate']] = value['prices']['USD'].to_f
|
26
|
+
end
|
27
|
+
end
|
28
|
+
result[region['region']] = container
|
29
|
+
end
|
30
|
+
result
|
31
|
+
end
|
32
|
+
self.new(transformed[region])
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
data/lib/awscosts/ec2_elb.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
require 'json'
|
3
|
-
|
4
1
|
class AWSCosts::ELB
|
5
2
|
|
6
3
|
def initialize data
|
@@ -16,9 +13,8 @@ class AWSCosts::ELB
|
|
16
13
|
end
|
17
14
|
|
18
15
|
def self.fetch region
|
19
|
-
|
16
|
+
transformed= AWSCosts::Cache.get('/ec2/pricing/pricing-elb.json') do |data|
|
20
17
|
result = {}
|
21
|
-
data= JSON.parse(HTTParty.get('http://aws.amazon.com/ec2/pricing/pricing-elb.json').body)
|
22
18
|
data['config']['regions'].each do |region|
|
23
19
|
container = {}
|
24
20
|
region['types'].each do |type|
|
@@ -30,7 +26,7 @@ class AWSCosts::ELB
|
|
30
26
|
end
|
31
27
|
result
|
32
28
|
end
|
33
|
-
self.new(
|
29
|
+
self.new(transformed[region])
|
34
30
|
end
|
35
31
|
|
36
32
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'json'
|
1
|
+
require 'awscosts/ec2'
|
3
2
|
|
4
3
|
class AWSCosts::EC2OnDemand
|
5
4
|
|
@@ -22,23 +21,20 @@ class AWSCosts::EC2OnDemand
|
|
22
21
|
'hiStoreODI.xxxxxxxxl' => 'hs1.8xlarge',
|
23
22
|
'hiIoODI.xxxxl' => 'hi1.4xlarge' }
|
24
23
|
|
25
|
-
def initialize
|
26
|
-
@type = type
|
24
|
+
def initialize data
|
27
25
|
@data= data
|
28
26
|
end
|
29
27
|
|
30
28
|
def price size=nil
|
31
|
-
size ? @data[
|
29
|
+
size ? @data[size] : @data
|
32
30
|
end
|
33
31
|
|
34
32
|
def self.fetch type, region
|
35
|
-
|
33
|
+
transformed= AWSCosts::Cache.get("/ec2/pricing/json/#{type}-od.json") do |data|
|
36
34
|
result = {}
|
37
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/ec2/pricing/json/#{AWSCosts::EC2::TYPE_MAPPING[type]}-od.json").body)
|
38
35
|
data['config']['regions'].each do |region|
|
39
36
|
platforms = {}
|
40
37
|
region['instanceTypes'].each do |instance_type|
|
41
|
-
type = instance_type['type']
|
42
38
|
instance_type['sizes'].each do |instance_size|
|
43
39
|
size = instance_size['size']
|
44
40
|
platform_cost = Hash.new({})
|
@@ -48,7 +44,7 @@ class AWSCosts::EC2OnDemand
|
|
48
44
|
|
49
45
|
platform_cost.each_pair do |p,v|
|
50
46
|
platforms[p] = {} unless platforms.key?(p)
|
51
|
-
platforms[p][TYPE_TRANSLATION["#{type}.#{size}"]] = v
|
47
|
+
platforms[p][TYPE_TRANSLATION["#{instance_type['type']}.#{size}"]] = v
|
52
48
|
end
|
53
49
|
end
|
54
50
|
end
|
@@ -56,12 +52,8 @@ class AWSCosts::EC2OnDemand
|
|
56
52
|
end
|
57
53
|
result
|
58
54
|
end
|
59
|
-
self.new(
|
55
|
+
type == 'sles' ? self.new(transformed[region]['linux']) :self.new(transformed[region][type])
|
60
56
|
end
|
61
57
|
|
62
|
-
private
|
63
|
-
def self.cache
|
64
|
-
@@cache ||= {}
|
65
|
-
end
|
66
58
|
end
|
67
59
|
|
@@ -38,19 +38,17 @@ class AWSCosts::EC2ReservedInstances
|
|
38
38
|
if size
|
39
39
|
@data["#{TERMS[term]}Hourly"][size]
|
40
40
|
else
|
41
|
-
@data["#{TERMS[term]}Hourly"]
|
41
|
+
@data["#{TERMS[term]}Hourly"]
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
|
46
46
|
def self.fetch type, utilisation, region
|
47
|
-
|
47
|
+
transformed= AWSCosts::Cache.get("/ec2/pricing/json/#{type}-ri-#{utilisation}.json") do |data|
|
48
48
|
result = {}
|
49
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/ec2/pricing/json/#{AWSCosts::EC2::TYPES[type]}-ri-#{utilisation}.json").body)
|
50
49
|
data['config']['regions'].each do |region|
|
51
50
|
platforms = {}
|
52
51
|
region['instanceTypes'].each do |instance_type|
|
53
|
-
type = instance_type['type']
|
54
52
|
instance_type['sizes'].each do |instance_size|
|
55
53
|
size = instance_size['size']
|
56
54
|
platform_cost = Hash.new({})
|
@@ -61,7 +59,7 @@ class AWSCosts::EC2ReservedInstances
|
|
61
59
|
|
62
60
|
platform_cost.each_pair do |p,v|
|
63
61
|
platforms[p] = {} unless platforms.key?(p)
|
64
|
-
platforms[p][TYPE_TRANSLATION["#{type}.#{size}"]] = v
|
62
|
+
platforms[p][TYPE_TRANSLATION["#{instance_type['type']}.#{size}"]] = v
|
65
63
|
end
|
66
64
|
end
|
67
65
|
end
|
@@ -69,13 +67,8 @@ class AWSCosts::EC2ReservedInstances
|
|
69
67
|
end
|
70
68
|
result
|
71
69
|
end
|
72
|
-
self.new(
|
70
|
+
self.new(transformed[region])
|
73
71
|
end
|
74
72
|
|
75
|
-
|
76
|
-
private
|
77
|
-
def self.cache
|
78
|
-
@@cache ||= {}
|
79
|
-
end
|
80
73
|
end
|
81
74
|
|
data/lib/awscosts/emr.rb
CHANGED
@@ -31,9 +31,8 @@ class AWSCosts::EMR
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.fetch region
|
34
|
-
|
34
|
+
transformed= AWSCosts::Cache.get("/elasticmapreduce/pricing/pricing-emr.json") do |data|
|
35
35
|
result = {}
|
36
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/elasticmapreduce/pricing/pricing-emr.json").body)
|
37
36
|
data['config']['regions'].each do |region|
|
38
37
|
platforms = {}
|
39
38
|
region['instanceTypes'].each do |instance_type|
|
@@ -54,12 +53,8 @@ class AWSCosts::EMR
|
|
54
53
|
end
|
55
54
|
result
|
56
55
|
end
|
57
|
-
self.new(
|
56
|
+
self.new(transformed[region])
|
58
57
|
end
|
59
58
|
|
60
|
-
private
|
61
|
-
def self.cache
|
62
|
-
@@cache ||= {}
|
63
|
-
end
|
64
59
|
end
|
65
60
|
|
@@ -14,9 +14,8 @@ class AWSCosts::S3DataTransfer
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.fetch region
|
17
|
-
|
17
|
+
transformed= AWSCosts::Cache.get("/s3/pricing/pricing-data-transfer.json") do |data|
|
18
18
|
result = {}
|
19
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-data-transfer.json").body)
|
20
19
|
data['config']['regions'].each do |region|
|
21
20
|
types = {}
|
22
21
|
region['types'].each do |type|
|
@@ -29,7 +28,7 @@ class AWSCosts::S3DataTransfer
|
|
29
28
|
end
|
30
29
|
result
|
31
30
|
end
|
32
|
-
self.new(
|
31
|
+
self.new(transformed[region])
|
33
32
|
end
|
34
33
|
|
35
34
|
end
|
data/lib/awscosts/s3_requests.rb
CHANGED
@@ -3,8 +3,6 @@ require 'json'
|
|
3
3
|
|
4
4
|
class AWSCosts::S3Requests
|
5
5
|
|
6
|
-
TIERS = %w{putcopypost, glacierRequests, deleteRequests, getEtc, glacierDataRestore}
|
7
|
-
|
8
6
|
def initialize data
|
9
7
|
@data= data
|
10
8
|
end
|
@@ -14,9 +12,8 @@ class AWSCosts::S3Requests
|
|
14
12
|
end
|
15
13
|
|
16
14
|
def self.fetch region
|
17
|
-
|
15
|
+
transformed= AWSCosts::Cache.get("/s3/pricing/pricing-requests.json") do |data|
|
18
16
|
result = {}
|
19
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-requests.json").body)
|
20
17
|
data['config']['regions'].each do |region|
|
21
18
|
tiers = {}
|
22
19
|
region['tiers'].each do |tier|
|
@@ -26,7 +23,7 @@ class AWSCosts::S3Requests
|
|
26
23
|
end
|
27
24
|
result
|
28
25
|
end
|
29
|
-
self.new(
|
26
|
+
self.new(transformed[region])
|
30
27
|
end
|
31
28
|
|
32
29
|
end
|
data/lib/awscosts/s3_storage.rb
CHANGED
@@ -3,8 +3,6 @@ require 'json'
|
|
3
3
|
|
4
4
|
class AWSCosts::S3Storage
|
5
5
|
|
6
|
-
TIERS = %w{firstTBstorage, next49TBstorage, next49TBstorage, next501TBstorage}
|
7
|
-
|
8
6
|
def initialize data
|
9
7
|
@data= data
|
10
8
|
end
|
@@ -14,9 +12,8 @@ class AWSCosts::S3Storage
|
|
14
12
|
end
|
15
13
|
|
16
14
|
def self.fetch region
|
17
|
-
|
15
|
+
transformed= AWSCosts::Cache.get("/s3/pricing/pricing-storage.json") do |data|
|
18
16
|
result = {}
|
19
|
-
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-storage.json").body)
|
20
17
|
data['config']['regions'].each do |region|
|
21
18
|
tiers = {}
|
22
19
|
region['tiers'].each do |tier|
|
@@ -30,9 +27,8 @@ class AWSCosts::S3Storage
|
|
30
27
|
end
|
31
28
|
result
|
32
29
|
end
|
33
|
-
self.new(
|
30
|
+
self.new(transformed[region])
|
34
31
|
end
|
35
32
|
|
36
33
|
end
|
37
34
|
|
38
|
-
|
data/lib/awscosts/version.rb
CHANGED
data/lib/awscosts.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AWSCosts::EBS do
|
4
|
+
use_vcr_cassette
|
5
|
+
|
6
|
+
subject { AWSCosts.region('ap-southeast-2').ec2.ebs}
|
7
|
+
|
8
|
+
describe 'standard EBS volume' do
|
9
|
+
let(:price) { subject.price(:standard) }
|
10
|
+
|
11
|
+
it 'should provide price per GB / month for provisioned storage' do
|
12
|
+
price['perGBmoProvStorage'].should > 0
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should provide price per Million requests per month' do
|
16
|
+
price['perMMIOreq'].should > 0
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'provisioned IOPS price' do
|
21
|
+
let(:price) { subject.price(:provisioned_iops) }
|
22
|
+
|
23
|
+
it 'should provide price per GB / month for provisioned storage' do
|
24
|
+
price['perGBmoProvStorage'].should > 0
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should provide a price per PIOPS' do
|
28
|
+
price['perPIOPSreq'].should > 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'Snapshots to S3' do
|
33
|
+
let(:price) { subject.price(:snapshots_to_s3) }
|
34
|
+
|
35
|
+
it 'should provide a price per GB stored / month' do
|
36
|
+
price['perGBmoDataStored'].should > 0
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AWSCosts::EC2OnDemand do
|
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
|
8
|
+
|
9
|
+
subject { AWSCosts.region('ap-southeast-2').ec2.on_demand(type)}
|
10
|
+
|
11
|
+
its(:price) { should have_key('m1.small') }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AWSCosts::EC2ReservedInstances do
|
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
|
8
|
+
|
9
|
+
subject { AWSCosts.region('ap-southeast-1').ec2.reserved(type)}
|
10
|
+
|
11
|
+
it 'upfront price for 1 year term' do
|
12
|
+
subject.upfront(:one_year).should have_key('m1.small')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'upfront price for 3 year term' do
|
16
|
+
subject.upfront(:three_year).should have_key('m1.small')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'hourly price for 1 year term' do
|
20
|
+
subject.hourly(:one_year).should have_key('m1.small')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'hourly price for 3 year term' do
|
24
|
+
subject.hourly(:three_year).should have_key('m1.small')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AWSCosts::EMR do
|
4
|
+
use_vcr_cassette
|
5
|
+
|
6
|
+
subject { AWSCosts.region('eu-west-1').emr}
|
7
|
+
|
8
|
+
it 'should provide an EMR price' do
|
9
|
+
subject.emr_price('m1.xlarge') { should > 0 }
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should provide an EMR EC2 price' do
|
13
|
+
subject.ec2_price('m1.xlarge') { should > 0 }
|
14
|
+
end
|
15
|
+
end
|
data/spec/spec_helper.rb
CHANGED
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
|
+
version: 0.0.4
|
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-
|
12
|
+
date: 2013-05-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -75,6 +75,38 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: vcr
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: fakeweb
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
78
110
|
description: AWSCosts provides an easier way to calculate the costs of running your
|
79
111
|
project in AWS
|
80
112
|
email:
|
@@ -89,8 +121,28 @@ files:
|
|
89
121
|
- README.md
|
90
122
|
- Rakefile
|
91
123
|
- awscosts.gemspec
|
124
|
+
- fixtures/vcr_cassettes/AWSCosts_EBS.yml
|
125
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_linux.yml
|
126
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_rhel.yml
|
127
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_sles.yml
|
128
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows.yml
|
129
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql.yml
|
130
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql_web.yml
|
131
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_linux.yml
|
132
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_rhel.yml
|
133
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_sles.yml
|
134
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows.yml
|
135
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql.yml
|
136
|
+
- fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql_web.yml
|
137
|
+
- fixtures/vcr_cassettes/AWSCosts_ELB.yml
|
138
|
+
- fixtures/vcr_cassettes/AWSCosts_EMR.yml
|
139
|
+
- fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml
|
140
|
+
- fixtures/vcr_cassettes/AWSCosts_S3Requests.yml
|
141
|
+
- fixtures/vcr_cassettes/AWSCosts_S3Storage.yml
|
92
142
|
- lib/awscosts.rb
|
143
|
+
- lib/awscosts/cache.rb
|
93
144
|
- lib/awscosts/ec2.rb
|
145
|
+
- lib/awscosts/ec2_ebs.rb
|
94
146
|
- lib/awscosts/ec2_elb.rb
|
95
147
|
- lib/awscosts/ec2_on_demand.rb
|
96
148
|
- lib/awscosts/ec2_reserved_instances.rb
|
@@ -101,8 +153,16 @@ files:
|
|
101
153
|
- lib/awscosts/s3_requests.rb
|
102
154
|
- lib/awscosts/s3_storage.rb
|
103
155
|
- lib/awscosts/version.rb
|
156
|
+
- spec/awscosts/ec2_ebs_spec.rb
|
157
|
+
- spec/awscosts/ec2_elb_spec.rb
|
158
|
+
- spec/awscosts/ec2_on_demand_spec.rb
|
159
|
+
- spec/awscosts/ec2_reserved_instances_spec.rb
|
104
160
|
- spec/awscosts/ec2_spec.rb
|
161
|
+
- spec/awscosts/emr_spec.rb
|
105
162
|
- spec/awscosts/region_spec.rb
|
163
|
+
- spec/awscosts/s3_data_transfer_spec.rb
|
164
|
+
- spec/awscosts/s3_requests_spec.rb
|
165
|
+
- spec/awscosts/s3_storage_spec.rb
|
106
166
|
- spec/spec_helper.rb
|
107
167
|
homepage: https://github.com/srbartlett/awscosts
|
108
168
|
licenses:
|
@@ -119,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
179
|
version: '0'
|
120
180
|
segments:
|
121
181
|
- 0
|
122
|
-
hash:
|
182
|
+
hash: -1851467363620844181
|
123
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
184
|
none: false
|
125
185
|
requirements:
|
@@ -128,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
188
|
version: '0'
|
129
189
|
segments:
|
130
190
|
- 0
|
131
|
-
hash:
|
191
|
+
hash: -1851467363620844181
|
132
192
|
requirements: []
|
133
193
|
rubyforge_project:
|
134
194
|
rubygems_version: 1.8.23
|
@@ -136,6 +196,14 @@ signing_key:
|
|
136
196
|
specification_version: 3
|
137
197
|
summary: Programmatic access to AWS pricing
|
138
198
|
test_files:
|
199
|
+
- spec/awscosts/ec2_ebs_spec.rb
|
200
|
+
- spec/awscosts/ec2_elb_spec.rb
|
201
|
+
- spec/awscosts/ec2_on_demand_spec.rb
|
202
|
+
- spec/awscosts/ec2_reserved_instances_spec.rb
|
139
203
|
- spec/awscosts/ec2_spec.rb
|
204
|
+
- spec/awscosts/emr_spec.rb
|
140
205
|
- spec/awscosts/region_spec.rb
|
206
|
+
- spec/awscosts/s3_data_transfer_spec.rb
|
207
|
+
- spec/awscosts/s3_requests_spec.rb
|
208
|
+
- spec/awscosts/s3_storage_spec.rb
|
141
209
|
- spec/spec_helper.rb
|