ecs_cmd 0.1.3 → 0.1.4
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 +4 -0
- data/Gemfile.lock +2 -1
- data/README.md +203 -12
- data/bin/ecs-cmd +4 -2
- data/lib/ecs_cmd/exec.rb +4 -4
- data/lib/ecs_cmd/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d71f58e4a9633203372ae063a6092f3e240706512e78194d3c826ee917061067
|
4
|
+
data.tar.gz: 596040a7991d22b567f6949628bd8e6ff8196f6c43c6b3b12961a7c16e40f11d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c15acb739bb663c7a6f42627dd6d8e47b440b7de2964d48ee6d919cfcc2f8517ba2e06647e195058992ce5b1092bc3b9dbcf11c57af1a87892fee683998580b5
|
7
|
+
data.tar.gz: 3fd61f53280919e2c9cefc57a02167e7c3fd2c423b427f8be7d8bef0755bbd80f0fe111fe86653d113fcde5d9acc15c156724d881c1e0f63ae873708b85c86bb
|
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,29 +2,220 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/dschaaff/ecs-cmd) [](https://badge.fury.io/rb/ecs_cmd)
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
TODO: Delete this and the text above, and describe your gem
|
5
|
+
This is a command line application for interacting with AWS ECS. The standard AWS cli can be a bit
|
6
|
+
cumbersome for some tasks. Ecs-cmd aims to simplify those tasks.
|
8
7
|
|
9
8
|
## Installation
|
10
9
|
|
11
|
-
|
10
|
+
```bash
|
11
|
+
gem install ecs_cmd
|
12
|
+
```
|
13
|
+
|
14
|
+
The gem uses the standard aws crendential chain for authentication actions. See https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html for reference.
|
12
15
|
|
13
|
-
|
14
|
-
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
```
|
19
|
+
ecs-cmd
|
20
|
+
NAME
|
21
|
+
ecs-cmd - Command utility for interacting with AWS ECS
|
22
|
+
|
23
|
+
SYNOPSIS
|
24
|
+
ecs-cmd [global options] command [command options] [arguments...]
|
25
|
+
|
26
|
+
VERSION
|
27
|
+
0.1.3
|
28
|
+
|
29
|
+
GLOBAL OPTIONS
|
30
|
+
--help - Show this message
|
31
|
+
-r, --region=region - Set the aws region (default: us-east-1)
|
32
|
+
--version - Display the program version
|
33
|
+
|
34
|
+
COMMANDS
|
35
|
+
exec - Execute a Command Within a Service's Container
|
36
|
+
get - Get Info on Clusters and Services
|
37
|
+
help - Shows a list of commands or help for one command
|
38
|
+
logs - Tail Logs From a Service's Container
|
39
|
+
run-task - Run a One Off Task On an ECS Cluster
|
40
|
+
shell - Open a Shell Inside a Service's Container
|
41
|
+
ssh - SSH into Host Task is Running On
|
15
42
|
```
|
16
43
|
|
17
|
-
|
44
|
+
### Get Commands
|
18
45
|
|
19
|
-
|
46
|
+
These allow you to query information from ECS.
|
20
47
|
|
21
|
-
|
48
|
+
#### Get Clusters
|
22
49
|
|
23
|
-
|
50
|
+
```
|
51
|
+
ecs-cmd get clusters
|
52
|
+
+--------------------+--------------------------+----------+---------------+---------------+
|
53
|
+
| CLUSTER NAME | CONTAINER_INSTANCE_COUNT | SERVICES | RUNNING_TASKS | PENDING_TASKS |
|
54
|
+
+--------------------+--------------------------+----------+---------------+---------------+
|
55
|
+
| production | 20 | 39 | 82 | 0 |
|
56
|
+
| development | 1 | 2 | 1 | 0 |
|
57
|
+
+--------------------+--------------------------+----------+---------------+---------------+
|
58
|
+
```
|
24
59
|
|
25
|
-
|
60
|
+
#### Get Services
|
61
|
+
|
62
|
+
Prints an overview of the services in a given cluster.
|
63
|
+
|
64
|
+
```shella
|
65
|
+
ecs-cmd get services --help
|
66
|
+
NAME
|
67
|
+
services -
|
68
|
+
|
69
|
+
SYNOPSIS
|
70
|
+
ecs-cmd [global options] get services [command options]
|
71
|
+
|
72
|
+
COMMAND OPTIONS
|
73
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
74
|
+
```
|
75
|
+
|
76
|
+
```shell
|
77
|
+
ecs-cmd get services -c testing
|
78
|
+
+--------------------+---------------+---------------+---------------+
|
79
|
+
| SERVICE NAME | DESIRED_COUNT | RUNNING_COUNT | PENDING_COUNT |
|
80
|
+
+--------------------+---------------+---------------+---------------+
|
81
|
+
| datadog-agent | 1 | 0 | 0 |
|
82
|
+
| foo-bar | 1 | 1 | 0 |
|
83
|
+
+--------------------+---------------+---------------+---------------+
|
84
|
+
```
|
85
|
+
|
86
|
+
#### Get Service
|
87
|
+
|
88
|
+
Get information on a specific service in a cluster.
|
89
|
+
|
90
|
+
```shell
|
91
|
+
cs-cmd get service --help
|
92
|
+
NAME
|
93
|
+
service -
|
94
|
+
|
95
|
+
SYNOPSIS
|
96
|
+
ecs-cmd [global options] get service [command options]
|
97
|
+
|
98
|
+
COMMAND OPTIONS
|
99
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
100
|
+
-e, --[no-]events - get ecs events
|
101
|
+
-s, --service=service - service name (required, default: none)
|
102
|
+
-t, --[no-]task_definition - get current task definition for service
|
103
|
+
```
|
104
|
+
|
105
|
+
```shell
|
106
|
+
ecs-cmd get service -c production -s foo
|
107
|
+
+------+--------+---------------+---------------+---------------+-------------+-------------+
|
108
|
+
| NAME | STATUS | RUNNING COUNT | DESIRED COUNT | PENDING COUNT | MAX HEALTHY | MIN HEALTHY |
|
109
|
+
+------+--------+---------------+---------------+---------------+-------------+-------------+
|
110
|
+
| foo | ACTIVE | 2 | 2 | 0 | 200 | 50 |
|
111
|
+
+------+--------+---------------+---------------+---------------+-------------+-------------+
|
112
|
+
+----------------------------------------------------------------------+
|
113
|
+
| TASK DEFINITION |
|
114
|
+
+----------------------------------------------------------------------+
|
115
|
+
| arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task-definition/foo-production:25 |
|
116
|
+
+----------------------------------------------------------------------+
|
117
|
+
+---------------------+--------------+
|
118
|
+
| INSTANCE ID | IP |
|
119
|
+
+---------------------+--------------+
|
120
|
+
| i-xxxxxxxxxxxxxxxxx | 10.0.230.1 |
|
121
|
+
| i-xxxxxxxxxxxxxxxxx | 10.0.220.3 |
|
122
|
+
+---------------------+--------------+
|
123
|
+
+-----------------+----------------------------------------------------------------------+
|
124
|
+
| DEPLOYMENTS | |
|
125
|
+
+-----------------+----------------------------------------------------------------------+
|
126
|
+
| id | ecs-svc/xxxxxxxxxxxxxxxxxxx |
|
127
|
+
| status | PRIMARY |
|
128
|
+
| task definition | arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task-definition/foo-production:25 |
|
129
|
+
| desired count | 2 |
|
130
|
+
| pending count | 0 |
|
131
|
+
| running count | 2 |
|
132
|
+
| created at | 2018-12-07 09:44:59 -0800 |
|
133
|
+
| updated at | 2018-12-07 09:45:58 -0800 |
|
134
|
+
|
135
|
+
+-----------------+----------------------------------------------------------------------+
|
136
|
+
```
|
137
|
+
|
138
|
+
### Logs
|
26
139
|
|
27
|
-
|
140
|
+
*requires ssh access to instance*
|
141
|
+
|
142
|
+
Streams logs from 1 of a services running tasks using the docker logs command
|
143
|
+
|
144
|
+
```shell
|
145
|
+
ecs-cmd logs --help
|
146
|
+
NAME
|
147
|
+
logs - Tail Logs From a Service's Container
|
148
|
+
|
149
|
+
SYNOPSIS
|
150
|
+
ecs-cmd [global options] logs [command options]
|
151
|
+
|
152
|
+
COMMAND OPTIONS
|
153
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
154
|
+
-l, --lines=lines - number of historical lines to tail (default: 30)
|
155
|
+
-s, --service=service - service name (required, default: none)
|
156
|
+
```
|
157
|
+
|
158
|
+
### Run Task
|
159
|
+
|
160
|
+
Run a one off task in ECS. This will poll for the task to exit and report its exit code. This is
|
161
|
+
handy for tasks like rails migrations. If a docker image is passed it will create a new revision of
|
162
|
+
the task definition prior to running the task.
|
163
|
+
|
164
|
+
```shell
|
165
|
+
ecs-cmd run-task --help
|
166
|
+
NAME
|
167
|
+
run-task - Run a One Off Task On an ECS Cluster
|
168
|
+
|
169
|
+
SYNOPSIS
|
170
|
+
ecs-cmd [global options] run-task [command options]
|
171
|
+
|
172
|
+
COMMAND OPTIONS
|
173
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
174
|
+
-d, --command=command - override task definition command (default: none)
|
175
|
+
-i, --image=image - docker image to use for task (default: none)
|
176
|
+
-n, --container-name=container name - container name (default: none)
|
177
|
+
-t, --task-definition=arg - the task definition to use for task (required, default: none)
|
178
|
+
```
|
179
|
+
|
180
|
+
### Shell
|
181
|
+
|
182
|
+
*requires ssh access to instance*
|
183
|
+
|
184
|
+
Open a shell inside of a container for a given service.
|
185
|
+
|
186
|
+
```shell
|
187
|
+
ecs-cmd shell --help
|
188
|
+
NAME
|
189
|
+
shell - Open a Shell Inside a Service's Container
|
190
|
+
|
191
|
+
SYNOPSIS
|
192
|
+
ecs-cmd [global options] shell [command options]
|
193
|
+
|
194
|
+
COMMAND OPTIONS
|
195
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
196
|
+
-s, --service=service - service name (required, default: none)
|
197
|
+
--[no-]sh - use sh instead of bash
|
198
|
+
-u, --user=user - user name or uid (default: root)
|
199
|
+
```
|
200
|
+
|
201
|
+
### SSH
|
202
|
+
|
203
|
+
*requires ssh access to instance*
|
204
|
+
|
205
|
+
SSH onto a host where a container for a given service is running.
|
206
|
+
|
207
|
+
```shell
|
208
|
+
ecs-cmd ssh --help
|
209
|
+
NAME
|
210
|
+
ssh - SSH into Host Task is Running On
|
211
|
+
|
212
|
+
SYNOPSIS
|
213
|
+
ecs-cmd [global options] ssh [command options]
|
214
|
+
|
215
|
+
COMMAND OPTIONS
|
216
|
+
-c, --cluster=cluster - cluster name (required, default: none)
|
217
|
+
-s, --service=service - service name (required, default: none)
|
218
|
+
```
|
28
219
|
|
29
220
|
## Development
|
30
221
|
|
data/bin/ecs-cmd
CHANGED
@@ -89,12 +89,13 @@ arg_name 'command', :required
|
|
89
89
|
command :exec do |c|
|
90
90
|
c.flag %i[c cluster], desc: 'cluster name', arg_name: 'cluster', required: true
|
91
91
|
c.flag %i[s service], desc: 'service name', arg_name: 'service', required: true
|
92
|
+
c.flag %i[u user], desc: 'user name or uid', arg_name: 'user', default_value: 'root', required: false
|
92
93
|
c.action do |global_options, options, args|
|
93
94
|
service = EcsCmd::Service.new(options[:c], options[:s], global_options[:region])
|
94
95
|
ip = service.container_instance_ips[0]
|
95
96
|
task_family = service.task_family
|
96
97
|
command = args.join(' ')
|
97
|
-
EcsCmd::Exec.execute(task_family, ip, command)
|
98
|
+
EcsCmd::Exec.execute(task_family, ip, command, options[:u])
|
98
99
|
end
|
99
100
|
end
|
100
101
|
|
@@ -102,13 +103,14 @@ desc "Open a Shell Inside a Service's Container"
|
|
102
103
|
command 'shell' do |c|
|
103
104
|
c.flag %i[c cluster], desc: 'cluster name', arg_name: 'cluster', required: true
|
104
105
|
c.flag %i[s service], desc: 'service name', arg_name: 'service', required: true
|
106
|
+
c.flag %i[u user], desc: 'user name or uid', arg_name: 'user', default_value: 'root', required: false
|
105
107
|
c.switch %i[sh], desc: 'use sh instead of bash', default_value: false
|
106
108
|
c.action do |global_options, options, args|
|
107
109
|
service = EcsCmd::Service.new(options[:c], options[:s], global_options[:region])
|
108
110
|
ip = service.container_instance_ips[0]
|
109
111
|
task_family = service.task_family
|
110
112
|
shell = options[:sh] ? 'sh' : 'bash'
|
111
|
-
EcsCmd::Exec.shell(task_family, ip, shell)
|
113
|
+
EcsCmd::Exec.shell(task_family, ip, shell, options[:u])
|
112
114
|
end
|
113
115
|
end
|
114
116
|
|
data/lib/ecs_cmd/exec.rb
CHANGED
@@ -17,8 +17,8 @@ module EcsCmd
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# used to run arbitrary command inside a container
|
20
|
-
def execute(task_family, ip, command)
|
21
|
-
cmd = "docker exec -i -t `#{docker_ps_task(task_family)}` #{command}"
|
20
|
+
def execute(task_family, ip, command, user = 'root')
|
21
|
+
cmd = "docker exec -i -t -u #{user} `#{docker_ps_task(task_family)}` #{command}"
|
22
22
|
Open3.popen2e(ssh_cmd(ip) + " '#{cmd}' ") do |stdin, stdout, stderr, status_thread|
|
23
23
|
stdout.each_line do |line|
|
24
24
|
puts line
|
@@ -27,8 +27,8 @@ module EcsCmd
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# used to open a shell within a container?
|
30
|
-
def shell(task_family, ip, shell='bash')
|
31
|
-
cmd = "docker exec -i -t `#{docker_ps_task(task_family)}` #{shell}"
|
30
|
+
def shell(task_family, ip, shell = 'bash', user = 'root')
|
31
|
+
cmd = "docker exec -i -t -u #{user} `#{docker_ps_task(task_family)}` #{shell}"
|
32
32
|
exec(ssh_cmd(ip) + " '#{cmd}' ")
|
33
33
|
end
|
34
34
|
|
data/lib/ecs_cmd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecs_cmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schaaff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ec2
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- ".rspec"
|
135
135
|
- ".rubocop.yml"
|
136
136
|
- ".travis.yml"
|
137
|
+
- CHANGELOG.md
|
137
138
|
- CODE_OF_CONDUCT.md
|
138
139
|
- Gemfile
|
139
140
|
- Gemfile.lock
|