fog-aws 0.4.1 → 0.5.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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fog/aws.rb +2 -0
  3. data/lib/fog/aws/ecs.rb +187 -0
  4. data/lib/fog/aws/models/compute/flavors.rb +10 -0
  5. data/lib/fog/aws/parsers/ecs/base.rb +28 -0
  6. data/lib/fog/aws/parsers/ecs/container_instance.rb +75 -0
  7. data/lib/fog/aws/parsers/ecs/create_cluster.rb +30 -0
  8. data/lib/fog/aws/parsers/ecs/create_service.rb +31 -0
  9. data/lib/fog/aws/parsers/ecs/delete_cluster.rb +30 -0
  10. data/lib/fog/aws/parsers/ecs/delete_service.rb +31 -0
  11. data/lib/fog/aws/parsers/ecs/deregister_container_instance.rb +31 -0
  12. data/lib/fog/aws/parsers/ecs/deregister_task_definition.rb +32 -0
  13. data/lib/fog/aws/parsers/ecs/describe_clusters.rb +55 -0
  14. data/lib/fog/aws/parsers/ecs/describe_container_instances.rb +38 -0
  15. data/lib/fog/aws/parsers/ecs/describe_services.rb +24 -0
  16. data/lib/fog/aws/parsers/ecs/describe_task_definition.rb +32 -0
  17. data/lib/fog/aws/parsers/ecs/describe_tasks.rb +24 -0
  18. data/lib/fog/aws/parsers/ecs/list_clusters.rb +27 -0
  19. data/lib/fog/aws/parsers/ecs/list_container_instances.rb +27 -0
  20. data/lib/fog/aws/parsers/ecs/list_services.rb +27 -0
  21. data/lib/fog/aws/parsers/ecs/list_task_definition_families.rb +27 -0
  22. data/lib/fog/aws/parsers/ecs/list_task_definitions.rb +27 -0
  23. data/lib/fog/aws/parsers/ecs/list_tasks.rb +27 -0
  24. data/lib/fog/aws/parsers/ecs/register_task_definition.rb +32 -0
  25. data/lib/fog/aws/parsers/ecs/run_task.rb +24 -0
  26. data/lib/fog/aws/parsers/ecs/service.rb +82 -0
  27. data/lib/fog/aws/parsers/ecs/start_task.rb +24 -0
  28. data/lib/fog/aws/parsers/ecs/stop_task.rb +23 -0
  29. data/lib/fog/aws/parsers/ecs/task.rb +77 -0
  30. data/lib/fog/aws/parsers/ecs/task_definition.rb +95 -0
  31. data/lib/fog/aws/parsers/ecs/update_service.rb +31 -0
  32. data/lib/fog/aws/requests/compute/create_vpc.rb +1 -1
  33. data/lib/fog/aws/requests/ecs/create_cluster.rb +64 -0
  34. data/lib/fog/aws/requests/ecs/create_service.rb +118 -0
  35. data/lib/fog/aws/requests/ecs/delete_cluster.rb +61 -0
  36. data/lib/fog/aws/requests/ecs/delete_service.rb +72 -0
  37. data/lib/fog/aws/requests/ecs/deregister_container_instance.rb +63 -0
  38. data/lib/fog/aws/requests/ecs/deregister_task_definition.rb +58 -0
  39. data/lib/fog/aws/requests/ecs/describe_clusters.rb +83 -0
  40. data/lib/fog/aws/requests/ecs/describe_container_instances.rb +64 -0
  41. data/lib/fog/aws/requests/ecs/describe_services.rb +76 -0
  42. data/lib/fog/aws/requests/ecs/describe_task_definition.rb +64 -0
  43. data/lib/fog/aws/requests/ecs/describe_tasks.rb +65 -0
  44. data/lib/fog/aws/requests/ecs/list_clusters.rb +45 -0
  45. data/lib/fog/aws/requests/ecs/list_container_instances.rb +46 -0
  46. data/lib/fog/aws/requests/ecs/list_services.rb +59 -0
  47. data/lib/fog/aws/requests/ecs/list_task_definition_families.rb +56 -0
  48. data/lib/fog/aws/requests/ecs/list_task_definitions.rb +55 -0
  49. data/lib/fog/aws/requests/ecs/list_tasks.rb +50 -0
  50. data/lib/fog/aws/requests/ecs/register_task_definition.rb +68 -0
  51. data/lib/fog/aws/requests/ecs/run_task.rb +114 -0
  52. data/lib/fog/aws/requests/ecs/start_task.rb +130 -0
  53. data/lib/fog/aws/requests/ecs/stop_task.rb +64 -0
  54. data/lib/fog/aws/requests/ecs/update_service.rb +81 -0
  55. data/lib/fog/aws/version.rb +1 -1
  56. data/tests/requests/compute/vpc_tests.rb +7 -0
  57. data/tests/requests/ecs/cluster_tests.rb +112 -0
  58. data/tests/requests/ecs/container_instance_tests.rb +119 -0
  59. data/tests/requests/ecs/helper.rb +276 -0
  60. data/tests/requests/ecs/sample_task_definition1.json +56 -0
  61. data/tests/requests/ecs/service_tests.rb +132 -0
  62. data/tests/requests/ecs/task_definitions_tests.rb +97 -0
  63. data/tests/requests/ecs/task_tests.rb +145 -0
  64. metadata +59 -2
