ecs_compose 0.1.0.pre14 → 0.1.0.pre15
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/exe/ecs-compose +11 -7
- data/lib/ecs_compose/cluster.rb +9 -0
- data/lib/ecs_compose/ecs.rb +14 -7
- data/lib/ecs_compose/task_definition.rb +14 -12
- data/lib/ecs_compose.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dc8bf5ed177981cdbfc662042cd9e67a5e2c9b1
|
4
|
+
data.tar.gz: 8d297607c1bdb1fc442832e1c64c8bf896cc053a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7b7e7285cd236537a5869df7274b55f964ab16eb753b087dd58a6b00a871c2212bbf324e143830a42f587f03262a8a612727ab745af060515392cf7277566f0
|
7
|
+
data.tar.gz: ee6b648d01d48a55cb93cf7a2f2574510c33ad97acb5d13b993aeb02312643c5537ca45840e14ace98c5c2b5a15bea279c1ddd88baee5c09de59a3d99a9d01e3
|
data/exe/ecs-compose
CHANGED
@@ -26,6 +26,7 @@ Options:
|
|
26
26
|
-i, --file-info (task:<name> | service:<name>)
|
27
27
|
Specify the task type and task name for a
|
28
28
|
docker-compose.yml file
|
29
|
+
--cluster <cluster> ECS cluster to use [default: default]
|
29
30
|
-e <name>=<value> Set an environment variable
|
30
31
|
--entrypoint <entrypoint>
|
31
32
|
Override the container's regular entrypoint (NOT CURRENTLY
|
@@ -47,10 +48,12 @@ class App
|
|
47
48
|
DEFAULT_FILE = "docker-compose.yml"
|
48
49
|
DEFAULT_MANIFEST = "deploy/DEPLOY-MANIFEST.yml"
|
49
50
|
|
50
|
-
attr_reader :options, :manifest
|
51
|
+
attr_reader :options, :cluster, :manifest
|
51
52
|
|
52
53
|
def initialize
|
53
54
|
@options = Docopt::docopt(USAGE, version: EcsCompose::VERSION)
|
55
|
+
# Docopt.rb does not actually support [default: ...] correctly!
|
56
|
+
@cluster = EcsCompose::Cluster.new(options.fetch('--cluster') || "default")
|
54
57
|
@manifest = load_manifest()
|
55
58
|
|
56
59
|
# Uncomment to dump the docopt parser output, which can be non-obvious.
|
@@ -81,8 +84,8 @@ class App
|
|
81
84
|
def command_up
|
82
85
|
available = manifest.task_definitions.select {|td| td.type == :service }
|
83
86
|
chosen = all_or_specified(available, options.fetch('<service>'))
|
84
|
-
services = chosen.map {|td| td.update }
|
85
|
-
EcsCompose::TaskDefinition.wait_for_services(services)
|
87
|
+
services = chosen.map {|td| td.update(cluster) }
|
88
|
+
EcsCompose::TaskDefinition.wait_for_services(cluster, services)
|
86
89
|
end
|
87
90
|
|
88
91
|
def command_run
|
@@ -107,10 +110,11 @@ class App
|
|
107
110
|
command = options.fetch('<arg>')
|
108
111
|
command = nil if command.empty?
|
109
112
|
|
110
|
-
arn = task.run(
|
113
|
+
arn = task.run(cluster,
|
114
|
+
environment: env,
|
111
115
|
entrypoint: options.fetch('--entrypoint').flatten[0],
|
112
116
|
command: command)
|
113
|
-
EcsCompose::TaskDefinition.wait_for_tasks([arn])
|
117
|
+
EcsCompose::TaskDefinition.wait_for_tasks(cluster, [arn])
|
114
118
|
end
|
115
119
|
|
116
120
|
def command_scale
|
@@ -132,9 +136,9 @@ class App
|
|
132
136
|
service_names = scales.map do |name, count|
|
133
137
|
service = available.find {|td| td.name == name } or
|
134
138
|
raise "Unknown service: #{name}"
|
135
|
-
service.scale(count)
|
139
|
+
service.scale(cluster, count)
|
136
140
|
end
|
137
|
-
EcsCompose::TaskDefinition.wait_for_services(service_names)
|
141
|
+
EcsCompose::TaskDefinition.wait_for_services(cluster, service_names)
|
138
142
|
end
|
139
143
|
|
140
144
|
def command_json
|
data/lib/ecs_compose/ecs.rb
CHANGED
@@ -47,51 +47,58 @@ module EcsCompose
|
|
47
47
|
|
48
48
|
# Update the specified service. Sample args: `"frontend"`,
|
49
49
|
# `"frontend:7"`.
|
50
|
-
def self.update_service(service, task_definition)
|
50
|
+
def self.update_service(cluster, service, task_definition)
|
51
51
|
run("update-service",
|
52
|
+
"--cluster", cluster,
|
52
53
|
"--service", service,
|
53
54
|
"--task-definition", task_definition)
|
54
55
|
end
|
55
56
|
|
56
57
|
# Update the specified service. Sample args: `"frontend"`, `3`.
|
57
|
-
def self.update_service_desired_count(service, desired_count)
|
58
|
+
def self.update_service_desired_count(cluster, service, desired_count)
|
58
59
|
run("update-service",
|
60
|
+
"--cluster", cluster,
|
59
61
|
"--service", service,
|
60
62
|
"--desired-count", desired_count.to_s)
|
61
63
|
end
|
62
64
|
|
63
65
|
# Run a one-off task. Sample args: `"migrator:1"`. The overrides may
|
64
66
|
# be specified in the JSON format used by `aws ecs run-task`.
|
65
|
-
def self.run_task(task_definition, overrides_json: nil)
|
67
|
+
def self.run_task(cluster, task_definition, overrides_json: nil)
|
66
68
|
extra_args = []
|
67
69
|
extra_args.concat(["--overrides", overrides_json]) if overrides_json
|
68
70
|
run("run-task",
|
71
|
+
"--cluster", cluster,
|
69
72
|
"--task-definition", task_definition,
|
70
73
|
*extra_args)
|
71
74
|
end
|
72
75
|
|
73
76
|
# Wait until all of the specified services have reached a stable state.
|
74
77
|
# Returns nil.
|
75
|
-
def self.wait_services_stable(services)
|
78
|
+
def self.wait_services_stable(cluster, services)
|
76
79
|
run("wait", "services-stable",
|
80
|
+
"--cluster", cluster,
|
77
81
|
"--services", *services)
|
78
82
|
end
|
79
83
|
|
80
84
|
# Wait until all of the specified tasks have stopped. Returns nil.
|
81
|
-
def self.wait_tasks_stopped(arns)
|
85
|
+
def self.wait_tasks_stopped(cluster, arns)
|
82
86
|
run("wait", "tasks-stopped",
|
87
|
+
"--cluster", cluster,
|
83
88
|
"--tasks", *arns)
|
84
89
|
end
|
85
90
|
|
86
91
|
# Describe a set of services as JSON.
|
87
|
-
def self.describe_services(services)
|
92
|
+
def self.describe_services(cluster, services)
|
88
93
|
run("describe-services",
|
94
|
+
"--cluster", cluster,
|
89
95
|
"--services", *services)
|
90
96
|
end
|
91
97
|
|
92
98
|
# Describe a set of tasks as JSON.
|
93
|
-
def self.describe_tasks(arns)
|
99
|
+
def self.describe_tasks(cluster, arns)
|
94
100
|
run("describe-tasks",
|
101
|
+
"--cluster", cluster,
|
95
102
|
"--tasks", *arns)
|
96
103
|
end
|
97
104
|
end
|
@@ -28,39 +28,41 @@ module EcsCompose
|
|
28
28
|
|
29
29
|
# Register this task definition with ECS, and update the corresponding
|
30
30
|
# service.
|
31
|
-
def update
|
32
|
-
Ecs.update_service(name, register)
|
31
|
+
def update(cluster)
|
32
|
+
Ecs.update_service(cluster.name, name, register)
|
33
33
|
name
|
34
34
|
end
|
35
35
|
|
36
36
|
# Set the number of running copies of a service we want to have.
|
37
|
-
def scale(count)
|
38
|
-
Ecs.update_service_desired_count(name, count)
|
37
|
+
def scale(cluster, count)
|
38
|
+
Ecs.update_service_desired_count(cluster.name, name, count)
|
39
39
|
name
|
40
40
|
end
|
41
41
|
|
42
42
|
# Wait for a set of services to reach a steady state.
|
43
|
-
def self.wait_for_services(service_names)
|
44
|
-
Ecs.wait_services_stable(service_names)
|
43
|
+
def self.wait_for_services(cluster, service_names)
|
44
|
+
Ecs.wait_services_stable(cluster.name, service_names)
|
45
45
|
# TODO: We never actually get here if the services don't stabilize,
|
46
46
|
# because wait_services_stable will fail with `Waiter ServicesStable
|
47
47
|
# failed: Max attempts`. But we're keeping this code until we
|
48
48
|
# implement event polling and our own version of waiting.
|
49
|
-
|
49
|
+
descriptions = Ecs.describe_services(cluster.name, service_names)
|
50
|
+
ServiceError.fail_if_not_stabilized(descriptions)
|
50
51
|
end
|
51
52
|
|
52
53
|
# Run this task definition as a one-shot ECS task, with the specified
|
53
54
|
# overrides.
|
54
|
-
def run(**args)
|
55
|
+
def run(cluster, **args)
|
55
56
|
overrides_json = json_generator.generate_override_json(**args)
|
56
|
-
info = Ecs.run_task(register,
|
57
|
+
info = Ecs.run_task(cluster.name, register,
|
58
|
+
overrides_json: overrides_json)
|
57
59
|
info.fetch("tasks")[0].fetch("taskArn")
|
58
60
|
end
|
59
61
|
|
60
62
|
# Wait for a set of tasks to finish, and raise an error if they fail.
|
61
|
-
def self.wait_for_tasks(task_arns)
|
62
|
-
Ecs.wait_tasks_stopped(task_arns)
|
63
|
-
TaskError.fail_on_errors(Ecs.describe_tasks(task_arns))
|
63
|
+
def self.wait_for_tasks(cluster, task_arns)
|
64
|
+
Ecs.wait_tasks_stopped(cluster.name, task_arns)
|
65
|
+
TaskError.fail_on_errors(Ecs.describe_tasks(cluster.name, task_arns))
|
64
66
|
end
|
65
67
|
|
66
68
|
# Generate ECS task definition JSON for this instance.
|
data/lib/ecs_compose.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecs_compose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.pre15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Kidd
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docopt
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- exe/ecs-compose
|
105
105
|
- go-publish.sh
|
106
106
|
- lib/ecs_compose.rb
|
107
|
+
- lib/ecs_compose/cluster.rb
|
107
108
|
- lib/ecs_compose/deployment_error.rb
|
108
109
|
- lib/ecs_compose/ecs.rb
|
109
110
|
- lib/ecs_compose/json_generator.rb
|