awscosts 0.0.3 → 0.0.4
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/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
|