fog-aws 1.2.1 → 1.3.0
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 +4 -4
 - data/CHANGELOG.md +16 -1
 - data/lib/fog/aws/compute.rb +6 -0
 - data/lib/fog/aws/models/compute/flavors.rb +60 -0
 - data/lib/fog/aws/models/compute/volume.rb +41 -22
 - data/lib/fog/aws/models/compute/vpc.rb +34 -0
 - data/lib/fog/aws/models/rds/security_group.rb +4 -2
 - data/lib/fog/aws/models/storage/file.rb +1 -1
 - data/lib/fog/aws/parsers/compute/describe_volumes_modifications.rb +30 -0
 - data/lib/fog/aws/parsers/compute/describe_vpc_classic_link.rb +3 -1
 - data/lib/fog/aws/parsers/compute/describe_vpc_classic_link_dns_support.rb +26 -0
 - data/lib/fog/aws/parsers/compute/modify_volume.rb +26 -0
 - data/lib/fog/aws/rds.rb +1 -1
 - data/lib/fog/aws/requests/compute/attach_classic_link_vpc.rb +3 -3
 - data/lib/fog/aws/requests/compute/create_vpc.rb +10 -9
 - data/lib/fog/aws/requests/compute/describe_volumes_modifications.rb +93 -0
 - data/lib/fog/aws/requests/compute/describe_vpc_classic_link.rb +2 -1
 - data/lib/fog/aws/requests/compute/describe_vpc_classic_link_dns_support.rb +53 -0
 - data/lib/fog/aws/requests/compute/detach_classic_link_vpc.rb +1 -3
 - data/lib/fog/aws/requests/compute/disable_vpc_classic_link_dns_support.rb +45 -0
 - data/lib/fog/aws/requests/compute/enable_vpc_classic_link_dns_support.rb +45 -0
 - data/lib/fog/aws/requests/compute/modify_volume.rb +88 -0
 - data/lib/fog/aws/requests/rds/authorize_db_security_group_ingress.rb +10 -5
 - data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +3 -4
 - data/lib/fog/aws/requests/rds/delete_db_subnet_group.rb +2 -0
 - data/lib/fog/aws/requests/rds/revoke_db_security_group_ingress.rb +9 -4
 - data/lib/fog/aws/version.rb +1 -1
 - data/tests/models/compute/volume_tests.rb +16 -1
 - data/tests/models/compute/vpc_tests.rb +23 -1
 - data/tests/models/rds/security_group_tests.rb +30 -6
 - data/tests/requests/compute/volume_tests.rb +42 -2
 - data/tests/requests/compute/vpc_tests.rb +41 -5
 - metadata +10 -2
 
| 
         @@ -0,0 +1,93 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Fog
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Compute
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AWS
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Real
         
     | 
| 
      
 5 
     | 
    
         
            +
                    require 'fog/aws/parsers/compute/describe_volumes_modifications'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    # Reports the current modification status of EBS volumes.
         
     | 
| 
      
 8 
     | 
    
         
            +
                    #
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # ==== Parameters
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # * filters<~Hash> - List of filters to limit results with
         
     | 
| 
      
 11 
     | 
    
         
            +
                    #
         
     | 
| 
      
 12 
     | 
    
         
            +
                    # ==== Returns
         
     | 
| 
      
 13 
     | 
    
         
            +
                    # * response<~Excon::Response>:
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #   * body<~Hash>
         
     | 
| 
      
 15 
     | 
    
         
            +
                    #     * 'volumeModificationSet'<~Array>:
         
     | 
| 
      
 16 
     | 
    
         
            +
                    #       * 'targetIops'<~Integer> - Target IOPS rate of the volume being modified.
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #       * 'originalIops'<~Integer> - Original IOPS rate of the volume being modified.
         
     | 
| 
      
 18 
     | 
    
         
            +
                    #       * 'modificationState'<~String> - Current state of modification. Modification state is null for unmodified volumes.
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #       * 'targetSize'<~Integer> - Target size of the volume being modified.
         
     | 
| 
      
 20 
     | 
    
         
            +
                    #       * 'targetVolumeType'<~String> - Target EBS volume type of the volume being modified.
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #       * 'volumeId'<~String> - ID of the volume being modified.
         
     | 
| 
      
 22 
     | 
    
         
            +
                    #       * 'progress'<~Integer> - Modification progress from 0 to 100%.
         
     | 
| 
      
 23 
     | 
    
         
            +
                    #       * 'startTime'<~Time> - Modification start time
         
     | 
