fog-aws 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 125c645ebeed2b422d66404b2fcf3e23730fe5ba
4
- data.tar.gz: 7fb02263e371b88b51e57127c8b4bda7cdfb124f
3
+ metadata.gz: 30d84e3705aeee14d91a9c82f15fb312a5f4c639
4
+ data.tar.gz: c0ad1b0157cdf4f1d5afc87e0db4abc1e1f33e64
5
5
  SHA512:
6
- metadata.gz: c7a3177a84c1f09c5ef485dd049fe0fba1e00c24860474f8739ba43d9c5d84023d52eee9449c03115d6eaea516cab9fea692e2c800d652b16d034f118c86cd4e
7
- data.tar.gz: 477129fcdaa3a34f10c5a394ef007c723ffb245e3b94d5e50a9ed8132d744141bdba62e680c47cbaf5033df46f9cce1a82b59b500376b1084d0a8b8b6655d413
6
+ metadata.gz: 43f3f056697c6d3407f6c4f0f7f6bc1ab0b7b50f01118a16fb7e095965da5d04edf044a01b8931c4b3c60c8cb8f00744b53160330ccaa3e190a20a5228e4a4e4
7
+ data.tar.gz: c5305530afe5c59a43f8cc93cfe9e0ab4cdbd6bdc6037a5b2790deff609ebdeb6a220a7aa1f48eb6c1b7f020e163098bc6ba586160dcb06cb52de2bb353f8dd6
@@ -53,6 +53,7 @@ module Fog
53
53
  request :associate_dhcp_options
54
54
  request :attach_network_interface
55
55
  request :associate_route_table
56
+ request :attach_classic_link_vpc
56
57
  request :attach_internet_gateway
57
58
  request :attach_volume
58
59
  request :authorize_security_group_ingress
@@ -96,6 +97,7 @@ module Fog
96
97
  request :describe_account_attributes
97
98
  request :describe_addresses
98
99
  request :describe_availability_zones
100
+ request :describe_classic_link_instances
99
101
  request :describe_dhcp_options
100
102
  request :describe_images
101
103
  request :describe_instances
@@ -121,11 +123,15 @@ module Fog
121
123
  request :describe_volume_status
122
124
  request :describe_vpcs
123
125
  request :describe_vpc_attribute
126
+ request :describe_vpc_classic_link
124
127
  request :detach_network_interface
125
128
  request :detach_internet_gateway
126
129
  request :detach_volume
130
+ request :detach_classic_link_vpc
131
+ request :disable_vpc_classic_link
127
132
  request :disassociate_address
128
133
  request :disassociate_route_table
134
+ request :enable_vpc_classic_link
129
135
  request :get_console_output
130
136
  request :get_password_data
131
137
  request :import_key_pair
@@ -454,7 +460,7 @@ module Fog
454
460
  @region = options[:region] ||= 'us-east-1'
455
461
  @instrumentor = options[:instrumentor]
456
462
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.compute'
457
- @version = options[:version] || '2014-06-15'
463
+ @version = options[:version] || '2014-10-01'
458
464
 
459
465
  @use_iam_profile = options[:use_iam_profile]
460
466
  setup_credentials(options)
