diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb index 50a35e80c..226c10c37 100644 --- a/lib/fog/aws.rb +++ b/lib/fog/aws.rb @@ -17,6 +17,7 @@ module Fog service(:elasticache, 'aws/elasticache', 'Elasticache') service(:elb, 'aws/elb', 'ELB') service(:emr, 'aws/emr', 'EMR') + service(:glacier, 'aws/glacier', 'Glacier') service(:iam, 'aws/iam', 'IAM') service(:rds, 'aws/rds', 'RDS') service(:ses, 'aws/ses', 'SES') diff --git a/lib/fog/aws/glacier.rb b/lib/fog/aws/glacier.rb new file mode 100644 index 000000000..b9c5da1ff --- /dev/null +++ b/lib/fog/aws/glacier.rb @@ -0,0 +1,91 @@ +require 'fog/aws' + +module Fog + module AWS + class Glacier < Fog::Service + extend Fog::AWS::CredentialFetcher::ServiceMethods + + requires :aws_access_key_id, :aws_secret_access_key + recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at + + request_path 'fog/aws/requests/glacier' + + class Mock + + def initialize(options={}) + Fog::Mock.not_implemented + end + + end + + class Real + include Fog::AWS::CredentialFetcher::ConnectionMethods + # Initialize connection to Glacier + # + # ==== Notes + # options parameter must include values for :aws_access_key_id and + # :aws_secret_access_key in order to create a connection + # + # ==== Examples + # ses = SES.new( + # :aws_access_key_id => your_aws_access_key_id, + # :aws_secret_access_key => your_aws_secret_access_key + # ) + # + # ==== Parameters + # * options<~Hash> - config arguments for connection. Defaults to {}. + # * region<~String> - optional region to use. For instance, 'us-east-1' and etc. + # + # ==== Returns + # * Glacier object with connection to AWS. + def initialize(options={}) + + @use_iam_profile = options[:use_iam_profile] + @region = options[:region] || 'us-east-1' + + setup_credentials(options) + + @connection_options = options[:connection_options] || {} + @host = options[:host] || "glacier.#{@region}.amazonaws.com" + @version = '2012-06-01' + @path = options[:path] || '/' + @persistent = options[:persistent] || false + @port = options[:port] || 443 + @scheme = options[:scheme] || 'https' + + @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options) + end + + + private + def setup_credentials(options) + @aws_access_key_id = options[:aws_access_key_id] + @aws_secret_access_key = options[:aws_secret_access_key] + @aws_session_token = options[:aws_session_token] + @aws_credentials_expire_at = options[:aws_credentials_expire_at] + + @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key,@region,'glacier') + end + + def request(params, &block) + refresh_credentials_if_expired + + date = Fog::Time.now + params[:headers]['Date'] = date.to_date_header + params[:headers]['x-amz-date'] = date.to_iso8601_basic + + params[:headers]['Host'] = @host + params[:headers]['x-amz-glacier-version'] = @version + params[:headers]['x-amz-security-token'] = @aws_session_token if @aws_session_token + params[:headers]['Authorization'] = @signer.sign params, date + + response = @connection.request(params, &block) + if response.headers['Content-Type'] == 'application/json' + response.body = Fog::JSON.decode(response.body) + end + response + end + end + end + end +end \ No newline at end of file diff --git a/lib/fog/bin/aws.rb b/lib/fog/bin/aws.rb index 235421594..71032fd72 100644 --- a/lib/fog/bin/aws.rb +++ b/lib/fog/bin/aws.rb @@ -25,6 +25,8 @@ class AWS < Fog::Bin Fog::AWS::ELB when :emr Fog::AWS::EMR + when :glacier + Fog::AWS::Glacier when :iam Fog::AWS::IAM when :sdb, :simpledb