| 
      
 24 
     | 
    
         
            +
                    #       * 'endTime'<~Time> - Modification end time
         
     | 
| 
      
 25 
     | 
    
         
            +
                    #       * 'originalSize'<~Integer> - Original size of the volume being modified.
         
     | 
| 
      
 26 
     | 
    
         
            +
                    #       * 'originalVolumeType'<~String> - Original EBS volume type of the volume being modified.
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    def describe_volumes_modifications(filters = {})
         
     | 
| 
      
 29 
     | 
    
         
            +
                      params = {}
         
     | 
| 
      
 30 
     | 
    
         
            +
                      if volume_id = filters.delete('volume-id')
         
     | 
| 
      
 31 
     | 
    
         
            +
                        params.merge!(Fog::AWS.indexed_param('VolumeId.%d', [*volume_id]))
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
                      params.merge!(Fog::AWS.indexed_filters(filters))
         
     | 
| 
      
 34 
     | 
    
         
            +
                      request({
         
     | 
| 
      
 35 
     | 
    
         
            +
                        'Action'    => 'DescribeVolumesModifications',
         
     | 
| 
      
 36 
     | 
    
         
            +
                        :idempotent => true,
         
     | 
| 
      
 37 
     | 
    
         
            +
                        :parser     => Fog::Parsers::Compute::AWS::DescribeVolumesModifications.new
         
     | 
| 
      
 38 
     | 
    
         
            +
                      }.merge(params))
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  class Mock
         
     | 
| 
      
 43 
     | 
    
         
            +
                    def describe_volumes_modifications(filters = {})
         
     | 
| 
      
 44 
     | 
    
         
            +
                      response = Excon::Response.new
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      modification_set = self.data[:volume_modifications].values
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                      aliases = {
         
     | 
| 
      
 49 
     | 
    
         
            +
                        'volume-id'            => 'volumeId',
         
     | 
| 
      
 50 
     | 
    
         
            +
                        'modification-state'   => 'modificationState',
         
     | 
| 
      
 51 
     | 
    
         
            +
                        'target-size'          => 'targetSize',
         
     | 
| 
      
 52 
     | 
    
         
            +
                        'target-iops'          => 'targetIops',
         
     | 
| 
      
 53 
     | 
    
         
            +
                        'target-volume-type'   => 'targetVolumeType',
         
     | 
| 
      
 54 
     | 
    
         
            +
                        'original-size'        => 'originalSize',
         
     | 
| 
      
 55 
     | 
    
         
            +
                        'original-iops'        => 'originalIops',
         
     | 
| 
      
 56 
     | 
    
         
            +
                        'original-volume-type' => 'originalVolumeType',
         
     | 
| 
      
 57 
     | 
    
         
            +
                        'start-time'           => 'startTime'
         
     | 
| 
      
 58 
     | 
    
         
            +
                      }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                      attribute_aliases = {
         
     | 
| 
      
 61 
     | 
    
         
            +
                        'targetSize'       => 'size',
         
     | 
| 
      
 62 
     | 
    
         
            +
                        'targetVolumeType' => 'volumeType',
         
     | 
| 
      
 63 
     | 
    
         
            +
                        'targetIops'       => 'iops'
         
     | 
| 
      
 64 
     | 
    
         
            +
                      }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                      for filter_key, filter_value in filters
         
     | 
| 
      
 67 
     | 
    
         
            +
                        aliased_key = aliases[filter_key]
         
     | 
| 
      
 68 
     | 
    
         
            +
                        modification_set = modification_set.reject { |m| ![*filter_value].include?(m[aliased_key]) }
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                      modification_set.each do |modification|
         
     | 
| 
      
 72 
     | 
    
         
            +
                        case modification['modificationState']
         
     | 
| 
      
 73 
     | 
    
         
            +
                        when 'modifying'
         
     | 
| 
      
 74 
     | 
    
         
            +
                          volume = self.data[:volumes][modification['volumeId']]
         
     | 
| 
      
 75 
     | 
    
         
            +
                          modification['modificationState'] = 'optimizing'
         
     | 
| 
      
 76 
     | 
    
         
            +
                          %w(targetSize targetIops targetVolumeType).each do |attribute|
         
     | 
| 
      
 77 
     | 
    
         
            +
                            aliased_attribute = attribute_aliases[attribute]
         
     | 
| 
      
 78 
     | 
    
         
            +
                            volume[aliased_attribute] = modification[attribute] if modification[attribute]
         
     | 
| 
      
 79 
     | 
    
         
            +
                          end
         
     | 