@@ -0,0 +1,60 @@
1
+ module Fog
2
+ module Parsers
3
+ module Compute
4
+ module AWS
5
+ class DescribeClassicLinkInstances < Fog::Parsers::Base
6
+ def reset
7
+ @instance = { 'tagSet' => {}, 'groups' => [] }
8
+ @response = { 'instancesSet' => [] }
9
+ @tag = {}
10
+ @group = {}
11
+ end
12
+
13
+ def start_element(name, attrs = [])
14
+ super
15
+ case name
16
+ when 'groupSet'
17
+ @in_group_set = true
18
+ when 'tagSet'
19
+ @in_tag_set = true
20
+ end
21
+ end
22
+
23
+ def end_element(name)
24
+ if @in_tag_set
25
+ case name
26
+ when 'item'
27
+ @instance['tagSet'][@tag['key']] = @tag['value']
28
+ @tag = {}
29
+ when 'key', 'value'
30
+ @tag[name] = value
31
+ when 'tagSet'
32
+ @in_tag_set = false
33
+ end
34
+ elsif @in_group_set
35
+ case name
36
+ when 'item'
37
+ @instance['groups'] << @group
38
+ @group = {}
39
+ when 'groupId', 'groupName'
40
+ @group[name] = value
41
+ when 'groupSet'
42
+ @in_group_set = false
43
+ end
44
+ else
45
+ case name
46
+ when 'vpcId', 'instanceId'
47
+ @instance[name] = value
48
+ when 'item'
49
+ @response['instancesSet'] << @instance
50
+ @instance = { 'tagSet' => {}, 'groups' => [] }
51
+ when 'requestId', 'nextToken'
52
+ @response[name] = value
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,47 @@
1
+ module Fog
2
+ module Parsers
3
+ module Compute
4
+ module AWS
5
+ class DescribeVpcClassicLink < Fog::Parsers::Base
6
+ def reset
7
+ @vpc = { 'tagSet' => {} }
8
+ @response = { 'vpcSet' => [] }
9
+ @tag = {}
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ super
14
+ case name
15
+ when 'tagSet'
16
+ @in_tag_set = true
17
+ end
18
+ end
19
+
20
+ def end_element(name)
21
+ if @in_tag_set
22
+ case name
23
+ when 'item'
24
+ @vpc['tagSet'][@tag['key']] = @tag['value']
25
+ @tag = {}
26
+ when 'key', 'value'
27
+ @tag[name] = value
28
+ when 'tagSet'
29
+ @in_tag_set = false
30
+ end
31
+ else
32
+ case name
33
+ when 'vpcId', 'classicLinkEnabled'
34
+ @vpc[name] = value
35
+ when 'item'
36
+ @response['vpcSet'] << @vpc
37
+ @vpc = { 'tagSet' => {} }
38
+ when 'requestId'
39
+ @response[name] = value
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -122,6 +122,8 @@ module Fog
122
122
  @data = nil
123
123
  end
124
124
 
125
+ attr_accessor :region
126
+
125
127
  def initialize(options={})
126
128
  @use_iam_profile = options[:use_iam_profile]
127
129
  @region = options[:region] || 'us-east-1'
@@ -0,0 +1,67 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/basic'
6
+ # Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups
7
+ #
8
+ # ==== Parameters
9
+ # * vpc_id<~String> - The ID of a ClassicLink-enabled VPC.
10
+ # * instance_id<~String> - The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.
11
+ # * security_group_ids<~String> - The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.
12
+ # * dry_run<~Boolean> - defaults to false
13
+ #
14
+ # === Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'requestId'<~String> - Id of request
18
+ # * 'return'<~Boolean> - Whether the request succeeded
19
+ #
20
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AttachClassicLinkVpc.html]
21
+ def attach_classic_link_vpc(instance_id, vpc_id, security_group_ids, dry_run=false)
22
+ request({
23
+ 'Action' => 'AttachClassicLinkVpc',
24
+ 'VpcId' => vpc_id,
25
+ 'InstanceId'=> instance_id,
26
+ 'DryRun' => dry_run,
27
+ :parser => Fog::Parsers::Compute::AWS::Basic.new
28
+ }.merge(Fog::AWS.indexed_param('SecurityGroupId', security_group_ids)))
29
+
30
+ end
31
+ end
32
+
33
+
34
+ class Mock
35
+ def attach_classic_link_vpc(instance_id, vpc_id, security_group_ids, dry_run=false)
36
+ response = Excon::Response.new
37
+ vpc = self.data[:vpcs].find{ |v| v['vpcId'] == vpc_id }
38
+ instance = self.data[:instances][instance_id]
39
+ if vpc && instance
40
+ if instance['instanceState']['name'] != 'running' || instance['vpcId']
41
+ raise Fog::Compute::AWS::Error.new("Client.InvalidInstanceID.NotLinkable => Instance #{instance_id} is unlinkable")
42
+ end
43
+ if instance['classicLinkVpcId']
44
+ raise Fog::Compute::AWS::Error.new("Client.InvalidInstanceID.InstanceAlreadyLinked => Instance #{instance_id} is already linked")
45
+ end
46
+
47
+ response.status = 200
48
+ response.body = {
49
+ 'requestId' => Fog::AWS::Mock.request_id,
50
+ 'return' => true
51
+ }
52
+ unless dry_run
53
+ instance['classicLinkSecurityGroups'] = security_group_ids
54
+ instance['classicLinkVpcId'] = vpc_id
55
+ end
56
+ response
57
+ elsif !instance
58
+ raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_id}' does not exist.")
59
+ elsif !vpc
60
+ raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist.")
61
+ end
62
+
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -50,7 +50,8 @@ module Fog
50
50
  'tagSet' => {},
