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.
- checksums.yaml +4 -4
- data/lib/fog/aws.rb +2 -0
- data/lib/fog/aws/ecs.rb +187 -0
- data/lib/fog/aws/models/compute/flavors.rb +10 -0
- data/lib/fog/aws/parsers/ecs/base.rb +28 -0
- data/lib/fog/aws/parsers/ecs/container_instance.rb +75 -0
- data/lib/fog/aws/parsers/ecs/create_cluster.rb +30 -0
- data/lib/fog/aws/parsers/ecs/create_service.rb +31 -0
- data/lib/fog/aws/parsers/ecs/delete_cluster.rb +30 -0
- data/lib/fog/aws/parsers/ecs/delete_service.rb +31 -0
- data/lib/fog/aws/parsers/ecs/deregister_container_instance.rb +31 -0
- data/lib/fog/aws/parsers/ecs/deregister_task_definition.rb +32 -0
- data/lib/fog/aws/parsers/ecs/describe_clusters.rb +55 -0
- data/lib/fog/aws/parsers/ecs/describe_container_instances.rb +38 -0
- data/lib/fog/aws/parsers/ecs/describe_services.rb +24 -0
- data/lib/fog/aws/parsers/ecs/describe_task_definition.rb +32 -0
- data/lib/fog/aws/parsers/ecs/describe_tasks.rb +24 -0
- data/lib/fog/aws/parsers/ecs/list_clusters.rb +27 -0
- data/lib/fog/aws/parsers/ecs/list_container_instances.rb +27 -0
- data/lib/fog/aws/parsers/ecs/list_services.rb +27 -0
- data/lib/fog/aws/parsers/ecs/list_task_definition_families.rb +27 -0
- data/lib/fog/aws/parsers/ecs/list_task_definitions.rb +27 -0
- data/lib/fog/aws/parsers/ecs/list_tasks.rb +27 -0
- data/lib/fog/aws/parsers/ecs/register_task_definition.rb +32 -0
- data/lib/fog/aws/parsers/ecs/run_task.rb +24 -0
- data/lib/fog/aws/parsers/ecs/service.rb +82 -0
- data/lib/fog/aws/parsers/ecs/start_task.rb +24 -0
- data/lib/fog/aws/parsers/ecs/stop_task.rb +23 -0
- data/lib/fog/aws/parsers/ecs/task.rb +77 -0
- data/lib/fog/aws/parsers/ecs/task_definition.rb +95 -0
- data/lib/fog/aws/parsers/ecs/update_service.rb +31 -0
- data/lib/fog/aws/requests/compute/create_vpc.rb +1 -1
- data/lib/fog/aws/requests/ecs/create_cluster.rb +64 -0
- data/lib/fog/aws/requests/ecs/create_service.rb +118 -0
- data/lib/fog/aws/requests/ecs/delete_cluster.rb +61 -0
- data/lib/fog/aws/requests/ecs/delete_service.rb +72 -0
- data/lib/fog/aws/requests/ecs/deregister_container_instance.rb +63 -0
- data/lib/fog/aws/requests/ecs/deregister_task_definition.rb +58 -0
- data/lib/fog/aws/requests/ecs/describe_clusters.rb +83 -0
- data/lib/fog/aws/requests/ecs/describe_container_instances.rb +64 -0
- data/lib/fog/aws/requests/ecs/describe_services.rb +76 -0
- data/lib/fog/aws/requests/ecs/describe_task_definition.rb +64 -0
- data/lib/fog/aws/requests/ecs/describe_tasks.rb +65 -0
- data/lib/fog/aws/requests/ecs/list_clusters.rb +45 -0
- data/lib/fog/aws/requests/ecs/list_container_instances.rb +46 -0
- data/lib/fog/aws/requests/ecs/list_services.rb +59 -0
- data/lib/fog/aws/requests/ecs/list_task_definition_families.rb +56 -0
- data/lib/fog/aws/requests/ecs/list_task_definitions.rb +55 -0
- data/lib/fog/aws/requests/ecs/list_tasks.rb +50 -0
- data/lib/fog/aws/requests/ecs/register_task_definition.rb +68 -0
- data/lib/fog/aws/requests/ecs/run_task.rb +114 -0
- data/lib/fog/aws/requests/ecs/start_task.rb +130 -0
- data/lib/fog/aws/requests/ecs/stop_task.rb +64 -0
- data/lib/fog/aws/requests/ecs/update_service.rb +81 -0
- data/lib/fog/aws/version.rb +1 -1
- data/tests/requests/compute/vpc_tests.rb +7 -0
- data/tests/requests/ecs/cluster_tests.rb +112 -0
- data/tests/requests/ecs/container_instance_tests.rb +119 -0
- data/tests/requests/ecs/helper.rb +276 -0
- data/tests/requests/ecs/sample_task_definition1.json +56 -0
- data/tests/requests/ecs/service_tests.rb +132 -0
- data/tests/requests/ecs/task_definitions_tests.rb +97 -0
- data/tests/requests/ecs/task_tests.rb +145 -0
- metadata +59 -2
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/task'
|
6
|
+
|
7
|
+
class RunTask < Fog::Parsers::AWS::ECS::Task
|
8
|
+
def reset
|
9
|
+
super
|
10
|
+
@result = 'RunTaskResult'
|
11
|
+
@response[@result] = {'failures' => [], 'tasks' => []}
|
12
|
+
@contexts = %w(failures tasks containers overrides networkBindings containerOverrides)
|
13
|
+
@context = []
|
14
|
+
@task = {}
|
15
|
+
@failure = {}
|
16
|
+
@container = {}
|
17
|
+
@net_binding = {}
|
18
|
+
@container_overrides = []
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/base'
|
6
|
+
|
7
|
+
class Service < Fog::Parsers::AWS::ECS::Base
|
8
|
+
def start_element(name, attrs = [])
|
9
|
+
super
|
10
|
+
if @contexts.include?(name)
|
11
|
+
@context.push(name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def end_element(name)
|
16
|
+
super
|
17
|
+
case name
|
18
|
+
when *@contexts
|
19
|
+
@context.pop
|
20
|
+
when 'member'
|
21
|
+
case @context.last
|
22
|
+
when 'services'
|
23
|
+
@response[@result]['services'] << @service
|
24
|
+
@service = {}
|
25
|
+
when 'loadBalancers'
|
26
|
+
@service['loadBalancers'] ||= []
|
27
|
+
@service['loadBalancers'] << @load_balancer
|
28
|
+
@load_balancer = {}
|
29
|
+
when 'events'
|
30
|
+
@service['events'] ||= []
|
31
|
+
@service['events'] << @event
|
32
|
+
@event = {}
|
33
|
+
when 'deployments'
|
34
|
+
@service['deployments'] ||= []
|
35
|
+
@service['deployments'] << @deployment
|
36
|
+
@deployment = {}
|
37
|
+
end
|
38
|
+
when 'clusterArn', 'roleArn', 'serviceArn', 'serviceName'
|
39
|
+
@service[name] = value
|
40
|
+
when 'taskDefinition', 'status'
|
41
|
+
case @context.last
|
42
|
+
when 'service', 'services'
|
43
|
+
@service[name] = value
|
44
|
+
when 'deployments'
|
45
|
+
@deployment[name] = value
|
46
|
+
end
|
47
|
+
when 'desiredCount', 'pendingCount', 'runningCount'
|
48
|
+
case @context.last
|
49
|
+
when 'service', 'services'
|
50
|
+
@service[name] = value.to_i
|
51
|
+
when 'deployments'
|
52
|
+
@deployment[name] = value.to_i
|
53
|
+
end
|
54
|
+
when 'loadBalancerName', 'containerName'
|
55
|
+
@load_balancer[name] = value
|
56
|
+
when 'containerPort'
|
57
|
+
@load_balancer[name] = value.to_i
|
58
|
+
when 'createdAt'
|
59
|
+
case @context.last
|
60
|
+
when 'events'
|
61
|
+
@event[name] = Time.parse(value)
|
62
|
+
when 'deployments'
|
63
|
+
@deployment[name] = Time.parse(value)
|
64
|
+
end
|
65
|
+
when 'id'
|
66
|
+
case @context.last
|
67
|
+
when 'events'
|
68
|
+
@event[name] = value
|
69
|
+
when 'deployments'
|
70
|
+
@deployment[name] = value
|
71
|
+
end
|
72
|
+
when 'message'
|
73
|
+
@event[name] = value
|
74
|
+
when 'updatedAt'
|
75
|
+
@deployment[name] = Time.parse(value)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/task'
|
6
|
+
|
7
|
+
class StartTask < Fog::Parsers::AWS::ECS::Task
|
8
|
+
def reset
|
9
|
+
super
|
10
|
+
@result = 'StartTaskResult'
|
11
|
+
@response[@result] = {'failures' => [], 'tasks' => []}
|
12
|
+
@contexts = %w(failures tasks containers overrides networkBindings containerOverrides)
|
13
|
+
@context = []
|
14
|
+
@task = {}
|
15
|
+
@failure = {}
|
16
|
+
@container = {}
|
17
|
+
@net_binding = {}
|
18
|
+
@container_overrides = []
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/task'
|
6
|
+
|
7
|
+
class StopTask < Fog::Parsers::AWS::ECS::Task
|
8
|
+
def reset
|
9
|
+
super
|
10
|
+
@result = 'StopTaskResult'
|
11
|
+
@response[@result] = {'task' => {}}
|
12
|
+
@contexts = %w(task containers overrides networkBindings containerOverrides)
|
13
|
+
@context = []
|
14
|
+
@task = {}
|
15
|
+
@container = {}
|
16
|
+
@net_binding = {}
|
17
|
+
@container_overrides = []
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/base'
|
6
|
+
|
7
|
+
class Task < Fog::Parsers::AWS::ECS::Base
|
8
|
+
def start_element(name, attrs = [])
|
9
|
+
super
|
10
|
+
if @contexts.include?(name)
|
11
|
+
@context.push(name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def end_element(name)
|
16
|
+
super
|
17
|
+
case name
|
18
|
+
when 'containerOverrides'
|
19
|
+
@task['overrides'] ||= {}
|
20
|
+
@task['overrides'][name] = @container_overrides
|
21
|
+
@context.pop
|
22
|
+
when 'task'
|
23
|
+
@response[@result][name] = @task
|
24
|
+
when *@contexts
|
25
|
+
@context.pop
|
26
|
+
when 'member'
|
27
|
+
case @context.last
|
28
|
+
when 'tasks'
|
29
|
+
@response[@result]['tasks'] << @task
|
30
|
+
@task = {}
|
31
|
+
when 'containers'
|
32
|
+
@task['containers'] ||= []
|
33
|
+
@task['containers'] << @container
|
34
|
+
@container = {}
|
35
|
+
when 'networkBindings'
|
36
|
+
@container['networkBindings'] ||= []
|
37
|
+
@container['networkBindings'] << @net_binding
|
38
|
+
@net_binding = {}
|
39
|
+
when 'failures'
|
40
|
+
@response[@result]['failures'] << @failure
|
41
|
+
@failure = {}
|
42
|
+
end
|
43
|
+
when 'clusterArn', 'desiredStatus', 'startedBy', 'containerInstanceArn', 'taskDefinitionArn'
|
44
|
+
@task[name] = value
|
45
|
+
when 'taskArn', 'lastStatus'
|
46
|
+
case @context.last
|
47
|
+
when 'tasks'
|
48
|
+
@task[name] = value
|
49
|
+
when 'containers'
|
50
|
+
@container[name] = value
|
51
|
+
end
|
52
|
+
when 'containerArn'
|
53
|
+
@container[name] = value
|
54
|
+
when 'exitCode'
|
55
|
+
@container[name] = value.to_i
|
56
|
+
when 'name'
|
57
|
+
case @context.last
|
58
|
+
when 'containers'
|
59
|
+
@container[name] = value
|
60
|
+
when 'containerOverrides'
|
61
|
+
@container_overrides << value
|
62
|
+
end
|
63
|
+
when 'networkBindings'
|
64
|
+
@container[name] = @net_bindings
|
65
|
+
when 'bindIP'
|
66
|
+
@net_binding[name] = value
|
67
|
+
when 'hostPort', 'containerPort'
|
68
|
+
@net_binding[name] = value.to_i
|
69
|
+
when 'arn', 'reason'
|
70
|
+
@failure[name] = value
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/base'
|
6
|
+
|
7
|
+
class TaskDefinition < Fog::Parsers::AWS::ECS::Base
|
8
|
+
def start_element(name, attrs = [])
|
9
|
+
super
|
10
|
+
if @contexts.include?(name)
|
11
|
+
@context.push(name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def end_element(name)
|
16
|
+
super
|
17
|
+
case name
|
18
|
+
when 'taskDefinitionArn'
|
19
|
+
@response[@result][@definition][name] = value
|
20
|
+
when 'revision'
|
21
|
+
@response[@result][@definition][name] = value.to_i
|
22
|
+
when *@contexts
|
23
|
+
@context.pop
|
24
|
+
when 'member'
|
25
|
+
case @context.last
|
26
|
+
when 'volumes'
|
27
|
+
@response[@result][@definition]['volumes'] << @volume
|
28
|
+
@volume = {}
|
29
|
+
when 'containerDefinitions'
|
30
|
+
@response[@result][@definition]['containerDefinitions'] << @container
|
31
|
+
@container = {}
|
32
|
+
when 'command'
|
33
|
+
@container['command'] ||= []
|
34
|
+
@container['command'] << value
|
35
|
+
when 'entryPoint'
|
36
|
+
@container['entryPoint'] ||= []
|
37
|
+
@container['entryPoint'] << value
|
38
|
+
when 'links'
|
39
|
+
@container['links'] ||= []
|
40
|
+
@container['links'] << value
|
41
|
+
when 'environment'
|
42
|
+
@container['environment'] ||= []
|
43
|
+
@container['environment'] << @environment
|
44
|
+
@environment = {}
|
45
|
+
when 'mountPoints'
|
46
|
+
@container['mountPoints'] ||= []
|
47
|
+
@container['mountPoints'] << @mountpoint
|
48
|
+
@mountpoint = {}
|
49
|
+
when 'portMappings'
|
50
|
+
@container['portMappings'] ||= []
|
51
|
+
@container['portMappings'] << @portmapping
|
52
|
+
@portmapping = {}
|
53
|
+
end
|
54
|
+
when 'name'
|
55
|
+
case @context.last
|
56
|
+
when 'volumes'
|
57
|
+
@volume[name] = value
|
58
|
+
when 'containerDefinitions'
|
59
|
+
@container[name] = value
|
60
|
+
when 'environment'
|
61
|
+
@environment[name] = value
|
62
|
+
end
|
63
|
+
when 'host'
|
64
|
+
@volume[name] = @host
|
65
|
+
@host = {}
|
66
|
+
when 'sourcePath'
|
67
|
+
@host[name] = value
|
68
|
+
when 'cpu', 'memory'
|
69
|
+
@container[name] = value.to_i
|
70
|
+
when 'essential'
|
71
|
+
@container[name] = value == 'true'
|
72
|
+
when 'image'
|
73
|
+
@container[name] = value
|
74
|
+
when 'value'
|
75
|
+
@environment[name] = value
|
76
|
+
when 'readOnly'
|
77
|
+
case @context.last
|
78
|
+
when 'mountPoints'
|
79
|
+
@mountpoint[name] = value == 'true'
|
80
|
+
when 'volumesFrom'
|
81
|
+
@volume_from[name] = value == 'true'
|
82
|
+
end
|
83
|
+
when 'containerPath', 'sourceVolume'
|
84
|
+
@mountpoint[name] = value
|
85
|
+
when 'containerPort', 'hostPort'
|
86
|
+
@portmapping[name] = value.to_i
|
87
|
+
when 'sourceContainer'
|
88
|
+
@volume_from[name] = value
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module AWS
|
4
|
+
module ECS
|
5
|
+
require 'fog/aws/parsers/ecs/service'
|
6
|
+
|
7
|
+
class UpdateService < Fog::Parsers::AWS::ECS::Service
|
8
|
+
def reset
|
9
|
+
super
|
10
|
+
@result = 'UpdateServiceResult'
|
11
|
+
@response[@result] = {}
|
12
|
+
@contexts = %w(service loadBalancers events deployments)
|
13
|
+
@service = {}
|
14
|
+
@context = []
|
15
|
+
@deployment = {}
|
16
|
+
@load_balancer = {}
|
17
|
+
@event = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def end_element(name)
|
21
|
+
super
|
22
|
+
case name
|
23
|
+
when 'service'
|
24
|
+
@response[@result]['service'] = @service
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class ECS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/ecs/create_cluster'
|
6
|
+
|
7
|
+
# Creates a new Amazon ECS cluster
|
8
|
+
# http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCluster.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * clusterName <~String> - The name of your cluster.
|
11
|
+
# ==== Returns
|
12
|
+
# * response<~Excon::Response>:
|
13
|
+
# * body<~Hash>:
|
14
|
+
# * 'Cluster' <~Hash> - The full description of your new cluster
|
15
|
+
def create_cluster(params={})
|
16
|
+
request({
|
17
|
+
'Action' => 'CreateCluster',
|
18
|
+
:parser => Fog::Parsers::AWS::ECS::CreateCluster.new
|
19
|
+
}.merge(params))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Mock
|
24
|
+
def create_cluster(params={})
|
25
|
+
response = Excon::Response.new
|
26
|
+
response.status = 200
|
27
|
+
|
28
|
+
params.has_key?('clusterName') || params['clusterName'] = 'default'
|
29
|
+
|
30
|
+
owner_id = Fog::AWS::Mock.owner_id
|
31
|
+
cluster_name = params['clusterName']
|
32
|
+
cluster_path = "cluster/#{cluster_name}"
|
33
|
+
cluster_arn = Fog::AWS::Mock.arn('ecs', owner_id, cluster_path, region)
|
34
|
+
cluster = {}
|
35
|
+
|
36
|
+
search_cluster_result = self.data[:clusters].select { |c| c['clusterName'].eql?(cluster_name) }
|
37
|
+
if search_cluster_result.empty?
|
38
|
+
cluster = {
|
39
|
+
'clusterName' => cluster_name,
|
40
|
+
'clusterArn' => cluster_arn,
|
41
|
+
'status' => 'ACTIVE',
|
42
|
+
'registeredContainerInstancesCount' => 0,
|
43
|
+
'runningTasksCount' => 0,
|
44
|
+
'pendingTasksCount' => 0
|
45
|
+
}
|
46
|
+
self.data[:clusters] << cluster
|
47
|
+
else
|
48
|
+
cluster = search_cluster_result.first
|
49
|
+
end
|
50
|
+
|
51
|
+
response.body = {
|
52
|
+
'CreateClusterResult' => {
|
53
|
+
'cluster' => cluster
|
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,118 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class ECS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/ecs/create_service'
|
6
|
+
|
7
|
+
# Runs and maintains a desired number of tasks from a specified task definition.
|
8
|
+
# http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html
|
9
|
+
# ==== Parameters
|
10
|
+
# * clientToken <~String> - unique, case-sensitive identifier you provide to ensure the idempotency of the request.
|
11
|
+
# * cluster <~String> - short name or full Amazon Resource Name (ARN) of the cluster that you want to run your service on.
|
12
|
+
# * desiredCount <~Integer> - number of instantiations of the specified task definition that you would like to place and keep running on your cluster.
|
13
|
+
# * loadBalancers <~Array> - list of load balancer objects, containing the load balancer name, the container name (as it appears in a container definition), and the container port to access from the load balancer.
|
14
|
+
# * role <~String> - name or full Amazon Resource Name (ARN) of the IAM role that allows your Amazon ECS container agent to make calls to your load balancer on your behalf.
|
15
|
+
# * serviceName <~String> - name of your service
|
16
|
+
# * taskDefinition <~String> - family and revision (family:revision) or full Amazon Resource Name (ARN) of the task definition that you want to run in your service
|
17
|
+
# ==== Returns
|
18
|
+
# * response<~Excon::Response>:
|
19
|
+
# * body<~Hash>:
|
20
|
+
# * 'Service' <~Hash> - The full description of your new service
|
21
|
+
def create_service(params={})
|
22
|
+
if load_balancers = params.delete('loadBalancers')
|
23
|
+
params.merge!(Fog::AWS.indexed_param('loadBalancers.member', [*load_balancers]))
|
24
|
+
end
|
25
|
+
request({
|
26
|
+
'Action' => 'CreateService',
|
27
|
+
:parser => Fog::Parsers::AWS::ECS::CreateService.new
|
28
|
+
}.merge(params))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Mock
|
33
|
+
def create_service(params={})
|
34
|
+
response = Excon::Response.new
|
35
|
+
response.status = 200
|
36
|
+
|
37
|
+
e = Fog::AWS::ECS::Error
|
38
|
+
msg = 'ClientException => desiredCount cannot be empty.'
|
39
|
+
raise e, msg unless desired_count = params['desiredCount']
|
40
|
+
msg = 'ClientException => serviceName cannot be empty.'
|
41
|
+
raise e unless service_name = params['serviceName']
|
42
|
+
msg = 'ClientException => taskDefinition cannot be empty.'
|
43
|
+
raise e unless task_definition = params['taskDefinition']
|
44
|
+
|
45
|
+
owner_id = Fog::AWS::Mock.owner_id
|
46
|
+
|
47
|
+
service_path = "service/#{service_name}"
|
48
|
+
service_arn = Fog::AWS::Mock.arn('ecs', owner_id, service_path, region)
|
49
|
+
|
50
|
+
cluster = params['cluster'] || 'default'
|
51
|
+
if !cluster.match(/^arn:aws:ecs:.+:.+:cluster\/(.+)$/)
|
52
|
+
cluster_path = "cluster/#{cluster}"
|
53
|
+
cluster_arn = Fog::AWS::Mock.arn('ecs', owner_id, cluster_path, region)
|
54
|
+
else
|
55
|
+
cluster_arn = cluster
|
56
|
+
end
|
57
|
+
|
58
|
+
if params['role']
|
59
|
+
role = params['role'] if params['role']
|
60
|
+
if !role.match(/^arn:aws:iam:.*:.*:role\/(.+)$/)
|
61
|
+
role_path = "role/#{role}"
|
62
|
+
role_arn = Fog::AWS::Mock.arn('iam', owner_id, role_path, region)
|
63
|
+
else
|
64
|
+
role_arn = role
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if !task_definition.match(/^arn:aws:ecs:.+:.+:task-definition\/.+$/)
|
69
|
+
task_def_path = "task-definition\/#{task_definition}"
|
70
|
+
task_def_arn = Fog::AWS::Mock.arn('ecs', owner_id, task_def_path, region)
|
71
|
+
else
|
72
|
+
task_def_arn = task_definition
|
73
|
+
end
|
74
|
+
|
75
|
+
load_balancers = params['loadBalancers'] || []
|
76
|
+
|
77
|
+
service = {
|
78
|
+
'events' => [],
|
79
|
+
'serviceName' => service_name,
|
80
|
+
'serviceArn' => service_arn,
|
81
|
+
'taskDefinition' => task_def_arn,
|
82
|
+
'clusterArn' => cluster_arn,
|
83
|
+
'status' => 'ACTIVE',
|
84
|
+
'roleArn' => role_arn,
|
85
|
+
'loadBalancers' => [*load_balancers],
|
86
|
+
'deployments' => [],
|
87
|
+
'desiredCount' => desired_count,
|
88
|
+
'pendingCount' => 0,
|
89
|
+
'runningCount' => 0
|
90
|
+
}
|
91
|
+
|
92
|
+
service['deployments'] << {
|
93
|
+
'updatedAt' => Time.now.utc,
|
94
|
+
'id' => "ecs-svc/#{Fog::Mock.random_numbers(19)}",
|
95
|
+
'taskDefinition' => task_def_arn,
|
96
|
+
'status' => 'PRIMARY',
|
97
|
+
'desiredCount' => desired_count,
|
98
|
+
'createdAt' => Time.now.utc,
|
99
|
+
'pendingCount' => 0,
|
100
|
+
'runningCount' => 0
|
101
|
+
}
|
102
|
+
|
103
|
+
self.data[:services] << service
|
104
|
+
|
105
|
+
response.body = {
|
106
|
+
'CreateServiceResult' => {
|
107
|
+
'service' => service,
|
108
|
+
},
|
109
|
+
'ResponseMetadata' => {
|
110
|
+
'RequestId' => Fog::AWS::Mock.request_id
|
111
|
+
}
|
112
|
+
}
|
113
|
+
response
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|