| 
      
 80 
     | 
    
         
            +
                          self.data[:volumes][modification['volumeId']] = volume
         
     | 
| 
      
 81 
     | 
    
         
            +
                        when 'optimizing'
         
     | 
| 
      
 82 
     | 
    
         
            +
                          modification['modificationState'] = 'completed'
         
     | 
| 
      
 83 
     | 
    
         
            +
                          modification['endTime']           = Time.now
         
     | 
| 
      
 84 
     | 
    
         
            +
                        end
         
     | 
| 
      
 85 
     | 
    
         
            +
                      end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                      response.body = {'requestId' => Fog::AWS::Mock.request_id, 'volumeModificationSet' => modification_set}
         
     | 
| 
      
 88 
     | 
    
         
            +
                      response
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
      
 93 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -45,7 +45,7 @@ module Fog 
     | 
|
| 
       45 
45 
     | 
    
         
             
                      vpcs = apply_tag_filters(vpcs, options[:filters], 'vpcId') if options[:filters]
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                      response.status = 200
         
     | 
| 
       48 
     | 
    
         
            -
                      vpc_data = vpcs.collect do |vpc| 
     | 
| 
      
 48 
     | 
    
         
            +
                      vpc_data = vpcs.collect do |vpc|
         
     | 
| 
       49 
49 
     | 
    
         
             
                        {
         
     | 
| 
       50 
50 
     | 
    
         
             
                          'vpcId' => vpc['vpcId'],
         
     | 
| 
       51 
51 
     | 
    
         
             
                          'classicLinkEnabled' => vpc['classicLinkEnabled'],
         
     | 
| 
         @@ -56,6 +56,7 @@ module Fog 
     | 
|
| 
       56 
56 
     | 
    
         
             
                        'requestId' => Fog::AWS::Mock.request_id,
         
     | 
| 
       57 
57 
     | 
    
         
             
                        'vpcSet' => vpc_data
         
     | 
| 
       58 
58 
     | 
    
         
             
                      }
         
     | 
| 
      
 59 
     | 
    
         
            +
                      response
         
     | 
| 
       59 
60 
     | 
    
         
             
                    end
         
     | 
| 
       60 
61 
     | 
    
         
             
                  end
         
     | 
| 
       61 
62 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Fog
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Compute
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AWS
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Real
         
     | 
| 
      
 5 
     | 
    
         
            +
                    require 'fog/aws/parsers/compute/describe_vpc_classic_link_dns_support'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    # escribes the ClassicLink DNS support status of one or more VPCs
         
     | 
| 
      
 8 
     | 
    
         
            +
                    #
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # ==== Parameters
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # * options<~Hash>
         
     | 
| 
      
 11 
     | 
    
         
            +
                    #   * vpc_ids<~Array> - An array of vpc ids to restrict results to
         
     | 
| 
      
 12 
     | 
    
         
            +
                    #   * 'MaxResults'    - Maximum number of items to return
         
     | 
| 
      
 13 
     | 
    
         
            +
                    #   * 'NextToken'     - The token for the next set of items to return
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #
         
     | 
| 
      
 15 
     | 
    
         
            +
                    # ==== Returns
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # * response<~Excon::Response>:
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #   * body<~Hash>:
         
     | 
| 
      
 18 
     | 
    
         
            +
                    #     * 'requestId'<~String> - Id of the request
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #     * 'vpcs'<~Array>       - Information about the ClassicLink DNS support status of the VPCs
         
     | 
| 
      
 20 
     | 
    
         
            +
                    #       * 'vpcId'<~String>
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #       * 'classicLinkDnsSupported'<~Boolean>
         
     | 
| 
      
 22 
     | 
    
         
            +
                    #
         
     | 
| 
      
 23 
     | 
    
         
            +
                    # http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcClassicLinkDnsSupport.html
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    def describe_vpc_classic_link_dns_support(options={})
         
     | 
| 
      
 26 
     | 
    
         
            +
                      params = {}
         
     | 
| 
      
 27 
     | 
    
         
            +
                      params.merge!(Fog::AWS.indexed_param('VpcIds', options[:vpc_ids])) if options[:vpc_ids]
         
     | 
