aws_pocketknife 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/aws_pocketknife.gemspec +1 -1
- data/lib/aws_pocketknife.rb +7 -1
- data/lib/aws_pocketknife/cli/ecs.rb +49 -0
- data/lib/aws_pocketknife/cli/main.rb +3 -0
- data/lib/aws_pocketknife/cli/rds_snapshot.rb +2 -2
- data/lib/aws_pocketknife/common/utils.rb +4 -0
- data/lib/aws_pocketknife/ecs.rb +106 -0
- data/lib/aws_pocketknife/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9c9ad66dadfc2e200c6750694a39d648737f026
|
4
|
+
data.tar.gz: 7d908a272af5c333e134104b4e9c3109ae289184
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25c0580c9841afc651bc9d81814ed5c98f9ea6880607559c3f70fd2228b707fa08b5a3ce941d5175eb3733e2fd1adce13d149f88746685a332fd754a60de9d5a
|
7
|
+
data.tar.gz: b9f0edd94a31a86d3794962ea20d09cc340f96e6aba54c0f5337bc95fd5254a1248bd14ab3c57e2b633e5bd6784ba4600122bc31d0d6e0a65ecd7296a54bac64
|
data/README.md
CHANGED
data/aws_pocketknife.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "aws_pocketknife"
|
8
8
|
spec.version = AwsPocketknife::VERSION
|
9
9
|
spec.authors = ["Gustavo Soares Souza"]
|
10
|
-
spec.email = ["
|
10
|
+
spec.email = ["gustavosoares@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = "Command line tools to make aws administration a little bit easier and faster than using the aws consol or aws cli."
|
13
13
|
spec.description = "Have you ever find yourself going through the aws cli documentation page over and over again just to remember the right syntax or argument(s) for that command that you wanna run? Do you feel that you are more productive from the command line? Are you tired of having to open private browser windows or even a different browser to work with multiple aws accounts? AWS Pocketknife is a command line tool to make aws administration a little bit easier and faster than using the aws console or aws cli. It also helps to script some AWS tasks such as cleaning up
|
data/lib/aws_pocketknife.rb
CHANGED
@@ -6,6 +6,7 @@ require 'aws_pocketknife/common/logging'
|
|
6
6
|
|
7
7
|
require 'aws_pocketknife/iam'
|
8
8
|
require 'aws_pocketknife/ec2'
|
9
|
+
require 'aws_pocketknife/ecs'
|
9
10
|
require 'aws_pocketknife/route53'
|
10
11
|
require 'aws_pocketknife/asg'
|
11
12
|
require 'aws_pocketknife/cloudwatch_logs'
|
@@ -17,6 +18,7 @@ require 'aws_pocketknife/cli/iam'
|
|
17
18
|
require 'aws_pocketknife/cli/asg'
|
18
19
|
require 'aws_pocketknife/cli/elb'
|
19
20
|
require 'aws_pocketknife/cli/ec2'
|
21
|
+
require 'aws_pocketknife/cli/ecs'
|
20
22
|
require 'aws_pocketknife/cli/ami'
|
21
23
|
require 'aws_pocketknife/cli/eb'
|
22
24
|
require 'aws_pocketknife/cli/route53'
|
@@ -27,7 +29,7 @@ require 'aws_pocketknife/cli/main'
|
|
27
29
|
module AwsPocketknife
|
28
30
|
extend self
|
29
31
|
|
30
|
-
AWS_REGION = ENV['AWS_REGION'] || '
|
32
|
+
AWS_REGION = ENV['AWS_REGION'] || 'us-west-2'
|
31
33
|
AWS_PROFILE = ENV['AWS_PROFILE'] || nil
|
32
34
|
|
33
35
|
class << self
|
@@ -68,6 +70,10 @@ module AwsPocketknife
|
|
68
70
|
@ec2_client ||= Aws::EC2::Client.new(get_client_options)
|
69
71
|
end
|
70
72
|
|
73
|
+
def ecs_client
|
74
|
+
@ecs_client ||= Aws::ECS::Client.new(get_client_options)
|
75
|
+
end
|
76
|
+
|
71
77
|
def route53_client
|
72
78
|
@route53_client ||= Aws::Route53::Client.new(get_client_options)
|
73
79
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "aws_pocketknife"
|
3
|
+
|
4
|
+
module AwsPocketknife
|
5
|
+
module Cli
|
6
|
+
class Ecs < Thor
|
7
|
+
|
8
|
+
desc "list_clusters", "list clustes"
|
9
|
+
def list_clusters()
|
10
|
+
clusters = AwsPocketknife::Ecs.list_clusters
|
11
|
+
headers = ["name", "status", "services", "containers_count","running_tasks_count", "pending_tasks_count",]
|
12
|
+
data = []
|
13
|
+
if clusters.nil?
|
14
|
+
puts "No clusters found. Check your region"
|
15
|
+
else
|
16
|
+
#AwsPocketknife::Ecs.nice_print(object: clusters)
|
17
|
+
clusters.each do |cluster|
|
18
|
+
info = cluster[:info]
|
19
|
+
data << [cluster[:name], info.status, info.active_services_count,
|
20
|
+
info.registered_container_instances_count, info.running_tasks_count, info.pending_tasks_count
|
21
|
+
]
|
22
|
+
end
|
23
|
+
AwsPocketknife::Ecs.pretty_table(headers: headers, data: data)
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "list_services CLUSTER_NAME", "list services for a given cluster"
|
29
|
+
def list_services(cluster)
|
30
|
+
services = AwsPocketknife::Ecs.list_services cluster: cluster
|
31
|
+
headers = ["name", "status", "desired_count","running_count",
|
32
|
+
"pending_count", "task_definition", "maximum_percent", "minimum_healthy_percent"]
|
33
|
+
data = []
|
34
|
+
if services.nil?
|
35
|
+
puts "No service found"
|
36
|
+
else
|
37
|
+
services.each do |service|
|
38
|
+
info = service[:info]
|
39
|
+
data << [service[:name], info.status, info.desired_count,
|
40
|
+
info.running_count, info.pending_count, info.task_definition.split('/')[1],
|
41
|
+
info.deployment_configuration.maximum_percent, info.deployment_configuration.minimum_healthy_percent
|
42
|
+
]
|
43
|
+
end
|
44
|
+
AwsPocketknife::Ecs.pretty_table(headers: headers, data: data)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -5,7 +5,7 @@ module AwsPocketknife
|
|
5
5
|
module Cli
|
6
6
|
class RdsSnapshot < Thor
|
7
7
|
|
8
|
-
desc "
|
8
|
+
desc "list DB_NAME", "list snapshots for a given database name."
|
9
9
|
def list(db_name)
|
10
10
|
snapshots = AwsPocketknife::Rds.describe_snapshots(db_name: db_name)
|
11
11
|
headers = [ 'Name', 'Creation Time', 'Snapshot Type', 'Status','Port', 'Engine', 'Version', 'Storage (Gb)', 'IOPS']
|
@@ -34,7 +34,7 @@ module AwsPocketknife
|
|
34
34
|
dry_run: dry_run
|
35
35
|
end
|
36
36
|
|
37
|
-
desc "create DB_NAME", "Creates a snapshot for
|
37
|
+
desc "create DB_NAME", "Creates a snapshot for database name."
|
38
38
|
def create(db_name)
|
39
39
|
AwsPocketknife::Rds.create_snapshot db_name: db_name
|
40
40
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'aws_pocketknife'
|
2
|
+
require 'base64'
|
3
|
+
require 'openssl'
|
4
|
+
require 'retryable'
|
5
|
+
require 'recursive-open-struct'
|
6
|
+
|
7
|
+
module AwsPocketknife
|
8
|
+
module Ecs
|
9
|
+
|
10
|
+
MAX_ATTEMPTS = 15
|
11
|
+
DELAY_SECONDS = 10
|
12
|
+
|
13
|
+
STATE_PENDING = 'pending'
|
14
|
+
STATE_AVAILABLE = 'available'
|
15
|
+
STATE_DEREGISTERED = 'deregistered'
|
16
|
+
STATE_INVALID = 'invalid'
|
17
|
+
STATE_FAILED = 'failed'
|
18
|
+
STATE_ERROR = 'error'
|
19
|
+
|
20
|
+
class << self
|
21
|
+
include AwsPocketknife::Common::Utils
|
22
|
+
#include AwsPocketknife::Common::Logging
|
23
|
+
|
24
|
+
Logging = Common::Logging.logger
|
25
|
+
|
26
|
+
def describe_clusters(name: '')
|
27
|
+
ecs_client.describe_clusters({clusters: [name]}).clusters.first
|
28
|
+
end
|
29
|
+
|
30
|
+
def list_clusters(max_results: 50)
|
31
|
+
clusters_list = []
|
32
|
+
responses = []
|
33
|
+
|
34
|
+
clusters = get_clusters max_results: max_results
|
35
|
+
responses << clusters.cluster_arns
|
36
|
+
next_token = clusters.next_token
|
37
|
+
|
38
|
+
while true
|
39
|
+
break if next_token.nil? or next_token.empty?
|
40
|
+
resp = get_clusters(next_token: next_token, max_results: max_results)
|
41
|
+
responses << clusters.cluster_arns
|
42
|
+
next_token = resp.next_token
|
43
|
+
end
|
44
|
+
|
45
|
+
responses.flatten!
|
46
|
+
|
47
|
+
responses.each do |cluster|
|
48
|
+
cluster_map = {}
|
49
|
+
cluster_map[:name] = cluster.split('/')[1]
|
50
|
+
info = describe_clusters name: cluster
|
51
|
+
cluster_map[:info] = info
|
52
|
+
clusters_list << cluster_map
|
53
|
+
end
|
54
|
+
return clusters_list
|
55
|
+
end
|
56
|
+
|
57
|
+
def describe_services(name: '', cluster: '')
|
58
|
+
ecs_client.describe_services({cluster: cluster, services: [name]}).services.first
|
59
|
+
end
|
60
|
+
|
61
|
+
def list_services(cluster: '', max_results: 50)
|
62
|
+
services_list = []
|
63
|
+
responses = []
|
64
|
+
|
65
|
+
services = get_services max_results: max_results, cluster: cluster
|
66
|
+
responses << services.service_arns
|
67
|
+
next_token = services.next_token
|
68
|
+
|
69
|
+
while true
|
70
|
+
break if next_token.nil? or next_token.empty?
|
71
|
+
resp = get_services(next_token: next_token, max_results: max_results, cluster: cluster)
|
72
|
+
responses << services.service_arns
|
73
|
+
next_token = resp.next_token
|
74
|
+
end
|
75
|
+
|
76
|
+
responses.flatten!
|
77
|
+
|
78
|
+
responses.each do |service|
|
79
|
+
service_map = {}
|
80
|
+
service_map[:name] = service.split('/')[1]
|
81
|
+
info = describe_services name: service, cluster: cluster
|
82
|
+
service_map[:info] = info
|
83
|
+
services_list << service_map
|
84
|
+
end
|
85
|
+
return services_list
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_services(next_token: "", max_results: 100, cluster: '')
|
89
|
+
ecs_client.list_services({
|
90
|
+
max_results: max_results,
|
91
|
+
cluster: cluster,
|
92
|
+
next_token: next_token,
|
93
|
+
})
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_clusters(next_token: "", max_results: 100)
|
97
|
+
ecs_client.list_clusters({
|
98
|
+
max_results: max_results,
|
99
|
+
next_token: next_token
|
100
|
+
})
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
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.
|
4
|
+
version: 0.1.10
|
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:
|
11
|
+
date: 2017-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -199,7 +199,7 @@ description: |-
|
|
199
199
|
These commands are also handy if you have multiple aws accounts to manage, since you can't have multiple tabs open for
|
200
200
|
different accounts in a web browser. The only way would be to use diffente browsers or open incognito windows.
|
201
201
|
email:
|
202
|
-
-
|
202
|
+
- gustavosoares@gmail.com
|
203
203
|
executables:
|
204
204
|
- pocketknife
|
205
205
|
extensions: []
|
@@ -233,6 +233,7 @@ files:
|
|
233
233
|
- lib/aws_pocketknife/cli/asg.rb
|
234
234
|
- lib/aws_pocketknife/cli/eb.rb
|
235
235
|
- lib/aws_pocketknife/cli/ec2.rb
|
236
|
+
- lib/aws_pocketknife/cli/ecs.rb
|
236
237
|
- lib/aws_pocketknife/cli/elb.rb
|
237
238
|
- lib/aws_pocketknife/cli/iam.rb
|
238
239
|
- lib/aws_pocketknife/cli/main.rb
|
@@ -243,6 +244,7 @@ files:
|
|
243
244
|
- lib/aws_pocketknife/common/logging.rb
|
244
245
|
- lib/aws_pocketknife/common/utils.rb
|
245
246
|
- lib/aws_pocketknife/ec2.rb
|
247
|
+
- lib/aws_pocketknife/ecs.rb
|
246
248
|
- lib/aws_pocketknife/elastic_beanstalk.rb
|
247
249
|
- lib/aws_pocketknife/elb.rb
|
248
250
|
- lib/aws_pocketknife/iam.rb
|
@@ -271,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
273
|
version: '0'
|
272
274
|
requirements: []
|
273
275
|
rubyforge_project:
|
274
|
-
rubygems_version: 2.4.
|
276
|
+
rubygems_version: 2.4.5.1
|
275
277
|
signing_key:
|
276
278
|
specification_version: 4
|
277
279
|
summary: Command line tools to make aws administration a little bit easier and faster
|