aws-ssm-console 0.1.1 → 0.2.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 +4 -4
- data/README.md +9 -0
- data/aws-ssm-console.gemspec +1 -1
- data/bin/aws-ssm-console +1 -11
- data/lib/aws/ssm/console.rb +2 -4
- data/lib/aws/ssm/console/cli.rb +22 -0
- data/lib/aws/ssm/console/options.rb +42 -0
- data/lib/aws/ssm/console/printer.rb +1 -1
- data/lib/aws/ssm/console/runner.rb +10 -1
- data/lib/aws/ssm/console/version.rb +3 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1b7150d2747265daac976d0d9e7eb9817ef9cd4
|
4
|
+
data.tar.gz: 0bfe9b384a10b7238ecd397e30b723f8875b0d86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 823b89833f82b17ca5674563540f9a27aee55cea005d2e0d267e8ceb312699b2731ccfe5f04b72842a1f584f0b1e781d55a9121441125aed52434393791e9538
|
7
|
+
data.tar.gz: 03a99c3a5782b43e90c9549370ec98fb1ecb32a0fa7c0270216b66ce7579b801347f06c242282985b8054c5956d0d4835f898acb50e54cc87267ac443ad9570d
|
data/README.md
CHANGED
@@ -28,11 +28,20 @@ You should configure some environment variables to use AWS SDK.
|
|
28
28
|
|
29
29
|
### Run Command
|
30
30
|
|
31
|
+
#### Interactive mode
|
32
|
+
|
31
33
|
```
|
32
34
|
$ bin/aws-ssm-console --instance-ids=i-xxxx,i-yyyy,...
|
33
35
|
>>
|
34
36
|
```
|
35
37
|
|
38
|
+
#### Batch mode
|
39
|
+
|
40
|
+
```
|
41
|
+
$ bin/aws-ssm-console -c ls --instance-ids=i-xxxx,i-yyyy,...
|
42
|
+
...
|
43
|
+
```
|
44
|
+
|
36
45
|
## Development
|
37
46
|
|
38
47
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/aws-ssm-console.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'aws-ssm-console'
|
7
|
-
spec.version = '0.
|
7
|
+
spec.version = '0.2.0'
|
8
8
|
spec.authors = ['koshigoe']
|
9
9
|
spec.email = ['koshigoeb@gmail.com']
|
10
10
|
spec.license = 'MIT'
|
data/bin/aws-ssm-console
CHANGED
@@ -2,15 +2,5 @@
|
|
2
2
|
|
3
3
|
require 'bundler/setup'
|
4
4
|
require 'aws/ssm/console'
|
5
|
-
require 'optparse'
|
6
5
|
|
7
|
-
|
8
|
-
OptionParser.new do |opt|
|
9
|
-
opt.on('--instance-ids id,id,...', Array) { |v| options[:instance_ids] = v }
|
10
|
-
|
11
|
-
opt.parse!(ARGV)
|
12
|
-
end
|
13
|
-
|
14
|
-
raise ArgumentError, '--instance-ids is required' unless options[:instance_ids]
|
15
|
-
|
16
|
-
Aws::SSM::Console.run(options[:instance_ids])
|
6
|
+
Aws::SSM::Console::CLI.new(ARGV).run
|
data/lib/aws/ssm/console.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'aws-sdk'
|
2
2
|
require 'aws/ssm/console/version'
|
3
|
+
require 'aws/ssm/console/cli'
|
4
|
+
require 'aws/ssm/console/options'
|
3
5
|
require 'aws/ssm/console/runner'
|
4
6
|
require 'aws/ssm/console/command'
|
5
7
|
require 'aws/ssm/console/printer'
|
@@ -10,10 +12,6 @@ module Aws
|
|
10
12
|
def self.client
|
11
13
|
@client ||= Aws::SSM::Client.new
|
12
14
|
end
|
13
|
-
|
14
|
-
def self.run(instance_ids)
|
15
|
-
Aws::SSM::Console::Runner.new(instance_ids).run
|
16
|
-
end
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Aws
|
2
|
+
module SSM
|
3
|
+
module Console
|
4
|
+
class CLI
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(argv)
|
8
|
+
@options = Options.new(argv)
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
runner = Aws::SSM::Console::Runner.new(options.instance_ids)
|
13
|
+
if options.command
|
14
|
+
runner.invoke(options.command)
|
15
|
+
else
|
16
|
+
runner.run
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
module SSM
|
5
|
+
module Console
|
6
|
+
class Options
|
7
|
+
attr_reader :instance_ids,
|
8
|
+
:command
|
9
|
+
|
10
|
+
def initialize(argv)
|
11
|
+
@instance_ids = []
|
12
|
+
@command = nil
|
13
|
+
|
14
|
+
parser.parse!(argv)
|
15
|
+
validate!
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parser
|
21
|
+
@parser = OptionParser.new do |opt|
|
22
|
+
opt.on('--instance-ids id,id,...', Array) { |v| @instance_ids += v }
|
23
|
+
opt.on('-c command', String) { |v| @command = v }
|
24
|
+
opt.on('--tag Name:Value', String) { |v| @instance_ids += collect_instance_ids_by_tag(v) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate!
|
29
|
+
raise ArgumentError, 'EC2 instance IDs required.' if instance_ids.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
def collect_instance_ids_by_tag(tag)
|
33
|
+
name, value = tag.split(':', 2)
|
34
|
+
filters = [{ name: "tag:#{name}", values: [value] }]
|
35
|
+
Aws::EC2::Client.new.describe_instances(filters: filters).reservations.each_with_object([]) do |reservation, res|
|
36
|
+
reservation.instances.each { |instance| res << instance.instance_id }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -37,7 +37,7 @@ module Aws
|
|
37
37
|
response = Aws::SSM::Console.client.list_command_invocations(command_id: command_id, instance_id: instance_id, details: true)
|
38
38
|
response.command_invocations.each do |invocation|
|
39
39
|
invocation.command_plugins.map do |command_plugin|
|
40
|
-
yield(instance_id, command_plugin.status, command_plugin.output.split("\n").map { |x| "\t#{x}" }.join("\n"))
|
40
|
+
yield(instance_id, command_plugin.status, command_plugin.output.to_s.split("\n").map { |x| "\t#{x}" }.join("\n"))
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -4,6 +4,10 @@ module Aws
|
|
4
4
|
module SSM
|
5
5
|
module Console
|
6
6
|
class Runner
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
delegate invoke: :@command
|
10
|
+
|
7
11
|
attr_reader :command
|
8
12
|
|
9
13
|
def initialize(instance_ids)
|
@@ -11,8 +15,13 @@ module Aws
|
|
11
15
|
end
|
12
16
|
|
13
17
|
def run
|
18
|
+
stty_save = `stty -g`.chomp
|
19
|
+
trap('INT') { system 'stty', stty_save; exit }
|
20
|
+
|
14
21
|
loop do
|
15
|
-
|
22
|
+
cmd = Readline.readline('>> ', true)
|
23
|
+
break unless cmd
|
24
|
+
command.invoke(cmd)
|
16
25
|
end
|
17
26
|
end
|
18
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-ssm-console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- koshigoe
|
@@ -85,7 +85,9 @@ files:
|
|
85
85
|
- bin/console
|
86
86
|
- bin/setup
|
87
87
|
- lib/aws/ssm/console.rb
|
88
|
+
- lib/aws/ssm/console/cli.rb
|
88
89
|
- lib/aws/ssm/console/command.rb
|
90
|
+
- lib/aws/ssm/console/options.rb
|
89
91
|
- lib/aws/ssm/console/printer.rb
|
90
92
|
- lib/aws/ssm/console/runner.rb
|
91
93
|
- lib/aws/ssm/console/version.rb
|