| 
      
 28 
     | 
    
         
            +
                      request({
         
     | 
| 
      
 29 
     | 
    
         
            +
                        'Action'     => 'DescribeVpcClassicLinkDnsSupport',
         
     | 
| 
      
 30 
     | 
    
         
            +
                        'MaxResults' => options['MaxResults'],
         
     | 
| 
      
 31 
     | 
    
         
            +
                        'NextToken'  => options['NextToken'],
         
     | 
| 
      
 32 
     | 
    
         
            +
                        :parser      => Fog::Parsers::Compute::AWS::DescribeVpcClassicLinkDnsSupport.new
         
     | 
| 
      
 33 
     | 
    
         
            +
                      }.merge(params))
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  class Mock
         
     | 
| 
      
 38 
     | 
    
         
            +
                    def describe_vpc_classic_link_dns_support(options={})
         
     | 
| 
      
 39 
     | 
    
         
            +
                      response = Excon::Response.new
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      vpcs = self.data[:vpcs]
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                      if options[:vpc_ids]
         
     | 
| 
      
 44 
     | 
    
         
            +
                        vpcs = vpcs.select { |v| options[:vpc_ids].include?(v['vpcId']) }
         
     | 
| 
      
 45 
     | 
    
         
            +
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                      response.body = {'vpcs' => vpcs.map { |v| {"vpcId" => v['vpcId'], "classicLinkDnsSupported" => v['classicLinkDnsSupport']} } }
         
     | 
| 
      
 48 
     | 
    
         
            +
                      response
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -26,7 +26,6 @@ module Fog 
     | 
|
| 
       26 
26 
     | 
    
         
             
                        'DryRun'    => dry_run,
         
     | 
| 
       27 
27 
     | 
    
         
             
                        :parser     => Fog::Parsers::Compute::AWS::Basic.new
         
     | 
| 
       28 
28 
     | 
    
         
             
                      )
         
     | 
| 
       29 
     | 
    
         
            -
                      
         
     | 
| 
       30 
29 
     | 
    
         
             
                    end
         
     | 
| 
       31 
30 
     | 
    
         
             
                  end
         
     | 
| 
       32 
31 
     | 
    
         | 
| 
         @@ -47,12 +46,11 @@ module Fog 
     | 
|
| 
       47 
46 
     | 
    
         
             
                          instance['classicLinkVpcId'] = nil
         
     | 
| 
       48 
47 
     | 
    
         
             
                        end
         
     | 
| 
       49 
48 
     | 
    
         
             
                        response
         
     | 
| 
       50 
     | 
    
         
            -
                      elsif !instance 
     | 
| 
      
 49 
     | 
    
         
            +
                      elsif !instance
         
     | 
| 
       51 
50 
     | 
    
         
             
                        raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_id}' does not exist.")
         
     | 
| 
       52 
51 
     | 
    
         
             
                      elsif !vpc
         
     | 
| 
       53 
52 
     | 
    
         
             
                        raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist.")
         
     | 
| 
       54 
53 
     | 
    
         
             
                      end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
54 
     | 
    
         
             
                    end
         
     | 
| 
       57 
55 
     | 
    
         
             
                  end
         
     | 
| 
       58 
56 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Fog
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Compute
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AWS
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Real
         
     | 
| 
      
 5 
     | 
    
         
            +
                    require 'fog/aws/parsers/compute/basic'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    # Disables DNS hostname resolution for ClassicLink
         
     | 
| 
      
 8 
     | 
    
         
            +
                    #
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # ==== Parameters
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # * vpc_id<~String> - The ID of the ClassicLink-enabled VPC.
         
     | 
| 
      
 11 
     | 
    
         
            +
                    #
         
     | 
| 
      
 12 
     | 
    
         
            +
                    # ==== Returns
         
     | 
| 
      
 13 
     | 
    
         
            +
                    # * response<~Excon::Response>:
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #   * body<~Hash>:
         
     | 
| 
      
 15 
     | 
    
         
            +
                    #     * 'requestId'<~String> - Id of the request
         
     | 
| 
      
 16 
     | 
    
         
            +
                    #     * 'return'<~Boolean>   - Whether the request succeeded
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #
         
     | 
| 
      
 18 
     | 
    
         
            +
                    # http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisableVpcClassicLinkDnsSupport.html
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    def disable_vpc_classic_link_dns_support(vpc_id)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      request(
         
     | 
| 
      
 22 
     | 
    
         
            +
                        'Action' => 'DisableVpcClassicLinkDnsSupport',
         
     | 
| 
      
 23 
     | 
    
         
            +
                        'VpcId'  => vpc_id,
         
     | 
| 
      
 24 
     | 
    
         
            +
                        :parser  => Fog::Parsers::Compute::AWS::Basic.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                      )
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  class Mock
         
     | 
