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 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