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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6dda4ef74540ff9ce2ba7034fb107a9b81be7c80
4
- data.tar.gz: 7050ea57e0633da64d94750896f14ba80ed70dcd
3
+ metadata.gz: d9c9ad66dadfc2e200c6750694a39d648737f026
4
+ data.tar.gz: 7d908a272af5c333e134104b4e9c3109ae289184
5
5
  SHA512:
6
- metadata.gz: f932c6e0b748432107c96c66988188bb778b9a749d2dd44f1d5d291559884b8d51d84ef156d94f115909ad9418db3a9b8ba1211fe8a2ce2ed4614518e92df8e1
7
- data.tar.gz: 3ef78984d4da15fb3a674377504554c9c3c93c405a7f97e3b299f8f4dbf61ffd2f5a43c127cc903c187eb287b7c82904db1d54e40f3da8f33d4440009a9b35af
6
+ metadata.gz: 25c0580c9841afc651bc9d81814ed5c98f9ea6880607559c3f70fd2228b707fa08b5a3ce941d5175eb3733e2fd1adce13d149f88746685a332fd754a60de9d5a
7
+ data.tar.gz: b9f0edd94a31a86d3794962ea20d09cc340f96e6aba54c0f5337bc95fd5254a1248bd14ab3c57e2b633e5bd6784ba4600122bc31d0d6e0a65ecd7296a54bac64
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  ![Build Status](https://travis-ci.org/MYOB-Technology/aws_pocketknife.svg?branch=master)
2
+ [![Gem Version](https://badge.fury.io/rb/aws_pocketknife.svg)](https://badge.fury.io/rb/aws_pocketknife)
2
3
 
3
4
  # Aws Pocketknife
4
5
 
@@ -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 = ["gustavo.soares@myob.com"]
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
@@ -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'] || 'ap-southeast-2'
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
@@ -29,6 +29,9 @@ module AwsPocketknife
29
29
  desc "elb SUBCOMMAND ...ARGS", "elb command lines"
30
30
  subcommand "elb", AwsPocketknife::Cli::Elb
31
31
 
32
+ desc "ecs SUBCOMMAND ...ARGS", "ecs command lines"
33
+ subcommand "ecs", AwsPocketknife::Cli::Ecs
34
+
32
35
  end
33
36
  end
34
37
  end
@@ -5,7 +5,7 @@ module AwsPocketknife
5
5
  module Cli
6
6
  class RdsSnapshot < Thor
7
7
 
8
- desc "list_snapshots DB_NAME", "list snapshots"
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 database_name."
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
@@ -11,6 +11,10 @@ module AwsPocketknife
11
11
  @ec2_client ||= AwsPocketknife.ec2_client
12
12
  end
13
13
 
14
+ def ecs_client
15
+ @ecs_client ||= AwsPocketknife.ecs_client
16
+ end
17
+
14
18
  def iam_client
15
19
  @iam_client ||= AwsPocketknife.iam_client
16
20
  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
@@ -1,3 +1,3 @@
1
1
  module AwsPocketknife
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
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.9
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: 2016-10-19 00:00:00.000000000 Z
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
- - gustavo.soares@myob.com
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.8
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