| 
      
 30 
     | 
    
         
            +
                    def disable_vpc_classic_link_dns_support(vpc_id)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      response = Excon::Response.new
         
     | 
| 
      
 32 
     | 
    
         
            +
                      unless vpc = self.data[:vpcs].find { |v| v['vpcId'] == vpc_id }
         
     | 
| 
      
 33 
     | 
    
         
            +
                        raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
         
     | 
| 
      
 34 
     | 
    
         
            +
                      end
         
     | 
| 
      
 35 
     | 
    
         
            +
                      vpc['classicLinkDnsSupport'] = false
         
     | 
| 
      
 36 
     | 
    
         
            +
                      response.body = {
         
     | 
| 
      
 37 
     | 
    
         
            +
                        'requestId' => Fog::AWS::Mock.request_id,
         
     | 
| 
      
 38 
     | 
    
         
            +
                        'return'    => true
         
     | 
| 
      
 39 
     | 
    
         
            +
                      }
         
     | 
| 
      
 40 
     | 
    
         
            +
                      response
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Fog
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Compute
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AWS
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Real
         
     | 
| 
      
 5 
     | 
    
         
            +
                    require 'fog/aws/parsers/compute/basic'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    # Enables a VPC to support DNS hostname resolution for ClassicLink
         
     | 
| 
      
 8 
     | 
    
         
            +
                    #
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # ==== Parameters
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # * vpc_id<~String> - The ID of the ClassicLink-enabled VPC.
         
     | 
| 
      
 11 
     | 
    
         
            +
                    #
         
     | 
| 
      
 12 
     | 
    
         
            +
                    # ==== Returns
         
     | 
| 
      
 13 
     | 
    
         
            +
                    # * response<~Excon::Response>:
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #   * body<~Hash>:
         
     | 
| 
      
 15 
     | 
    
         
            +
                    #     * 'requestId'<~String> - Id of the request
         
     | 
| 
      
 16 
     | 
    
         
            +
                    #     * 'return'<~Boolean>   - Whether the request succeeded
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #
         
     | 
| 
      
 18 
     | 
    
         
            +
                    # http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EnableVpcClassicLinkDnsSupport.html
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    def enable_vpc_classic_link_dns_support(vpc_id)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      request(
         
     | 
| 
      
 22 
     | 
    
         
            +
                        'Action' => 'EnableVpcClassicLinkDnsSupport',
         
     | 
| 
      
 23 
     | 
    
         
            +
                        'VpcId'  => vpc_id,
         
     | 
| 
      
 24 
     | 
    
         
            +
                        :parser  => Fog::Parsers::Compute::AWS::Basic.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                      )
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  class Mock
         
     | 
| 
      
 30 
     | 
    
         
            +
                    def enable_vpc_classic_link_dns_support(vpc_id)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      response = Excon::Response.new
         
     | 
| 
      
 32 
     | 
    
         
            +
                      unless vpc = self.data[:vpcs].find { |v| v['vpcId'] == vpc_id }
         
     | 
| 
      
 33 
     | 
    
         
            +
                        raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
         
     | 
| 
      
 34 
     | 
    
         
            +
                      end
         
     | 
| 
      
 35 
     | 
    
         
            +
                      vpc['classicLinkDnsSupport'] = true
         
     | 
| 
      
 36 
     | 
    
         
            +
                      response.body = {
         
     | 
| 
      
 37 
     | 
    
         
            +
                        'requestId' => Fog::AWS::Mock.request_id,
         
     | 
| 
      
 38 
     | 
    
         
            +
                        'return'    => true
         
     | 
| 
      
 39 
     | 
    
         
            +
                      }
         
     | 
| 
      
 40 
     | 
    
         
            +
                      response
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Fog
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Compute
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AWS
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Real
         
     | 
| 
      
 5 
     | 
    
         
            +
                    require 'fog/aws/parsers/compute/modify_volume'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    # Modifies a volume
         
     | 
| 
      
 8 
     | 
    
         
            +
                    #
         
     | 
| 
      
 9 
     | 
    
         
            +
                    # ==== Parameters
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # * volume_id<~String> - The ID of the volume
         
     | 
| 
      
 11 
     | 
    
         
            +
                    # * options<~Hash>:
         
     | 
| 
      
 12 
     | 
    
         
            +
                    #   * 'VolumeType'<~String> - Type of volume
         
     | 
| 
      
 13 
     | 
    
         
            +
                    #   * 'Size'<~Integer> - Size in GiBs fo the volume
         
     | 
| 
      
 14 
     | 
    
         
            +
                    #   * 'Iops'<~Integer> - Number of IOPS the volume supports
         
     | 