@@ -0,0 +1,61 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/delete_cluster'
6
+
7
+ # Deletes the specified cluster
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteCluster.html
9
+ # ==== Parameters
10
+ # * cluster <~String> - The short name or full Amazon Resource Name (ARN) of the cluster that you want to delete
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ # * 'Cluster'<~Hash> - The full description of the deleted cluster
15
+ def delete_cluster(params={})
16
+ request({
17
+ 'Action' => 'DeleteCluster',
18
+ :parser => Fog::Parsers::AWS::ECS::DeleteCluster.new
19
+ }.merge(params))
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def delete_cluster(params={})
25
+ response = Excon::Response.new
26
+ response.status = 200
27
+
28
+ cluster_id = params.delete('cluster')
29
+
30
+ if !cluster_id
31
+ message = 'ClientException => Cluster can not be blank.'
32
+ raise Fog::AWS::ECS::Error, message
33
+ end
34
+
35
+ if match = cluster_id.match(/^arn:aws:ecs:.+:\d{1,12}:cluster\/(.+)$/)
36
+ i = self.data[:clusters].index { |c| c['clusterArn'].eql?(cluster_id) }
37
+ else
38
+ i = self.data[:clusters].index { |c| c['clusterName'].eql?(cluster_id) }
39
+ end
40
+
41
+ if i
42
+ cluster = self.data[:clusters].delete_at(i)
43
+ else
44
+ raise Fog::AWS::ECS::NotFound, 'Cluster not found.'
45
+ end
46
+
47
+ cluster['status'] = 'INACTIVE'
48
+ response.body = {
49
+ 'DeleteClusterResult' => {
50
+ 'cluster' => cluster
51
+ },
52
+ 'ResponseMetadata' => {
53
+ 'RequestId' => Fog::AWS::Mock.request_id
54
+ }
55
+ }
56
+ response
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,72 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/delete_service'
6
+
7
+ # Deletes a specified service within a cluster.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteService.html
9
+ # ==== Parameters
10
+ # * cluster <~String> - name of the cluster that hosts the service you want to delete.
11
+ # * service <~String> - name of the service you want to delete.
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'Service'<~Hash> - The full description of the deleted service
16
+ def delete_service(params={})
17
+ request({
18
+ 'Action' => 'DeleteService',
19
+ :parser => Fog::Parsers::AWS::ECS::DeleteService.new
20
+ }.merge(params))
21
+ end
22
+ end
23
+
24
+ class Mock
25
+ def delete_service(params={})
26
+ response = Excon::Response.new
27
+ response.status = 200
28
+
29
+ service_id = params.delete('service')
30
+ msg = 'ClientException => Service cannot be empty.'
31
+ raise Fog::AWS::ECS::Error, msg unless service_id
32
+
33
+ owner_id = Fog::AWS::Mock.owner_id
34
+
35
+ cluster = params.delete('cluster') || 'default'
36
+ if !cluster.match(/^arn:aws:ecs:.+:.+:cluster\/(.+)$/)
37
+ cluster_path = "cluster/#{cluster}"
38
+ cluster_arn = Fog::AWS::Mock.arn('ecs', owner_id, cluster_path, region)
39
+ else
40
+ cluster_arn = cluster
41
+ end
42
+
43
+ if match = service_id.match(/^arn:aws:ecs:.+:\d{1,12}:service\/(.+)$/)
44
+ i = self.data[:services].index do |s|
45
+ s['clusterArn'].eql?(cluster_arn) && s['serviceArn'].eql?(service_id)
46
+ end
47
+ else
48
+ i = self.data[:services].index do |s|
49
+ s['clusterArn'].eql?(cluster_arn) && s['serviceName'].eql?(service_id)
50
+ end
51
+ end
52
+
53
+ msg = "ServiceNotFoundException => Service not found."
54
+ raise Fog::AWS::ECS::Error, msg unless i
55
+
56
+ service = self.data[:services][i]
57
+ self.data[:services].delete_at(i)
58
+
59
+ response.body = {
60
+ 'DeleteServiceResult' => {
61
+ 'service' => service
62
+ },
63
+ 'ResponseMetadata' => {
64
+ 'RequestId' => Fog::AWS::Mock.request_id
65
+ }
66
+ }
67
+ response
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,63 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/deregister_container_instance'
6
+
7
+ # Deregisters an Amazon ECS container instance from the specified cluster.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterContainerInstance.html
9
+ # ==== Parameters
10
+ # * cluster <~String> - short name or full ARN of the cluster that hosts the container instance you want to deregister.
11
+ # * containerInstance <~String> - container instance UUID or full Amazon Resource Name (ARN) of the container instance you want to deregister.
12
+ # * force <~Boolean> - Force the deregistration of the container instance.
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'ContainerInstance' <~Hash> - full description of the deregistered container instance
17
+ def deregister_container_instance(params={})
18
+ request({
19
+ 'Action' => 'DeregisterContainerInstance',
20
+ :parser => Fog::Parsers::AWS::ECS::DeregisterContainerInstance.new
21
+ }.merge(params))
22
+ end
23
+ end
24
+
25
+ class Mock
26
+ def deregister_container_instance(params={})
27
+ response = Excon::Response.new
28
+ response.status = 200
29
+
30
+ instance_id = params.delete('containerInstance')
31
+ instance_error = "ClientException => Container instance can not be blank."
32
+ raise Fog::AWS::ECS::Error, instance_error unless instance_id
33
+
34
+ if match = instance_id.match(/^arn:aws:ecs:.+:\d{1,12}:container-instance\/(.+)$/)
35
+ i = self.data[:container_instances].index do |inst|
36
+ inst['containerInstanceArn'].eql?(instance_id)
37
+ end
38
+ else
39
+ i = self.data[:container_instances].index do |inst|
40
+ inst['containerInstanceArn'].match(/#{instance_id}$/)
41
+ end
42
+ end
43
+
44
+ msg = "ClientException => Referenced container instance #{instance_id} not found."
45
+ raise Fog::AWS::ECS::Error, msg unless i
46
+
47
+ instance = self.data[:container_instances][i]
48
+ self.data[:container_instances].delete_at(i)
49
+
50
+ response.body = {
51
+ 'DeregisterContainerInstanceResult' => {
52
+ 'containerInstance' => instance
53
+ },
54
+ 'ResponseMetadata' => {
55
+ 'RequestId' => Fog::AWS::Mock.request_id
56
+ }
57
+ }
58
+ response
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,58 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/deregister_task_definition'
6
+
7
+ # Deregisters the specified task definition.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterTaskDefinition.html
9
+ # ==== Parameters
10
+ # * taskDefinition <~String> - The family and revision (family:revision) or full Amazon Resource Name (ARN) of the task definition that you want to deregister.
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ # * 'TaskDefinition' <~Hash> - full description of the deregistered task
15
+ def deregister_task_definition(params={})
16
+ request({
17
+ 'Action' => 'DeregisterTaskDefinition',
18
+ :parser => Fog::Parsers::AWS::ECS::DeregisterTaskDefinition.new
19
+ }.merge(params))
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def deregister_task_definition(params={})
25
+ response = Excon::Response.new
26
+ response.status = 200
27
+
28
+ taskdef_error = "ClientException => Task Definition can not be blank."
29
+ raise Fog::AWS::ECS::Error, taskdef_error unless params['taskDefinition']
30
+
31
+ task_def_name = params['taskDefinition']
32
+
33
+ case task_def_name
34
+ when /^arn:aws:ecs:.+:\d{1,12}:task-definition\/(.+:.+)$/
35
+ i = self.data[:task_definitions].index { |t| t['taskDefinitionArn'].eql?(task_def_name) }
36
+ when /^(.+:.+)$/
37
+ i = self.data[:task_definitions].index { |t| t['taskDefinitionArn'].match(/task-definition\/#{task_def_name}$/) }
38
+ else
39
+ raise Fog::AWS::ECS::Error, 'Invalid task definition'
40
+ end
41
+
42
+ raise Fog::AWS::ECS::NotFound, 'Task definition not found.' unless i
43
+ task_definition = self.data[:task_definitions].delete_at(i)
44
+
45
+ response.body = {
46
+ 'DeregisterTaskDefinitionResult' => {
47
+ 'taskDefinition' => task_definition
48
+ },
49
+ 'ResponseMetadata' => {
50
+ 'RequestId' => Fog::AWS::Mock.request_id
51
+ }
52
+ }
53
+ response
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,83 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/describe_clusters'
6
+
7
+ # Describes one or more of your clusters.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeClusters.html
9
+ # ==== Parameters
10
+ # * clusters <~Array> - list of cluster names or full cluster Amazon Resource Name (ARN) entries
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ # * 'clusters' <~Array> - The list of clusters
15
+ # * 'failures' <~Array> - The list of failures (if any)
16
+ def describe_clusters(params={})
17
+ if members = params.delete('clusters')
18
+ params.merge!(Fog::AWS.indexed_param('clusters.member', [*members]))
19
+ end
20
+
21
+ request({
22
+ 'Action' => 'DescribeClusters',
23
+ :parser => Fog::Parsers::AWS::ECS::DescribeClusters.new
24
+ }.merge(params))
25
+ end
26
+ end
27
+
28
+ class Mock
29
+ def describe_clusters(params={})
30
+ response = Excon::Response.new
31
+ response.status = 200
32
+
33
+ members = params.delete('clusters')
34
+ members = 'default' unless members
35
+ clusters = []
36
+ failures = []
37
+
38
+ [*members].each do |c|
39
+ if match = c.match(/^arn:aws:ecs:.+:\d{1,12}:cluster\/(.+)$/)
40
+ result = self.data[:clusters].select { |cl| cl['clusterArn'].eql?(c) }
41
+ else
42
+ result = self.data[:clusters].select { |cl| cl['clusterName'].eql?(c) }
43
+ end
44
+ if result.empty?
45
+ cluster_name = match[1] if match
46
+ cluster_name = c unless match
47
+ failures << { 'name' => cluster_name }
48
+ else
49
+ clusters << result.first
50
+ end
51
+ end
52
+
53
+ owner_id = Fog::AWS::Mock.owner_id
54
+
55
+ failures.map! do |f|
56
+ {
57
+ 'arn' => Fog::AWS::Mock.arn('ecs', owner_id, "cluster/#{f['name']}", region),
58
+ 'reason' => 'MISSING'
59
+ }
60
+ end
61
+ clusters.map! do |c|
62
+ {
63
+ 'clusterName' => c['clusterName'],
64
+ 'clusterArn' => c['clusterArn'],
65
+ 'status' => c['status']
66
+ }
67
+ end
68
+
69
+ response.body = {
70
+ 'DescribeClustersResult' => {
71
+ 'failures' => failures,
72
+ 'clusters' => clusters
73
+ },
74
+ 'ResponseMetadata' => {
75
+ 'RequestId' => Fog::AWS::Mock.request_id
76
+ }
77
+ }
78
+ response
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,64 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/describe_container_instances'
6
+
7
+ # Describes Amazon EC2 Container Service container instances.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html
9
+ # ==== Parameters
10
+ # * cluster <~String> - short name or full ARN of the cluster that hosts the container instances you want to describe.
11
+ # * containerInstances <~Array> - list of container instance UUIDs or full Amazon Resource Name (ARN) entries.
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'containerInstances' <~Array> - list of container instances.
16
+ # * 'failures' <~Array> - list of failures (if any)
17
+ def describe_container_instances(params={})
18
+ if instances = params.delete('containerInstances')
19
+ params.merge!(Fog::AWS.indexed_param('containerInstances.member', [*instances]))
20
+ end
21
+
22
+ request({
23
+ 'Action' => 'DescribeContainerInstances',
24
+ :parser => Fog::Parsers::AWS::ECS::DescribeContainerInstances.new
25
+ }.merge(params))
26
+ end
27
+ end
28
+
29
+ class Mock
30
+ def describe_container_instances(params={})
31
+ response = Excon::Response.new
32
+ response.status = 200
33
+
34
+ cluster = params.delete('cluster') || 'default'
35
+
36
+ instances_id = params.delete('containerInstances')
37
+ msg = 'ClientException => Container instance cannot be empty.'
38
+ raise Fog::AWS::ECS::Error, msg unless instances_id
39
+
40
+ result = []
41
+ [*instances_id].each do |inst|
42
+ if match = inst.match(/^arn:aws:ecs:.+:\d{1,12}:container-instance\/(.+)$/)
43
+ result = self.data[:container_instances].select { |i| i['containerInstanceArn'].eql?(inst) }
44
+ else
45
+ result = self.data[:container_instances].select { |i| i['containerInstanceArn'].match(/#{inst}$/) }
46
+ end
47
+ end
48
+
49
+ instances = result
50
+ response.body = {
51
+ 'DescribeContainerInstancesResult' => {
52
+ 'containerInstances' => instances,
53
+ 'failures' => []
54
+ },
55
+ 'ResponseMetadata' => {
56
+ 'RequestId' => Fog::AWS::Mock.request_id
57
+ }
58
+ }
59
+ response
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,76 @@
1
+ module Fog
2
+ module AWS
3
+ class ECS
4
+ class Real
5
+ require 'fog/aws/parsers/ecs/describe_services'
6
+
7
+ # Describes the specified services running in your cluster.
8
+ # http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeServices.html
9
+ # ==== Parameters
10
+ # * cluster <~String> - name of the cluster that hosts the service you want to describe.
11
+ # * services <~Array> - list of services you want to describe.
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'services' <~Array> - The list of services described.
16
+ # * 'failures' <~Array> - The list of failures associated with the call (if any).
17
+ def describe_services(params={})
18
+ if services = params.delete('services')
19
+ params.merge!(Fog::AWS.indexed_param('services.member', [*services]))
20
+ end
21
+
22
+ request({
23
+ 'Action' => 'DescribeServices',
24
+ :parser => Fog::Parsers::AWS::ECS::DescribeServices.new
25
+ }.merge(params))
26
+ end
27
+ end
28
+
29
+ class Mock
30
+ def describe_services(params={})
31
+ response = Excon::Response.new
32
+ response.status = 200
33
+
34
+ cluster = params.delete('cluster') || 'default'
35
+ services = params.delete('services')
36
+ msg = 'InvalidParameterException => Services cannot be empty.'
37
+ raise Fog::AWS::ECS::Error, msg unless services
38
+
39
+ owner_id = Fog::AWS::Mock.owner_id
40
+
41
+ if !cluster.match(/^arn:aws:ecs:.+:.+:cluster\/(.+)$/)
42
+ cluster_path = "cluster/#{cluster}"
43
+ cluster_arn = Fog::AWS::Mock.arn('ecs', owner_id, cluster_path, region)
44
+ else
45
+ cluster_arn = cluster
46
+ end
47
+
48
+ result = []
49
+ ([*services].select { |s| s.match(/^arn:/) }).each do |ds|
50
+ result.concat(self.data[:services].select do |sv|
51
+ sv['serviceArn'].eql?(ds) && sv['clusterArn'].eql?(cluster_arn)
52
+ end)
53
+ end
54
+ ([*services].select { |s| !s.match(/^arn:/) }).each do |ds|
55
+ result.concat(self.data[:services].select do |sv|
56
+ sv['serviceName'].eql?(ds) && sv['clusterArn'].eql?(cluster_arn)
57
+ end)
58
+ end
59
+
60
+ response.body = {
61
+ 'DescribeServicesResult' => {
62
+ 'services' => result,
63
+ 'failures' => []
64
+ },
65
+ 'ResponseMetadata' => {
66
+ 'RequestId' => Fog::AWS::Mock.request_id
67
+ }
68
+ }
69
+ response
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+