51
51
  'enableDnsSupport' => true,
52
52
  'enableDnsHostnames' => false,
53
- 'mapPublicIpOnLaunch'=> false
53
+ 'mapPublicIpOnLaunch'=> false,
54
+ 'classicLinkEnabled' => false
54
55
  }
55
56
  self.data[:vpcs].push(vpc)
56
57
 
@@ -0,0 +1,73 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/describe_classic_link_instances'
6
+ # Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink; you cannot use this request to return information about other instances.
7
+ #
8
+ # ==== Parameters
9
+ # * options<~Hash>
10
+ # * instance_ids<~Array> - An array of instance ids to restruct the results to
11
+ # * filters<~Hash> - Filters to restrict the results to. Recognises vpc-id, group-id, instance-id in addition
12
+ # to tag-key, tag-value and tag:key
13
+ # * max_results
14
+ # * next_token
15
+ # === Returns
16
+ # * response<~Excon::Response>:
17
+ # * body<~Hash>:
18
+ # * 'requestId'<~String> - Id of request
19
+ # * 'instancesSet'<~Array> - array of ClassicLinkInstance
20
+ # * 'vpcId'<~String>
21
+ # * 'instanceId'<~String>
22
+ # * 'tagSet'<~Hash>
23
+ # * 'groups'<~Array>
24
+ # * groupId <~String>
25
+ # * groupName <~String>
26
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeClassicLinkInstances.html
27
+ def describe_classic_link_instances(options={})
28
+ params = {}
29
+ params['MaxResults'] = options[:max_results] if options[:max_results]
30
+ params['NextToken'] = options[:next_token] if options[:next_token]
31
+ params.merge!(Fog::AWS.indexed_param('InstanceId', options[:instance_ids])) if options[:instance_ids]
32
+ params.merge!(Fog::AWS.indexed_filters(options[:filters])) if options[:filters]
33
+ request({
34
+ 'Action' => 'DescribeClassicLinkInstances',
35
+ :parser => Fog::Parsers::Compute::AWS::DescribeClassicLinkInstances.new
36
+ }.merge(params))
37
+ end
38
+ end
39
+
40
+ class Mock
41
+ def describe_classic_link_instances(options={})
42
+ response = Excon::Response.new
43
+ instances = self.data[:instances].values.select {|instance| instance['classicLinkVpcId']}
44
+ if options[:filters]
45
+ instances = apply_tag_filters(instances, options[:filters], 'instanceId')
46
+ instances = instances.select {|instance| instance['classicLinkVpcId'] == options[:filters]['vpc-id']} if options[:filters]['vpc-id']
47
+ instances = instances.select {|instance| instance['instanceId'] == options[:filters]['instance-id']} if options[:filters]['instance-id']
48
+ instances = instances.select {|instance| instance['classicLinkSecurityGroups'].include?(options[:filters]['group-id'])} if options[:filters]['group-id']
49
+ end
50
+ instances = instances.select {|instance| options[:instance_ids].include?(instance['instanceId'])} if options[:instance_ids]
51
+
52
+
53
+
54
+ response.status = 200
55
+ instance_data = instances.collect do |instance|
56
+ groups = self.data[:security_groups].values.select {|data| instance['classicLinkSecurityGroups'].include?(data['groupId'])}
57
+ {
58
+ 'instanceId' => instance['instanceId'],
59
+ 'vpcId' => instance['classicLinkVpcId'],
60
+ 'groups' => groups.collect {|group| {'groupId' => group['groupId'], 'groupName' => group['groupName']}},
61
+ 'tagSet' => self.data[:tag_sets][instance['instanceId']] || {}
62
+ }
63
+ end
64
+ response.body = {
65
+ 'requestId' => Fog::AWS::Mock.request_id,
66
+ 'instancesSet' => instance_data
67
+ }
68
+ response
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,63 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/describe_vpc_classic_link'
6
+ # Describes the ClassicLink status of one or more VPCs.
7
+ #
8
+ # ==== Parameters
9
+ # * options<~Hash>
10
+ # * vpc_ids<~Array> - An array of vpc ids to restruct the results to
11
+ # * filters<~Hash> - Filters to restrict the results to. Recognises is-classic-link-enabled in addition
12
+ # to tag-key, tag-value and tag:key
13
+ # === Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'requestId'<~String> - Id of request
17
+ # * 'vpcSet'<~Array> - array of VpcClassicLink
18
+ # * 'vpcId'<~String>
19
+ # * 'classicLinkEnabled'<~Boolean>
20
+ # * 'tagSet'<~Hash>
21
+ #
22
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcClassicLink.html
23
+ def describe_vpc_classic_link(options={})
24
+ params = {}
25
+ params.merge!(Fog::AWS.indexed_param('VpcId', options[:vpc_ids])) if options[:vpc_ids]
26
+ params.merge!(Fog::AWS.indexed_filters(options[:filters])) if options[:filters]
27
+ request({
28
+ 'Action' => 'DescribeVpcClassicLink',
29
+ :parser => Fog::Parsers::Compute::AWS::DescribeVpcClassicLink.new
30
+ }.merge(params))
31
+ end
32
+ end
33
+
34
+ class Mock
35
+ def describe_vpc_classic_link(options={})
36
+ response = Excon::Response.new
37
+ vpcs = self.data[:vpcs]
38
+ if vpc_ids = options[:vpc_ids]
39
+ vpcs = vpc_ids.collect do |vpc_id|
40
+ vpc = vpcs.find{ |v| v['vpcId'] == vpc_id }
41
+ raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist") unless vpc
42
+ vpc
43
+ end
44
+ end
45
+ vpcs = apply_tag_filters(vpcs, options[:filters], 'vpcId') if options[:filters]
46
+
47
+ response.status = 200
48
+ vpc_data = vpcs.collect do |vpc|
49
+ {
50
+ 'vpcId' => vpc['vpcId'],
51
+ 'classicLinkEnabled' => vpc['classicLinkEnabled'],
52
+ 'tagSet' => self.data[:tag_sets][vpc['vpcId']] || {}
53
+ }
54
+ end
55
+ response.body = {
56
+ 'requestId' => Fog::AWS::Mock.request_id,
57
+ 'vpcSet' => vpc_data
58
+ }
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,60 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/basic'
6
+ # Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups
7
+ #
8
+ # ==== Parameters
9
+ # * vpc_id<~String> - The ID of the vpc to which the instance is linkced.
10
+ # * instance_id<~String> - The ID of an EC2-Classic instance to unlink from the vpc.
11
+ # * security_group_ids<~String> - The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.
12
+ # * dry_run<~Boolean> - defaults to false
13
+ #
14
+ # === Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'requestId'<~String> - Id of request
18
+ # * 'return'<~Boolean> - Whether the request succeeded
19
+ #
20
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DetachClassicLinkVpc.html]
21
+ def detach_classic_link_vpc(instance_id, vpc_id, dry_run=false)
22
+ request(
23
+ 'Action' => 'DetachClassicLinkVpc',
24
+ 'VpcId' => vpc_id,
25
+ 'InstanceId'=> instance_id,
26
+ 'DryRun' => dry_run,
27
+ :parser => Fog::Parsers::Compute::AWS::Basic.new
28
+ )
29
+
30
+ end
31
+ end
32
+
33
+
34
+ class Mock
35
+ def detach_classic_link_vpc(instance_id, vpc_id, dry_run=false)
36
+ response = Excon::Response.new
37
+ vpc = self.data[:vpcs].find{ |v| v['vpcId'] == vpc_id }
38
+ instance = self.data[:instances][instance_id]
39
+ if vpc && instance
40
+ response.status = 200
41
+ response.body = {
42
+ 'requestId' => Fog::AWS::Mock.request_id,
43
+ 'return' => true
44
+ }
45
+ unless dry_run
46
+ instance['classicLinkSecurityGroups'] = nil
47
+ instance['classicLinkVpcId'] = nil
48
+ end
49
+ response
50
+ elsif !instance
51
+ raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_id}' does not exist.")
52
+ elsif !vpc
53
+ raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist.")
54
+ end
55
+
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,47 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/basic'
6
+ # disavbles classic link for a vpc
7
+ #
8
+ # ==== Parameters
9
+ # * vpc_id<~String> - The ID of the VPC you want to describe an attribute of
10
+ # * dry_run<~Boolean> - defaults to false
11
+ #
12
+ # === Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'requestId'<~String> - Id of request
16
+ # * 'return'<~Boolean> - Whether the request succeeded
17
+ #
18
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisableVpcClassicLink.html]
19
+ def disable_vpc_classic_link(vpc_id, dry_run=false)
20
+ request(
21
+ 'Action' => 'DisableVpcClassicLink',
22
+ 'VpcId' => vpc_id,
23
+ 'DryRun' => dry_run,
24
+ :parser => Fog::Parsers::Compute::AWS::Basic.new
25
+ )
26
+ end
27
+ end
28
+
29
+ class Mock
30
+ def disable_vpc_classic_link(vpc_id, dry_run=false)
31
+ response = Excon::Response.new
32
+ if vpc = self.data[:vpcs].find{ |v| v['vpcId'] == vpc_id }
33
+ response.status = 200
34
+ response.body = {
35
+ 'requestId' => Fog::AWS::Mock.request_id,
36
+ 'return' => true
37
+ }
38
+ vpc['classicLinkEnabled'] = false unless dry_run
39
+ response
40
+ else
41
+ raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+ require 'fog/aws/parsers/compute/basic'
6
+ # enables classic link for a vpc
7
+ #
8
+ # ==== Parameters
9
+ # * vpc_id<~String> - The ID of the VPC you want to describe an attribute of
10
+ # * dry_run<~Boolean> - defaults to false
11
+ #
12
+ # === Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'requestId'<~String> - Id of request
16
+ # * 'return'<~Boolean> - Whether the request succeeded
17
+ #
18
+ # (Amazon API Reference)[http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EnableVpcClassicLink.html]
19
+ def enable_vpc_classic_link(vpc_id, dry_run=false)
20
+ request(
21
+ 'Action' => 'EnableVpcClassicLink',
22
+ 'VpcId' => vpc_id,
23
+ 'DryRun' => dry_run,
24
+ :parser => Fog::Parsers::Compute::AWS::Basic.new
25
+ )
26
+ end
27
+ end
28
+
29
+ class Mock
30
+ def enable_vpc_classic_link(vpc_id, dry_run=false)
31
+ response = Excon::Response.new
32
+ if vpc = self.data[:vpcs].find{ |v| v['vpcId'] == vpc_id }
33
+ response.status = 200
34
+ response.body = {
35
+ 'requestId' => Fog::AWS::Mock.request_id,
36
+ 'return' => true
37
+ }
38
+ vpc['classicLinkEnabled'] = true unless dry_run
39
+ response
40
+ else
41
+ raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -43,6 +43,8 @@ module Fog
43
43
 