| 
      
 15 
     | 
    
         
            +
                    #
         
     | 
| 
      
 16 
     | 
    
         
            +
                    # ==== Response
         
     | 
| 
      
 17 
     | 
    
         
            +
                    # * response<~Excon::Response>:
         
     | 
| 
      
 18 
     | 
    
         
            +
                    #   * body<~Hash>:
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #     * 'targetIops'<~Integer> - Target IOPS rate of the volume being modified.
         
     | 
| 
      
 20 
     | 
    
         
            +
                    #     * 'originalIops'<~Integer> - Original IOPS rate of the volume being modified.
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #     * 'modificationState'<~String> - Current state of modification. Modification state is null for unmodified volumes.
         
     | 
| 
      
 22 
     | 
    
         
            +
                    #     * 'targetSize'<~Integer> - Target size of the volume being modified.
         
     | 
| 
      
 23 
     | 
    
         
            +
                    #     * 'targetVolumeType'<~String> - Target EBS volume type of the volume being modified.
         
     | 
| 
      
 24 
     | 
    
         
            +
                    #     * 'volumeId'<~String> - ID of the volume being modified.
         
     | 
| 
      
 25 
     | 
    
         
            +
                    #     * 'progress'<~Integer> - Modification progress from 0 to 100%.
         
     | 
| 
      
 26 
     | 
    
         
            +
                    #     * 'startTime'<~Time> - Modification start time
         
     | 
| 
      
 27 
     | 
    
         
            +
                    #     * 'endTime'<~Time> - Modification end time
         
     | 
| 
      
 28 
     | 
    
         
            +
                    #     * 'originalSize'<~Integer> - Original size of the volume being modified.
         
     | 
| 
      
 29 
     | 
    
         
            +
                    #     * 'originalVolumeType'<~String> - Original EBS volume type of the volume being modified.
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                    def modify_volume(volume_id, options={})
         
     | 
| 
      
 32 
     | 
    
         
            +
                      request({
         
     | 
| 
      
 33 
     | 
    
         
            +
                        'Action'   => "ModifyVolume",
         
     | 
| 
      
 34 
     | 
    
         
            +
                        'VolumeId' => volume_id,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        :parser    => Fog::Parsers::Compute::AWS::ModifyVolume.new
         
     | 
| 
      
 36 
     | 
    
         
            +
                      }.merge(options))
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  class Mock
         
     | 
| 
      
 41 
     | 
    
         
            +
                    def modify_volume(volume_id, options={})
         
     | 
| 
      
 42 
     | 
    
         
            +
                      response = Excon::Response.new
         
     | 
| 
      
 43 
     | 
    
         
            +
                      volume   = self.data[:volumes][volume_id]
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                      if volume["volumeType"] == 'standard' && options['VolumeType']
         
     | 
| 
      
 46 
     | 
    
         
            +
                        raise Fog::Compute::AWS::Error.new("InvalidParameterValue => Volume type EBS Magnetic is not supported.")
         
     | 
| 
      
 47 
     | 
    
         
            +
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                      volume_modification = {
         
     | 
| 
      
 50 
     | 
    
         
            +
                        'modificationState' => 'modifying',
         
     | 
| 
      
 51 
     | 
    
         
            +
                        'progress'          => 0,
         
     | 
| 
      
 52 
     | 
    
         
            +
                        'startTime'         => Time.now,
         
     | 
| 
      
 53 
     | 
    
         
            +
                        'volumeId'          => volume_id
         
     | 
| 
      
 54 
     | 
    
         
            +
                      }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                      if options['Size']
         
     | 
| 
      
 57 
     | 
    
         
            +
                        volume_modification.merge!(
         
     | 
| 
      
 58 
     | 
    
         
            +
                          'originalSize' => volume['size'],
         
     | 
| 
      
 59 
     | 
    
         
            +
                          'targetSize'   => options['Size']
         
     | 
| 
      
 60 
     | 
    
         
            +
                        )
         
     | 
| 
      
 61 
     | 
    
         
            +
                      end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                      if options['Iops']
         
     | 
| 
      
 64 
     | 
    
         
            +
                        volume_modification.merge!(
         
     | 
| 
      
 65 
     | 
    
         
            +
                          'originalIops' => volume['iops'],
         
     | 
| 
      
 66 
     | 
    
         
            +
                          'targetIops'   => options['Iops']
         
     | 
| 
      
 67 
     | 
    
         
            +
                        )
         
     | 
