swa 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/swa/cli/base_command.rb +42 -4
- data/lib/swa/cli/collection_behaviour.rb +2 -2
- data/lib/swa/cli/ec2_command.rb +74 -10
- data/lib/swa/cli/item_behaviour.rb +2 -4
- data/lib/swa/ec2/instance.rb +9 -0
- data/lib/swa/ec2/volume.rb +38 -0
- data/lib/swa/version.rb +1 -1
- metadata +3 -3
- data/lib/swa/ec2/collection_behaviour.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96696427a2dd6945724b752802f7e041023ef335
|
4
|
+
data.tar.gz: 099a422f4ebf6102bddf91ad7c39ef46e673fae0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d72ae93fa0a477e5abab21fd018763597ccd1f1042a27c52625f13e6f5d5c1c574181be76251124867181eb5a4c54d2745b0c05d3ec63b3264229f157543427d
|
7
|
+
data.tar.gz: a71e19e5f19ab55af892fd48fbb54fab9037962ae4c4351e9606c4392c1b26e46a9450ea62526595687dfbc74d66dd6b2e6ce5ec0650125da07f0869c0ae6f63
|
data/lib/swa/cli/base_command.rb
CHANGED
@@ -9,7 +9,7 @@ module Swa
|
|
9
9
|
|
10
10
|
class BaseCommand < Clamp::Command
|
11
11
|
|
12
|
-
option
|
12
|
+
option "--region", "REGION", "AWS region"
|
13
13
|
option "--access-key", "KEY", "AWS access key",
|
14
14
|
:attribute_name => :access_key_id
|
15
15
|
option "--secret-key", "KEY", "AWS secret key",
|
@@ -17,12 +17,37 @@ module Swa
|
|
17
17
|
option "--session-token", "KEY", "AWS security token",
|
18
18
|
:attribute_name => :session_token
|
19
19
|
|
20
|
-
option
|
20
|
+
option "--format", "FORMAT", "format for data output",
|
21
|
+
:attribute_name => :output_format,
|
22
|
+
:environment_variable => "SWA_OUTPUT_FORMAT",
|
23
|
+
:default => "YAML"
|
24
|
+
|
25
|
+
option ["--json", "-J"], :flag, "output data in JSON format" do
|
26
|
+
self.output_format = "JSON"
|
27
|
+
end
|
28
|
+
|
29
|
+
option ["--yaml", "-Y"], :flag, "output data in YAML format" do
|
30
|
+
self.output_format = "YAML"
|
31
|
+
end
|
21
32
|
|
22
33
|
option ["--debug"], :flag, "enable debugging"
|
23
34
|
|
35
|
+
def run(arguments)
|
36
|
+
super(arguments)
|
37
|
+
rescue Aws::Errors::MissingCredentialsError
|
38
|
+
signal_error "no credentials provided"
|
39
|
+
rescue Aws::Errors::ServiceError => e
|
40
|
+
signal_error e.message
|
41
|
+
end
|
42
|
+
|
24
43
|
protected
|
25
44
|
|
45
|
+
def parse_subcommand
|
46
|
+
return false unless self.class.has_subcommands?
|
47
|
+
request_help if subcommand_name == "?"
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
26
51
|
def logger
|
27
52
|
@logger ||= ConsoleLogger.new($stderr, debug?)
|
28
53
|
end
|
@@ -44,11 +69,22 @@ module Swa
|
|
44
69
|
super(arguments)
|
45
70
|
end
|
46
71
|
|
72
|
+
def output_format=(arg)
|
73
|
+
arg = arg.upcase
|
74
|
+
unless %w(JSON YAML).member?(arg)
|
75
|
+
raise ArgumentError, "unrecognised data format: #{arg.inspect}"
|
76
|
+
end
|
77
|
+
@format = arg
|
78
|
+
end
|
79
|
+
|
47
80
|
def format_data(data)
|
48
|
-
|
81
|
+
case output_format
|
82
|
+
when "JSON"
|
83
|
+
MultiJson.dump(data, :pretty => true)
|
84
|
+
when "YAML"
|
49
85
|
YAML.dump(data)
|
50
86
|
else
|
51
|
-
|
87
|
+
raise "bad output format: #{output_format}"
|
52
88
|
end
|
53
89
|
end
|
54
90
|
|
@@ -57,6 +93,8 @@ module Swa
|
|
57
93
|
data = JMESPath.search(jmespath_expression, data)
|
58
94
|
end
|
59
95
|
puts format_data(data)
|
96
|
+
rescue JMESPath::Errors::SyntaxError => e
|
97
|
+
signal_error("invalid JMESPath expression")
|
60
98
|
end
|
61
99
|
|
62
100
|
end
|
@@ -7,7 +7,7 @@ module Swa
|
|
7
7
|
|
8
8
|
target.default_subcommand = "summary"
|
9
9
|
|
10
|
-
target.subcommand ["summary", "s"], "
|
10
|
+
target.subcommand ["summary", "s"], "One-line summary" do
|
11
11
|
def execute
|
12
12
|
collection.each do |i|
|
13
13
|
puts i.summary
|
@@ -15,7 +15,7 @@ module Swa
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
target.subcommand ["data", "d"], "
|
18
|
+
target.subcommand ["data", "d"], "Full details" do
|
19
19
|
|
20
20
|
parameter "[QUERY]", "JMESPath expression"
|
21
21
|
|
data/lib/swa/cli/ec2_command.rb
CHANGED
@@ -7,13 +7,14 @@ require "swa/ec2/key_pair"
|
|
7
7
|
require "swa/ec2/image"
|
8
8
|
require "swa/ec2/instance"
|
9
9
|
require "swa/ec2/security_group"
|
10
|
+
require "swa/ec2/volume"
|
10
11
|
|
11
12
|
module Swa
|
12
13
|
module CLI
|
13
14
|
|
14
15
|
class Ec2Command < BaseCommand
|
15
16
|
|
16
|
-
subcommand ["key-pair", "kp"], "
|
17
|
+
subcommand ["key-pair", "kp"], "Show key-pair" do
|
17
18
|
|
18
19
|
parameter "NAME", "key-pair name"
|
19
20
|
|
@@ -29,7 +30,7 @@ module Swa
|
|
29
30
|
|
30
31
|
end
|
31
32
|
|
32
|
-
subcommand ["key-pairs", "kps"], "
|
33
|
+
subcommand ["key-pairs", "kps"], "List key-pairs" do
|
33
34
|
|
34
35
|
include CollectionBehaviour
|
35
36
|
|
@@ -43,7 +44,7 @@ module Swa
|
|
43
44
|
|
44
45
|
end
|
45
46
|
|
46
|
-
subcommand ["image", "ami"], "
|
47
|
+
subcommand ["image", "ami"], "Show image" do
|
47
48
|
|
48
49
|
parameter "IMAGE-ID", "image id"
|
49
50
|
|
@@ -59,10 +60,10 @@ module Swa
|
|
59
60
|
|
60
61
|
end
|
61
62
|
|
62
|
-
subcommand ["images", "amis"], "
|
63
|
+
subcommand ["images", "amis"], "List images" do
|
63
64
|
|
64
|
-
option "--owned-by", "OWNER", "
|
65
|
-
option "--named", "PATTERN", "
|
65
|
+
option "--owned-by", "OWNER", "with specified owner", :default => "self"
|
66
|
+
option "--named", "PATTERN", "with matching name"
|
66
67
|
|
67
68
|
include TagFilterOptions
|
68
69
|
include CollectionBehaviour
|
@@ -85,12 +86,30 @@ module Swa
|
|
85
86
|
|
86
87
|
end
|
87
88
|
|
88
|
-
subcommand ["instance", "i"], "
|
89
|
+
subcommand ["instance", "i"], "Show instance" do
|
89
90
|
|
90
91
|
parameter "INSTANCE-ID", "instance id"
|
91
92
|
|
92
93
|
include ItemBehaviour
|
93
94
|
|
95
|
+
subcommand ["console-output", "console"], "Display console output" do
|
96
|
+
|
97
|
+
def execute
|
98
|
+
puts instance.console_output
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
%w(stop start reboot terminate).each do |action|
|
104
|
+
class_eval <<-RUBY
|
105
|
+
subcommand "#{action}", "#{action.capitalize} the instance" do
|
106
|
+
def execute
|
107
|
+
instance.#{action}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
RUBY
|
111
|
+
end
|
112
|
+
|
94
113
|
private
|
95
114
|
|
96
115
|
def instance
|
@@ -101,7 +120,7 @@ module Swa
|
|
101
120
|
|
102
121
|
end
|
103
122
|
|
104
|
-
subcommand ["instances", "is"], "
|
123
|
+
subcommand ["instances", "is"], "List instances" do
|
105
124
|
|
106
125
|
option ["--state"], "STATE", "with specified status",
|
107
126
|
:default => "running"
|
@@ -125,6 +144,18 @@ module Swa
|
|
125
144
|
include TagFilterOptions
|
126
145
|
include CollectionBehaviour
|
127
146
|
|
147
|
+
%w(stop start reboot terminate).each do |action|
|
148
|
+
class_eval <<-RUBY
|
149
|
+
subcommand "#{action}", "#{action.capitalize} all instances" do
|
150
|
+
def execute
|
151
|
+
instances.each do |i|
|
152
|
+
i.#{action}
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
RUBY
|
157
|
+
end
|
158
|
+
|
128
159
|
private
|
129
160
|
|
130
161
|
def instances
|
@@ -137,7 +168,7 @@ module Swa
|
|
137
168
|
|
138
169
|
end
|
139
170
|
|
140
|
-
subcommand ["security-group", "sg"], "
|
171
|
+
subcommand ["security-group", "sg"], "Show security-group" do
|
141
172
|
|
142
173
|
parameter "GROUP-ID", "security-group id"
|
143
174
|
|
@@ -153,7 +184,7 @@ module Swa
|
|
153
184
|
|
154
185
|
end
|
155
186
|
|
156
|
-
subcommand ["security-groups", "sgs"], "
|
187
|
+
subcommand ["security-groups", "sgs"], "List security-groups" do
|
157
188
|
|
158
189
|
include TagFilterOptions
|
159
190
|
include CollectionBehaviour
|
@@ -170,6 +201,39 @@ module Swa
|
|
170
201
|
|
171
202
|
end
|
172
203
|
|
204
|
+
subcommand ["volume", "vol", "v"], "Show volume" do
|
205
|
+
|
206
|
+
parameter "VOLUME-ID", "volume id"
|
207
|
+
|
208
|
+
include ItemBehaviour
|
209
|
+
|
210
|
+
private
|
211
|
+
|
212
|
+
def volume
|
213
|
+
Swa::EC2::Volume.new(ec2.volume(volume_id))
|
214
|
+
end
|
215
|
+
|
216
|
+
alias_method :item, :volume
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
subcommand ["volumes", "vs"], "List volumes" do
|
221
|
+
|
222
|
+
include TagFilterOptions
|
223
|
+
include CollectionBehaviour
|
224
|
+
|
225
|
+
private
|
226
|
+
|
227
|
+
def volumes
|
228
|
+
options = {}
|
229
|
+
options[:filters] = filters unless filters.empty?
|
230
|
+
Swa::EC2::Volume.list(ec2.volumes(options))
|
231
|
+
end
|
232
|
+
|
233
|
+
alias_method :collection, :volumes
|
234
|
+
|
235
|
+
end
|
236
|
+
|
173
237
|
protected
|
174
238
|
|
175
239
|
def ec2
|
@@ -5,15 +5,13 @@ module Swa
|
|
5
5
|
|
6
6
|
def self.included(target)
|
7
7
|
|
8
|
-
target.
|
9
|
-
|
10
|
-
target.subcommand ["summary", "s"], "brief summary (one per line)" do
|
8
|
+
target.subcommand ["summary", "s"], "One-line summary" do
|
11
9
|
def execute
|
12
10
|
puts item.summary
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
16
|
-
target.subcommand ["data", "d"], "
|
14
|
+
target.subcommand ["data", "d"], "Full details" do
|
17
15
|
|
18
16
|
parameter "[QUERY]", "JMESPath expression"
|
19
17
|
|
data/lib/swa/ec2/instance.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "forwardable"
|
1
2
|
require "swa/resource"
|
2
3
|
require "swa/ec2/tagged_resource"
|
3
4
|
|
@@ -24,6 +25,14 @@ module Swa
|
|
24
25
|
tags["Name"]
|
25
26
|
end
|
26
27
|
|
28
|
+
def console_output
|
29
|
+
i.console_output.output
|
30
|
+
end
|
31
|
+
|
32
|
+
extend Forwardable
|
33
|
+
|
34
|
+
def_delegators :i, :stop, :start, :reboot, :terminate
|
35
|
+
|
27
36
|
private
|
28
37
|
|
29
38
|
alias_method :i, :aws_resource
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
require "swa/resource"
|
3
|
+
require "swa/ec2/tagged_resource"
|
4
|
+
|
5
|
+
module Swa
|
6
|
+
module EC2
|
7
|
+
|
8
|
+
class Volume < Resource
|
9
|
+
|
10
|
+
include TaggedResource
|
11
|
+
|
12
|
+
def summary
|
13
|
+
[
|
14
|
+
pad(v.volume_id, 13),
|
15
|
+
pad(v.snapshot_id, 14),
|
16
|
+
sprintf("%5d", v.size),
|
17
|
+
pad(v.volume_type, 10),
|
18
|
+
pad(v.state, 11),
|
19
|
+
quoted(name)
|
20
|
+
].join(" ")
|
21
|
+
end
|
22
|
+
|
23
|
+
def name
|
24
|
+
tags["Name"]
|
25
|
+
end
|
26
|
+
|
27
|
+
extend Forwardable
|
28
|
+
|
29
|
+
def_delegators :v, :delete
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
alias_method :v, :aws_resource
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/lib/swa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -135,12 +135,12 @@ files:
|
|
135
135
|
- lib/swa/cli/main_command.rb
|
136
136
|
- lib/swa/cli/tag_filter_options.rb
|
137
137
|
- lib/swa/data_presentation.rb
|
138
|
-
- lib/swa/ec2/collection_behaviour.rb
|
139
138
|
- lib/swa/ec2/image.rb
|
140
139
|
- lib/swa/ec2/instance.rb
|
141
140
|
- lib/swa/ec2/key_pair.rb
|
142
141
|
- lib/swa/ec2/security_group.rb
|
143
142
|
- lib/swa/ec2/tagged_resource.rb
|
143
|
+
- lib/swa/ec2/volume.rb
|
144
144
|
- lib/swa/resource.rb
|
145
145
|
- lib/swa/version.rb
|
146
146
|
- swa.gemspec
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Swa
|
2
|
-
module CLI
|
3
|
-
|
4
|
-
module CollectionBehaviour
|
5
|
-
|
6
|
-
def self.included(target)
|
7
|
-
|
8
|
-
target.default_subcommand = "summary"
|
9
|
-
|
10
|
-
target.subcommand ["summary", "s"], "brief summary (one per line)" do
|
11
|
-
def execute
|
12
|
-
collection.each do |i|
|
13
|
-
puts i.summary
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
target.subcommand ["detail", "d"], "full details" do
|
19
|
-
def execute
|
20
|
-
display_data(collection.map(&:data).to_a)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|