ecsl 0.1.0
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 +7 -0
- data/exe/ecsl +6 -0
- data/lib/ecsl/exec.rb +100 -0
- data/lib/ecsl/version.rb +5 -0
- data/lib/ecsl.rb +9 -0
- metadata +144 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 94a40beb7124c294a0f65183b3cf022aed1883a2e902217cb254b68c9aa86db5
|
4
|
+
data.tar.gz: 57c19907a693109f2ae4193cf51d5b47dec083c2e6b399e2de9a87773ea22ee7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c19d744509f9658920a7d1d5976d2eafdfcc2b138dd4e5e507b01a4644462baaff46e58ee3cf49c463893377eae1d9068fb8232c13af94afa4de6a3bee277dab
|
7
|
+
data.tar.gz: fbfea2857eb02439e384ff372b877753888d195aca592798a0cd4b5561116d35d55d3818134e4144446c58d9f8f304e8b66490ba8bd93845d5d33ad02bb0a3d0
|
data/exe/ecsl
ADDED
data/lib/ecsl/exec.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
require "tty-prompt"
|
5
|
+
require "json"
|
6
|
+
require "aws-sdk-ecs"
|
7
|
+
|
8
|
+
module Ecsl
|
9
|
+
class Exec
|
10
|
+
def initialize
|
11
|
+
@profile = nil
|
12
|
+
@filter = nil
|
13
|
+
@region = nil
|
14
|
+
@prompt = TTY::Prompt.new(interrupt: :exit)
|
15
|
+
@ecs_client = nil
|
16
|
+
parse_options
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
cluster = select_cluster
|
21
|
+
task, container = select_service_and_container(cluster)
|
22
|
+
|
23
|
+
command = ["aws", "--profile", @profile, "--region", @region, "ecs", "execute-command",
|
24
|
+
"--cluster", cluster, "--task", task, "--container", container,
|
25
|
+
"--interactive", "--command", "/bin/bash"].join(" ")
|
26
|
+
puts command
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def parse_options
|
32
|
+
OptionParser.new do |opts|
|
33
|
+
opts.on("-p", "--profile PROFILE", "AWS profile") { |v| @profile = v }
|
34
|
+
opts.on("-f", "--filter FILTER", "Filter cluster name") { |v| @filter = v }
|
35
|
+
opts.on("-r", "--region REGION", "AWS region") { |v| @region = v }
|
36
|
+
end.parse!
|
37
|
+
end
|
38
|
+
|
39
|
+
def ecs_client
|
40
|
+
@ecs_client ||= Aws::ECS::Client.new(
|
41
|
+
profile: @profile,
|
42
|
+
region: @region
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def list_clusters
|
47
|
+
clusters = ecs_client.list_clusters.cluster_arns
|
48
|
+
clusters.map { |arn| arn.split("/").last }
|
49
|
+
end
|
50
|
+
|
51
|
+
def list_services(cluster)
|
52
|
+
services = ecs_client.list_services(cluster: cluster).service_arns
|
53
|
+
services.map { |arn| arn.split("/").last }
|
54
|
+
end
|
55
|
+
|
56
|
+
def list_tasks(cluster, service)
|
57
|
+
tasks = ecs_client.list_tasks(
|
58
|
+
cluster: cluster,
|
59
|
+
service_name: service
|
60
|
+
).task_arns
|
61
|
+
tasks.map { |arn| arn.split("/").last }
|
62
|
+
end
|
63
|
+
|
64
|
+
def list_containers(cluster, task)
|
65
|
+
containers = ecs_client.describe_tasks(
|
66
|
+
cluster: cluster,
|
67
|
+
tasks: [task]
|
68
|
+
).tasks.first.containers
|
69
|
+
containers.map(&:name)
|
70
|
+
end
|
71
|
+
|
72
|
+
def select_or_auto(items, message)
|
73
|
+
return items.first if items.size == 1
|
74
|
+
@prompt.select(message, items.sort, filter: true)
|
75
|
+
end
|
76
|
+
|
77
|
+
def select_cluster
|
78
|
+
clusters = list_clusters
|
79
|
+
clusters = clusters.select { |c| c.include?(@filter) } if @filter
|
80
|
+
raise Error, "No clusters found" if clusters.empty?
|
81
|
+
select_or_auto(clusters, "Select a cluster:")
|
82
|
+
end
|
83
|
+
|
84
|
+
def select_service_and_container(cluster)
|
85
|
+
services = list_services(cluster)
|
86
|
+
raise Error, "No services found" if services.empty?
|
87
|
+
service = select_or_auto(services, "Select a service:")
|
88
|
+
|
89
|
+
tasks = list_tasks(cluster, service)
|
90
|
+
raise Error, "No tasks found" if tasks.empty?
|
91
|
+
task = select_or_auto(tasks, "Select a task:")
|
92
|
+
|
93
|
+
containers = list_containers(cluster, task)
|
94
|
+
raise Error, "No containers found" if containers.empty?
|
95
|
+
container = select_or_auto(containers, "Select a container:")
|
96
|
+
|
97
|
+
[task, container]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/ecsl/version.rb
ADDED
data/lib/ecsl.rb
ADDED
metadata
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ecsl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ikaruga
|
8
|
+
bindir: exe
|
9
|
+
cert_chain: []
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: aws-sdk-ecs
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: json
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: open3
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: tty-prompt
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: bundler
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2.0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '2.0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rake
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '13.0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '13.0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: rspec
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.0'
|
110
|
+
description: A helper library for ECS Exec command
|
111
|
+
email:
|
112
|
+
- ikaruga777@gmail.com
|
113
|
+
executables:
|
114
|
+
- ecsl
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- exe/ecsl
|
119
|
+
- lib/ecsl.rb
|
120
|
+
- lib/ecsl/exec.rb
|
121
|
+
- lib/ecsl/version.rb
|
122
|
+
homepage: https://github.com/pepabo/ecsl
|
123
|
+
licenses:
|
124
|
+
- MIT
|
125
|
+
metadata:
|
126
|
+
allowed_push_host: https://rubygems.org
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubygems_version: 3.6.7
|
142
|
+
specification_version: 4
|
143
|
+
summary: ECS Exec helper library
|
144
|
+
test_files: []
|