| 
      
 68 
     | 
    
         
            +
                      end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                      if options['VolumeType']
         
     | 
| 
      
 71 
     | 
    
         
            +
                        if options["VolumeType"] == 'standard'
         
     | 
| 
      
 72 
     | 
    
         
            +
                          raise Fog::Compute::AWS::Error.new("InvalidParameterValue => Volume type EBS Magnetic is not supported.")
         
     | 
| 
      
 73 
     | 
    
         
            +
                        end
         
     | 
| 
      
 74 
     | 
    
         
            +
                        volume_modification.merge!(
         
     | 
| 
      
 75 
     | 
    
         
            +
                          'originalVolumeType' => volume['volumeType'],
         
     | 
| 
      
 76 
     | 
    
         
            +
                          'targetVolumeType'   => options['VolumeType']
         
     | 
| 
      
 77 
     | 
    
         
            +
                        )
         
     | 
| 
      
 78 
     | 
    
         
            +
                      end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                      self.data[:volume_modifications][volume_id] = volume_modification
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                      response.body = {'volumeModification' => volume_modification, 'requestId' => Fog::AWS::Mock.request_id}
         
     | 
| 
      
 83 
     | 
    
         
            +
                      response
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -15,8 +15,8 @@ module Fog 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    # * response<~Excon::Response>:
         
     | 
| 
       16 
16 
     | 
    
         
             
                    #   * body<~Hash>:
         
     | 
| 
       17 
17 
     | 
    
         
             
                    def authorize_db_security_group_ingress(name, opts={})
         
     | 
| 
       18 
     | 
    
         
            -
                      unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
       19 
     | 
    
         
            -
                        raise ArgumentError, 'Must specify CIDRIP, or  
     | 
| 
      
 18 
     | 
    
         
            +
                      unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
      
 19 
     | 
    
         
            +
                        raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
         
     | 
| 
       20 
20 
     | 
    
         
             
                      end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                      request({
         
     | 
| 
         @@ -29,8 +29,13 @@ module Fog 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  class Mock
         
     | 
| 
       31 
31 
     | 
    
         
             
                    def authorize_db_security_group_ingress(name, opts = {})
         
     | 
| 
       32 
     | 
    
         
            -
                      unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
       33 
     | 
    
         
            -
                        raise ArgumentError, 'Must specify CIDRIP, or  
     | 
| 
      
 32 
     | 
    
         
            +
                      unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
      
 33 
     | 
    
         
            +
                        raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
         
     | 
| 
      
 34 
     | 
    
         
            +
                      end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                      if ec2_security_group_id = opts.delete("EC2SecurityGroupId")
         
     | 
| 
      
 37 
     | 
    
         
            +
                        ec2_security_group = (Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id][:security_groups] || {}).values.detect { |sg| sg['groupId'] == ec2_security_group_id }
         
     | 
| 
      
 38 
     | 
    
         
            +
                        opts['EC2SecurityGroupName'] = ec2_security_group['groupName']
         
     | 
| 
       34 
39 
     | 
    
         
             
                      end
         
     | 
| 
       35 
40 
     | 
    
         | 
| 
       36 
41 
     | 
    
         
             
                      response = Excon::Response.new
         
     | 
| 
         @@ -42,7 +47,7 @@ module Fog 
     | 
|
| 
       42 
47 
     | 
    
         
             
                          end
         
     | 
| 
       43 
48 
     | 
    
         
             
                          sec_group['IPRanges'] << opts.merge({"Status" => 'authorizing'})
         
     | 
| 
       44 
49 
     | 
    
         
             
                        else
         
     | 
| 
       45 
     | 
    
         
            -
                          if sec_group['EC2SecurityGroups'].find{|h| h['EC2SecurityGroupName'] == opts['EC2SecurityGroupName']}
         
     | 
| 
      
 50 
     | 
    
         
            +
                          if sec_group['EC2SecurityGroups'].find{|h| h['EC2SecurityGroupName'] == opts['EC2SecurityGroupName'] || h['EC2SecurityGroupId'] == opts['EC2SecurityGroupId']}
         
     | 
| 
       46 
51 
     | 
    
         
             
                            raise Fog::AWS::RDS::AuthorizationAlreadyExists.new("AuthorizationAlreadyExists => #{opts['EC2SecurityGroupName']} is alreay defined")
         
     | 
| 
       47 
52 
     | 
    
         
             
                          end
         
     | 
| 
       48 
53 
     | 
    
         
             
                          sec_group['EC2SecurityGroups'] << opts.merge({"Status" => 'authorizing'})
         
     | 
| 
         @@ -31,15 +31,14 @@ module Fog 
     | 
|
| 
       31 
31 
     | 
    
         
             
                      end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                      # collection = Fog::Compute::AWS.new(:aws_access_key_id => 'mock key', :aws_secret_access_key => 'mock secret')
         
     | 
| 
       34 
     | 
    
         
            -
                       
     | 
| 
       35 
     | 
    
         
            -
                      collection.region = @region
         
     | 
| 
      
 34 
     | 
    
         
            +
                      compute_data = Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id]
         
     | 