44
44
  response.body = {
45
45
  'instancesSet' => instance_set.reduce([]) do |ia, instance|
46
+ instance['classicLinkSecurityGroups'] = nil
47
+ instance['classicLinkVpcId'] = nil
46
48
  ia << {'currentState' => { 'code' => 0, 'name' => 'stopping' },
47
49
  'previousState' => instance['instanceState'],
48
50
  'instanceId' => instance['instanceId'] }
@@ -45,6 +45,8 @@ module Fog
45
45
  response.status = 200
46
46
  for id in instance_id
47
47
  instance = self.data[:instances][id]
48
+ instance['classicLinkSecurityGroups'] = nil
49
+ instance['classicLinkVpcId'] = nil
48
50
  self.data[:deleted_at][id] = Time.now
49
51
  code = case instance['instanceState']['name']
50
52
  when 'pending'
@@ -29,7 +29,7 @@ module Fog
29
29
  topic_arn = Fog::AWS::Mock.arn(@module, @account_id, name, @region)
30
30
 
31
31
  self.data[:topics][topic_arn] = {
32
- "Owner" => Fog::AWS::Mock.owner_id,
32
+ "Owner" => @account_id,
33
33
  "SubscriptionsPending" => 0,
34
34
  "SubscriptionsConfirmed" => 0,
35
35
  "SubscriptionsDeleted" => 0,
@@ -51,6 +51,32 @@ module Fog
51
51
  "Endpoint" => endpoint,
52
52
  }
53
53
 
54
+ mock_data = Fog::AWS::SQS::Mock.data.values.find { |a| a.values.find { |d| d[:queues][endpoint] } }
55
+ access_key = mock_data && mock_data.keys.first
56
+
57
+ if protocol == "sqs" && access_key
58
+ token = SecureRandom.hex(128)
59
+ message = "You have chosen to subscribe to the topic #{arn}.\nTo confirm the subscription, visit the SubscribeURL included in this message."
60
+ signature = Fog::HMAC.new("sha256", token).sign(message)
61
+
62
+ Fog::AWS::SQS.new(
63
+ :region => self.region,
64
+ :aws_access_key_id => access_key,
65
+ :aws_secret_access_key => SecureRandom.hex(3)
66
+ ).send_message(endpoint, Fog::JSON.encode(
67
+ "Type" => "SubscriptionConfirmation",
68
+ "MessageId" => SecureRandom.uuid,
69
+ "Token" => token,
70
+ "TopicArn" => arn,
71
+ "Message" => message,
72
+ "SubscribeURL" => "https://sns.#{self.region}.amazonaws.com/?Action=ConfirmSubscription&TopicArn=#{arn}&Token=#{token}",
73
+ "Timestamp" => Time.now.iso8601,
74
+ "SignatureVersion" => "1",
75
+ "Signature" => signature,
76
+ "SigningCertURL" => "https://sns.#{self.region}.amazonaws.com/SimpleNotificationService-#{SecureRandom.hex(16)}.pem"
77
+ ))
78
+ end
79
+
54
80
  response.body = { 'SubscriptionArn' => 'pending confirmation', 'RequestId' => Fog::AWS::Mock.request_id }
55
81
  response
56
82
  end
@@ -39,10 +39,13 @@ module Fog
39
39
  end
40
40
  end
41
41
 
42
+ attr_reader :region
43
+ attr_writer :account_id
44
+
42
45
  def initialize(options={})
43
46
  @region = options[:region] || 'us-east-1'
44
47
  @aws_access_key_id = options[:aws_access_key_id]
45
- @account_id = "12345678910"
48
+ @account_id = Fog::AWS::Mock.owner_id
46
49
  @module = "sns"
47
50
 
48
51
  unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
@@ -97,6 +100,8 @@ module Fog
97
100
  setup_credentials(options)
98
101
  end
99
102
 
103
+ attr_reader :region
104
+
100
105
  def reload
101
106
  @connection.reset
102
107
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AWS
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
@@ -11,6 +11,25 @@ Shindo.tests('Fog::Compute[:aws] | vpc requests', ['aws']) do
11
11
  'requestId' => String
12
12
  }
