aws_pocketknife 0.1.16 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db1bec7416632cbd8cd54bf6af1adc7209fd49d7
4
- data.tar.gz: 249ea4be3391a5500cada3d825c47fe26b04910d
3
+ metadata.gz: f8f43490b239504548b877428246e8085070b819
4
+ data.tar.gz: 13e6837ec6e9c17bf4731d169c18c71c55acf779
5
5
  SHA512:
6
- metadata.gz: db5068777a8776af1c501b6c3682f47fdc75248c64ce39f2f96d48855820ab90bb3b28dfcf8608d15c62fcb2e5061207ca49ce9b74da9880cf00fe15c2465756
7
- data.tar.gz: af50ff9246c1557772e439fb715ae6e52174626246ed3c68509f949f12746e5faa7b82eb5ba83af237886f6b6121b9903fbc49718442719cdf7564ea1837c291
6
+ metadata.gz: b5af1f1c2c9b19f79b4df3022a1cb3ce91b8e38e223a65901fa889173f1482e100794d47b35e8030637672eee27dc851369af148b50a5c708a82a52e73d3f569
7
+ data.tar.gz: f0c6c4b76d964b8f2bbba09141cc1ed19f7b7d034d4269de8e21dbf09c1370358b68cc35dead5fa857605d0c4fc1b127bfd2dbff9783a5f82dc38ee1b22c88c9
@@ -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
- desc "list_instances for CLUSTER_NAME", "list instances for a given cluster"
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", "pending_tasks_count","running_tasks_count",
88
- "status"]
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
- data << [instance[:name], info.ec2_instance_id, info.pending_tasks_count,
96
- info.running_tasks_count, info.status
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
@@ -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: '')
@@ -1,3 +1,3 @@
1
1
  module AwsPocketknife
2
- VERSION = "0.1.16"
2
+ VERSION = "0.1.17"
3
3
  end
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.16
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-21 00:00:00.000000000 Z
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