| 
       36 
35 
     | 
    
         | 
| 
       37 
36 
     | 
    
         
             
                      subnets = subnet_ids.map do |snid|
         
     | 
| 
       38 
     | 
    
         
            -
                        subnet =  
     | 
| 
      
 37 
     | 
    
         
            +
                        subnet = compute_data[:subnets].detect { |s| s['subnetId'] == snid }
         
     | 
| 
       39 
38 
     | 
    
         
             
                        raise Fog::AWS::RDS::NotFound.new("InvalidSubnet => The subnet '#{snid}' was not found") if subnet.nil?
         
     | 
| 
       40 
39 
     | 
    
         
             
                        subnet
         
     | 
| 
       41 
40 
     | 
    
         
             
                      end
         
     | 
| 
       42 
     | 
    
         
            -
                      vpc_id = subnets.first 
     | 
| 
      
 41 
     | 
    
         
            +
                      vpc_id = subnets.first['vpcId']
         
     | 
| 
       43 
42 
     | 
    
         | 
| 
       44 
43 
     | 
    
         
             
                      data = {
         
     | 
| 
       45 
44 
     | 
    
         
             
                        'DBSubnetGroupName' => name,
         
     | 
| 
         @@ -26,6 +26,8 @@ module Fog 
     | 
|
| 
       26 
26 
     | 
    
         
             
                        raise Fog::AWS::RDS::NotFound.new("DBSubnetGroupNotFound => The subnet group '#{name}' doesn't exists")
         
     | 
| 
       27 
27 
     | 
    
         
             
                      end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                      self.data[:subnet_groups].delete(name)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       29 
31 
     | 
    
         
             
                      response.body = {
         
     | 
| 
       30 
32 
     | 
    
         
             
                        'ResponseMetadata'=>{ 'RequestId'=> Fog::AWS::Mock.request_id },
         
     | 
| 
       31 
33 
     | 
    
         
             
                        'return' => true,
         
     | 
| 
         @@ -15,8 +15,8 @@ module Fog 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    # * response<~Excon::Response>:
         
     | 
| 
       16 
16 
     | 
    
         
             
                    #   * body<~Hash>:
         
     | 
| 
       17 
17 
     | 
    
         
             
                    def revoke_db_security_group_ingress(name, opts={})
         
     | 
| 
       18 
     | 
    
         
            -
                      unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
       19 
     | 
    
         
            -
                        raise ArgumentError, 'Must specify CIDRIP, or  
     | 
| 
      
 18 
     | 
    
         
            +
                      unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
      
 19 
     | 
    
         
            +
                        raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
         
     | 
| 
       20 
20 
     | 
    
         
             
                      end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                      request({
         
     | 
| 
         @@ -29,8 +29,13 @@ module Fog 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  class Mock
         
     | 
| 
       31 
31 
     | 
    
         
             
                    def revoke_db_security_group_ingress(name, opts = {})
         
     | 
| 
       32 
     | 
    
         
            -
                      unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
       33 
     | 
    
         
            -
                        raise ArgumentError, 'Must specify CIDRIP, or  
     | 
| 
      
 32 
     | 
    
         
            +
                      unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
         
     | 
| 
      
 33 
     | 
    
         
            +
                        raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
         
     | 
| 
      
 34 
     | 
    
         
            +
                      end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                      if ec2_security_group_id = opts.delete("EC2SecurityGroupId")
         
     | 
| 
      
 37 
     | 
    
         
            +
                        ec2_security_group = (Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id][:security_groups] || {}).values.detect { |sg| sg['groupId'] == ec2_security_group_id }
         
     | 
| 
      
 38 
     | 
    
         
            +
                        opts['EC2SecurityGroupName'] = ec2_security_group['groupName']
         
     | 
| 
       34 
39 
     | 
    
         
             
                      end
         
     | 
| 
       35 
40 
     | 
    
         | 
| 
       36 
41 
     | 
    
         
             
                      response = Excon::Response.new
         
     |