13
13
 
14
+ @describe_vpcs_classic_link_format = {
15
+ 'vpcSet' => [{
16
+ 'vpcId' => String,
17
+ 'tagSet' => Hash,
18
+ 'classicLinkEnabled' => Fog::Boolean
19
+ }],
20
+ 'requestId' => String
21
+ }
22
+ @describe_classic_link_instances = {
23
+ 'instancesSet' => [{
24
+ 'vpcId' => String,
25
+ 'tagSet' => Hash,
26
+ 'instanceId' => String,
27
+ 'groups' => [{'groupId' => String, 'groupName' => String}]
28
+ }],
29
+ 'requestId' => String,
30
+ 'NextToken' => Fog::Nullable::String
31
+ }
32
+
14
33
  @describe_vpcs_format = {
15
34
  'vpcSet' => [{
16
35
  'vpcId' => String,
@@ -99,6 +118,47 @@ Shindo.tests('Fog::Compute[:aws] | vpc requests', ['aws']) do
99
118
  body
100
119
  end
101
120
 
121
+ tests("describe_vpc_classic_link(:filters => {'tag-key' => 'foo'}").formats(@describe_vpcs_classic_link_format) do
122
+ body = Fog::Compute[:aws].describe_vpc_classic_link(:filters => {'tag-key' => 'foo'})
123
+ tests("returns 1 vpc").returns(1) { body['vpcSet'].size }
124
+ body
125
+ end
126
+
127
+ tests("enable_vpc_classic_link").returns(true) do
128
+ Fog::Compute[:aws].enable_vpc_classic_link @vpc_id
129
+ body = Fog::Compute[:aws].describe_vpc_classic_link(:vpc_ids => [@vpc_id])
130
+ body['vpcSet'].first['classicLinkEnabled']
131
+ end
132
+
133
+ @server = Fog::Compute[:aws].servers.create
134
+ @server.wait_for {ready?}
135
+
136
+ @group = Fog::Compute[:aws].security_groups.create :name => 'test-group', :description => 'vpc security group'
137
+
138
+ tests("attach_classic_link_vpc") do
139
+ Fog::Compute[:aws].attach_classic_link_vpc(@server.id, @vpc_id, [@group])
140
+ end
141
+
142
+ tests('describe_classic_link_instances').formats(@describe_classic_link_instances) do
143
+ Fog::Compute[:aws].describe_classic_link_instances().body
144
+ end
145
+
146
+ tests("detach_classic_link_vpc").returns([]) do
147
+ Fog::Compute[:aws].detach_classic_link_vpc(@server.id, @vpc_id)
148
+ Fog::Compute[:aws].describe_classic_link_instances().body['instancesSet']
149
+ end
150
+
151
+ if !Fog.mocking?
152
+ @server.destroy
153
+ @server.wait_for {state == 'terminated'}
154
+ end
155
+
156
+ tests("disable_vpc_classic_link").returns(false) do
157
+ Fog::Compute[:aws].disable_vpc_classic_link @vpc_id
158
+ body = Fog::Compute[:aws].describe_vpc_classic_link(:vpc_ids => [@vpc_id])
159
+ body['vpcSet'].first['classicLinkEnabled']
160
+ end
161
+
102
162
  tests("#delete_vpc('#{@vpc_id}')").formats(AWS::Compute::Formats::BASIC) do
103
163
  Fog::Compute[:aws].delete_vpc(@vpc_id).body
104
164
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-12 00:00:00.000000000 Z
12
+ date: 2015-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -378,6 +378,7 @@ files:
378
378
  - lib/fog/aws/parsers/compute/describe_account_attributes.rb
379
379
  - lib/fog/aws/parsers/compute/describe_addresses.rb
380
380
  - lib/fog/aws/parsers/compute/describe_availability_zones.rb
381
+ - lib/fog/aws/parsers/compute/describe_classic_link_instances.rb
381
382
  - lib/fog/aws/parsers/compute/describe_dhcp_options.rb
382
383
  - lib/fog/aws/parsers/compute/describe_images.rb
383
384
  - lib/fog/aws/parsers/compute/describe_instance_status.rb
@@ -400,6 +401,7 @@ files:
400
401
  - lib/fog/aws/parsers/compute/describe_volume_status.rb
401
402
  - lib/fog/aws/parsers/compute/describe_volumes.rb
402
403
  - lib/fog/aws/parsers/compute/describe_vpc_attribute.rb
404
+ - lib/fog/aws/parsers/compute/describe_vpc_classic_link.rb
403
405
  - lib/fog/aws/parsers/compute/describe_vpcs.rb
404
406
  - lib/fog/aws/parsers/compute/detach_volume.rb
405
407
  - lib/fog/aws/parsers/compute/get_console_output.rb
@@ -728,6 +730,7 @@ files:
728
730
  - lib/fog/aws/requests/compute/associate_address.rb
729
731
  - lib/fog/aws/requests/compute/associate_dhcp_options.rb
730
732
  - lib/fog/aws/requests/compute/associate_route_table.rb
733
+ - lib/fog/aws/requests/compute/attach_classic_link_vpc.rb
731
734
  - lib/fog/aws/requests/compute/attach_internet_gateway.rb
732
735
  - lib/fog/aws/requests/compute/attach_network_interface.rb
733
736
  - lib/fog/aws/requests/compute/attach_volume.rb
@@ -772,6 +775,7 @@ files:
772
775
  - lib/fog/aws/requests/compute/describe_account_attributes.rb
773
776
  - lib/fog/aws/requests/compute/describe_addresses.rb
774
777
  - lib/fog/aws/requests/compute/describe_availability_zones.rb
778
+ - lib/fog/aws/requests/compute/describe_classic_link_instances.rb
775
779
  - lib/fog/aws/requests/compute/describe_dhcp_options.rb
776
780
  - lib/fog/aws/requests/compute/describe_images.rb
777
781
  - lib/fog/aws/requests/compute/describe_instance_status.rb
@@ -796,12 +800,16 @@ files:
796
800
  - lib/fog/aws/requests/compute/describe_volume_status.rb
797
801
  - lib/fog/aws/requests/compute/describe_volumes.rb
798
802
  - lib/fog/aws/requests/compute/describe_vpc_attribute.rb
803
+ - lib/fog/aws/requests/compute/describe_vpc_classic_link.rb
799
804
  - lib/fog/aws/requests/compute/describe_vpcs.rb
805
+ - lib/fog/aws/requests/compute/detach_classic_link_vpc.rb
800
806
  - lib/fog/aws/requests/compute/detach_internet_gateway.rb
801
807
  - lib/fog/aws/requests/compute/detach_network_interface.rb
802
808
  - lib/fog/aws/requests/compute/detach_volume.rb
809
+ - lib/fog/aws/requests/compute/disable_vpc_classic_link.rb
803
810
  - lib/fog/aws/requests/compute/disassociate_address.rb
804
811
  - lib/fog/aws/requests/compute/disassociate_route_table.rb
812
+ - lib/fog/aws/requests/compute/enable_vpc_classic_link.rb
805
813
  - lib/fog/aws/requests/compute/get_console_output.rb
806
814
  - lib/fog/aws/requests/compute/get_password_data.rb
807
815
  - lib/fog/aws/requests/compute/import_key_pair.rb