aws_pocketknife 0.1.16 → 0.1.17
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/aws_pocketknife.gemspec +1 -0
- data/lib/aws_pocketknife/cli/ecs.rb +48 -6
- data/lib/aws_pocketknife/ecs.rb +39 -0
- data/lib/aws_pocketknife/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8f43490b239504548b877428246e8085070b819
|
4
|
+
data.tar.gz: 13e6837ec6e9c17bf4731d169c18c71c55acf779
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5af1f1c2c9b19f79b4df3022a1cb3ce91b8e38e223a65901fa889173f1482e100794d47b35e8030637672eee27dc851369af148b50a5c708a82a52e73d3f569
|
7
|
+
data.tar.gz: f0c6c4b76d964b8f2bbba09141cc1ed19f7b7d034d4269de8e21dbf09c1370358b68cc35dead5fa857605d0c4fc1b127bfd2dbff9783a5f82dc38ee1b22c88c9
|
data/aws_pocketknife.gemspec
CHANGED
@@ -26,6 +26,7 @@ different accounts in a web browser. The only way would be to use diffente brows
|
|
26
26
|
spec.add_dependency 'aws-sdk-core', '~> 2.1'
|
27
27
|
spec.add_dependency 'retryable', '~> 2.0'
|
28
28
|
spec.add_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_dependency "colorize", "= 0.8.1"
|
29
30
|
spec.add_dependency "erubis", "= 2.7.0"
|
30
31
|
spec.add_dependency "pretty_table", "= 0.1.0"
|
31
32
|
spec.add_dependency "awesome_print", "= 1.6.1"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "thor"
|
2
|
+
require "colorize"
|
2
3
|
require "aws_pocketknife"
|
3
4
|
|
4
5
|
module AwsPocketknife
|
@@ -81,20 +82,61 @@ module AwsPocketknife
|
|
81
82
|
AwsPocketknife::Ecs.nice_print(object: resp.to_h)
|
82
83
|
end
|
83
84
|
|
84
|
-
|
85
|
+
# container instance
|
86
|
+
desc "drain_instances CLUSTER_NAME, CONTAINERS", "drains containers associated to the ecs cluster. CONTAINERS can a be a string delimited list"
|
87
|
+
def drain_instances(cluster, names)
|
88
|
+
resp = AwsPocketknife::Ecs.drain_instances cluster: cluster, names: names
|
89
|
+
puts ""
|
90
|
+
puts "Response: "
|
91
|
+
puts ""
|
92
|
+
AwsPocketknife::Ecs.nice_print(object: resp.to_a)
|
93
|
+
end
|
94
|
+
|
95
|
+
# container instance
|
96
|
+
desc "list_instance_tasks CLUSTER_NAME, CONTAINER_NAME", "list tasks running in container (instance)"
|
97
|
+
def list_instance_tasks(cluster, name)
|
98
|
+
resp = AwsPocketknife::Ecs.list_container_tasks cluster: cluster, container_name: name
|
99
|
+
headers = ["name", "started_at", "stopped_at", "last_status", "task"]
|
100
|
+
data = []
|
101
|
+
if resp.nil?
|
102
|
+
puts "No tasks found"
|
103
|
+
else
|
104
|
+
resp.tasks.each do |task|
|
105
|
+
data << [task.task_definition_arn.split('/')[1], task.started_at, task.stopped_at, task.last_status, task.task_arn.split('/')[1]]
|
106
|
+
end
|
107
|
+
AwsPocketknife::Ecs.pretty_table(headers: headers, data: data)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
desc "list_instances CLUSTER_NAME", "list instances for a given cluster"
|
85
112
|
def list_instances(cluster)
|
86
113
|
instances = AwsPocketknife::Ecs.list_container_instances cluster: cluster
|
87
|
-
headers = ["name", "ec2_instance_id", "
|
88
|
-
|
114
|
+
headers = ["name", "ec2_instance_id", "agent_connected",
|
115
|
+
"pending_tasks_count","running_tasks_count", "status",
|
116
|
+
"cpu (units)", "mem (MiB)"
|
117
|
+
]
|
89
118
|
data = []
|
90
119
|
if instances.nil?
|
91
120
|
puts "No instances found"
|
92
121
|
else
|
93
122
|
instances.each do |instance|
|
94
123
|
info = instance[:info]
|
95
|
-
|
96
|
-
|
97
|
-
|
124
|
+
# tasks = instance[:tasks]
|
125
|
+
# task_list = []
|
126
|
+
# unless tasks.empty?
|
127
|
+
# tasks.tasks.each do |t|
|
128
|
+
# task_list << t.task_definition_arn.split('/')[1]
|
129
|
+
# end
|
130
|
+
# end
|
131
|
+
cpu_total = info.registered_resources[0].integer_value
|
132
|
+
mem_total = info.registered_resources[1].integer_value
|
133
|
+
cpu_available = info.remaining_resources[0].integer_value
|
134
|
+
mem_available = info.remaining_resources[1].integer_value
|
135
|
+
connected = info.agent_connected
|
136
|
+
data << [instance[:name], info.ec2_instance_id, connected,
|
137
|
+
info.pending_tasks_count, info.running_tasks_count, info.status,
|
138
|
+
"#{cpu_available} / #{cpu_total}", "#{mem_available} / #{mem_total}"
|
139
|
+
]
|
98
140
|
end
|
99
141
|
AwsPocketknife::Ecs.pretty_table(headers: headers, data: data)
|
100
142
|
end
|
data/lib/aws_pocketknife/ecs.rb
CHANGED
@@ -23,6 +23,18 @@ module AwsPocketknife
|
|
23
23
|
|
24
24
|
Logging = Common::Logging.logger
|
25
25
|
|
26
|
+
# container instance
|
27
|
+
|
28
|
+
# set a list of instances to draining. instances is a comma delimited string
|
29
|
+
|
30
|
+
def drain_instances(cluster: '', names: '')
|
31
|
+
ecs_client.update_container_instances_state({
|
32
|
+
cluster: cluster,
|
33
|
+
container_instances: names.split(';'), # required
|
34
|
+
status: "DRAINING", # required, accepts ACTIVE, DRAINING
|
35
|
+
})
|
36
|
+
end
|
37
|
+
|
26
38
|
def describe_container_instances(cluster: '', container: '')
|
27
39
|
ecs_client.describe_container_instances({cluster: cluster, container_instances: [container]}).container_instances.first
|
28
40
|
end
|
@@ -47,14 +59,23 @@ module AwsPocketknife
|
|
47
59
|
|
48
60
|
responses.each do |container|
|
49
61
|
container_map = {}
|
62
|
+
task_list = []
|
50
63
|
container_map[:name] = container.split('/')[1]
|
51
64
|
info = describe_container_instances cluster: cluster, container: container
|
52
65
|
container_map[:info] = info
|
66
|
+
#container_map[:tasks] = list_container_tasks(cluster: cluster, container_name: container_map[:name])
|
53
67
|
containers_list << container_map
|
54
68
|
end
|
55
69
|
return containers_list
|
56
70
|
end
|
57
71
|
|
72
|
+
# list tasks in container instance
|
73
|
+
def list_container_tasks(cluster: '', container_name: '')
|
74
|
+
tasks_list = []
|
75
|
+
tasks = list_tasks cluster: cluster, container_instance: container_name
|
76
|
+
describe_tasks(cluster: cluster, tasks: tasks)
|
77
|
+
end
|
78
|
+
|
58
79
|
# clusters
|
59
80
|
|
60
81
|
def describe_clusters(name: '')
|
@@ -154,6 +175,24 @@ module AwsPocketknife
|
|
154
175
|
return resp.task_definition.container_definitions.first
|
155
176
|
end
|
156
177
|
|
178
|
+
def list_tasks cluster: '', container_instance: ''
|
179
|
+
ecs_client.list_tasks({
|
180
|
+
cluster: cluster,
|
181
|
+
container_instance: container_instance,
|
182
|
+
}).task_arns
|
183
|
+
end
|
184
|
+
|
185
|
+
def describe_tasks cluster: '', tasks: []
|
186
|
+
if tasks.empty?
|
187
|
+
return []
|
188
|
+
else
|
189
|
+
return ecs_client.describe_tasks({
|
190
|
+
cluster: cluster,
|
191
|
+
tasks: tasks,
|
192
|
+
})
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
157
196
|
# helpers
|
158
197
|
|
159
198
|
def get_services(next_token: "", max_results: 100, cluster: '')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws_pocketknife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gustavo Soares Souza
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: colorize
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.1
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: erubis
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|