swa 0.6.1 → 0.7.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 +5 -5
- data/README.md +11 -0
- data/lib/swa/cli/cloud_formation_command.rb +1 -1
- data/lib/swa/cli/ec2_command.rb +28 -1
- data/lib/swa/cli/elb_command.rb +1 -1
- data/lib/swa/cli/glue_command.rb +192 -0
- data/lib/swa/cli/iam_command.rb +92 -4
- data/lib/swa/cli/kms_command.rb +1 -1
- data/lib/swa/cli/main_command.rb +2 -0
- data/lib/swa/cli/s3_command.rb +70 -1
- data/lib/swa/cli/selector.rb +4 -0
- data/lib/swa/ec2/instance.rb +6 -1
- data/lib/swa/ec2/security_group.rb +2 -0
- data/lib/swa/glue/crawler.rb +28 -0
- data/lib/swa/glue/database.rb +17 -0
- data/lib/swa/glue/job.rb +21 -0
- data/lib/swa/glue/job_bookmark_entry.rb +17 -0
- data/lib/swa/glue/job_run.rb +26 -0
- data/lib/swa/glue/partition.rb +26 -0
- data/lib/swa/glue/table.rb +17 -0
- data/lib/swa/iam/credentials.rb +31 -0
- data/lib/swa/iam/instance_profile.rb +26 -0
- data/lib/swa/iam/role.rb +5 -0
- data/lib/swa/s3/bucket.rb +6 -0
- data/lib/swa/s3/object.rb +5 -0
- data/lib/swa/s3/object_version.rb +48 -0
- data/lib/swa/version.rb +1 -1
- data/swa.gemspec +12 -3
- metadata +137 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b1dfb1773a649e5d9e24e8ee24739cb6b2df451bb2cd4ffdf6a9b4336c067d87
|
4
|
+
data.tar.gz: dc90877d13ad90f7df91dfcec228639de7dd1393b42f2378ee2236421e1d44a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52ee4e00fd3bc9c3001d6a8168a3278f387da0a31732d9dd2bbb4a1971b9066150638ccdf757eac652ff8f6116b58d820262c030d1b018c32605b4475c59feb1
|
7
|
+
data.tar.gz: ec4a90e0a5a3e973c051227c33adb9d63048d82a31ca745a9c754593d738c76d0c58f3f6fbdfe75e9beae5c9dd4aa159b38016c2c444ac6ac1453aa5b3b8721f
|
data/README.md
CHANGED
@@ -76,6 +76,17 @@ The "item" sub-command can be ommitted, when it can be inferred from the resourc
|
|
76
76
|
$ swa ec2 i-bcf48c2b data
|
77
77
|
$ swa ec2 ami-1e73737d data
|
78
78
|
|
79
|
+
## Installing it
|
80
|
+
|
81
|
+
SWA is packaged as a Ruby gem, and can be installed with:
|
82
|
+
|
83
|
+
gem install swa
|
84
|
+
|
85
|
+
On a Mac, I recommend [brew-gem](https://github.com/sportngin/brew-gem) for easy system-wide installation:
|
86
|
+
|
87
|
+
brew install brew-gem
|
88
|
+
brew gem install swa
|
89
|
+
|
79
90
|
## Contributing
|
80
91
|
|
81
92
|
Bug reports and pull requests are welcome on GitHub at https://github.com/mdub/swa.
|
data/lib/swa/cli/ec2_command.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "aws-sdk-
|
1
|
+
require "aws-sdk-ec2"
|
2
2
|
require "swa/cli/base_command"
|
3
3
|
require "swa/cli/collection_behaviour"
|
4
4
|
require "swa/cli/item_behaviour"
|
@@ -227,10 +227,25 @@ module Swa
|
|
227
227
|
List key-pairs.
|
228
228
|
EOF
|
229
229
|
|
230
|
+
option "--named", "PATTERN", "name pattern"
|
231
|
+
|
230
232
|
include CollectionBehaviour
|
231
233
|
|
234
|
+
subcommand "delete", "Delete all key-pairs" do
|
235
|
+
def execute
|
236
|
+
signal_error "no key-pairs specified" unless selector.specified?
|
237
|
+
key_pairs.each(&:delete)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
232
241
|
private
|
233
242
|
|
243
|
+
def named=(pattern)
|
244
|
+
selector.add do |kp|
|
245
|
+
File.fnmatch(pattern, kp.name)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
234
249
|
def key_pairs
|
235
250
|
query_for(:key_pairs, Swa::EC2::KeyPair)
|
236
251
|
end
|
@@ -245,6 +260,12 @@ module Swa
|
|
245
260
|
|
246
261
|
include ItemBehaviour
|
247
262
|
|
263
|
+
subcommand ["delete"], "Delete group" do
|
264
|
+
def execute
|
265
|
+
security_group.delete
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
248
269
|
private
|
249
270
|
|
250
271
|
def security_group
|
@@ -260,6 +281,12 @@ module Swa
|
|
260
281
|
include TagFilterOptions
|
261
282
|
include CollectionBehaviour
|
262
283
|
|
284
|
+
subcommand ["delete"], "Delete group" do
|
285
|
+
def execute
|
286
|
+
security_groups.each(&:delete)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
263
290
|
private
|
264
291
|
|
265
292
|
def security_groups
|
data/lib/swa/cli/elb_command.rb
CHANGED
@@ -0,0 +1,192 @@
|
|
1
|
+
require "aws-sdk-glue"
|
2
|
+
require "swa/cli/base_command"
|
3
|
+
require "swa/cli/collection_behaviour"
|
4
|
+
require "swa/cli/item_behaviour"
|
5
|
+
require "swa/glue/crawler"
|
6
|
+
require "swa/glue/database"
|
7
|
+
require "swa/glue/job"
|
8
|
+
require "swa/glue/job_run"
|
9
|
+
require "swa/glue/job_bookmark_entry"
|
10
|
+
require "swa/glue/partition"
|
11
|
+
require "swa/glue/table"
|
12
|
+
|
13
|
+
module Swa
|
14
|
+
module CLI
|
15
|
+
|
16
|
+
class GlueCommand < BaseCommand
|
17
|
+
|
18
|
+
subcommand ["crawler"], "Show crawler" do
|
19
|
+
|
20
|
+
parameter "NAME", "crawler name"
|
21
|
+
|
22
|
+
include ItemBehaviour
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def item
|
27
|
+
Swa::Glue::Crawler.new(glue_client.get_crawler(:name => name).crawler)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
subcommand ["crawlers"], "Show crawlers" do
|
33
|
+
|
34
|
+
include CollectionBehaviour
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def collection
|
39
|
+
query_for(:get_crawlers, :crawlers, Swa::Glue::Crawler)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
subcommand ["database"], "Show database" do
|
45
|
+
|
46
|
+
parameter "NAME", "database name"
|
47
|
+
|
48
|
+
include ItemBehaviour
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def item
|
53
|
+
Swa::Glue::Database.new(glue_client.get_database(:name => name).database)
|
54
|
+
end
|
55
|
+
|
56
|
+
subcommand ["table"], "Show table" do
|
57
|
+
|
58
|
+
parameter "NAME", "table name", attribute_name: :table_name
|
59
|
+
|
60
|
+
include ItemBehaviour
|
61
|
+
|
62
|
+
subcommand ["partitions"], "Show partitions" do
|
63
|
+
|
64
|
+
include CollectionBehaviour
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def collection
|
69
|
+
query_for(:get_partitions, :partitions, Swa::Glue::Partition, :database_name => name, :table_name => table_name)
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def item
|
77
|
+
Swa::Glue::Table.new(glue_client.get_table(
|
78
|
+
:database_name => name, :name => table_name
|
79
|
+
).table)
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
subcommand ["tables"], "Show tables" do
|
85
|
+
|
86
|
+
include CollectionBehaviour
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def collection
|
91
|
+
query_for(:get_tables, :table_list, Swa::Glue::Table, :database_name => name)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
subcommand ["databases"], "Show databases" do
|
99
|
+
|
100
|
+
include CollectionBehaviour
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def collection
|
105
|
+
query_for(:get_databases, :database_list, Swa::Glue::Database)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
subcommand ["job"], "Show job" do
|
111
|
+
|
112
|
+
parameter "NAME", "job name"
|
113
|
+
|
114
|
+
include ItemBehaviour
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
def item
|
119
|
+
Swa::Glue::Job.new(glue_client.get_job(:job_name => name).job)
|
120
|
+
end
|
121
|
+
|
122
|
+
subcommand ["run"], "Show run" do
|
123
|
+
|
124
|
+
parameter "ID", "run ID", attribute_name: :run_id
|
125
|
+
|
126
|
+
include ItemBehaviour
|
127
|
+
|
128
|
+
subcommand ["bookmark"], "Show bookmark" do
|
129
|
+
|
130
|
+
self.default_subcommand = "summary"
|
131
|
+
|
132
|
+
include ItemBehaviour
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
def item
|
137
|
+
Swa::Glue::JobBookmarkEntry.new(
|
138
|
+
glue_client.get_job_bookmark(:job_name => name, :run_id => run_id).job_bookmark_entry
|
139
|
+
)
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
|
146
|
+
def item
|
147
|
+
Swa::Glue::JobRun.new(glue_client.get_job_run(:job_name => name, :run_id => run_id).job_run)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
subcommand ["runs"], "Show runs" do
|
153
|
+
|
154
|
+
include CollectionBehaviour
|
155
|
+
|
156
|
+
private
|
157
|
+
|
158
|
+
def collection
|
159
|
+
query_for(:get_job_runs, :job_runs, Swa::Glue::JobRun, :job_name => name)
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
subcommand ["jobs"], "Show jobs" do
|
167
|
+
|
168
|
+
include CollectionBehaviour
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
def collection
|
173
|
+
query_for(:get_jobs, :jobs, Swa::Glue::Job)
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
protected
|
179
|
+
|
180
|
+
def glue_client
|
181
|
+
::Aws::Glue::Client.new(aws_config)
|
182
|
+
end
|
183
|
+
|
184
|
+
def query_for(query_method, response_key, model, **query_args)
|
185
|
+
records = glue_client.public_send(query_method, **query_args).public_send(response_key)
|
186
|
+
model.list(records)
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
end
|
data/lib/swa/cli/iam_command.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
require "aws-sdk-
|
1
|
+
require "aws-sdk-iam"
|
2
2
|
require "swa/cli/base_command"
|
3
3
|
require "swa/cli/collection_behaviour"
|
4
4
|
require "swa/cli/item_behaviour"
|
5
|
+
require "swa/iam/credentials"
|
5
6
|
require "swa/iam/group"
|
7
|
+
require "swa/iam/instance_profile"
|
6
8
|
require "swa/iam/policy"
|
7
9
|
require "swa/iam/role"
|
8
10
|
require "swa/iam/user"
|
@@ -42,6 +44,36 @@ module Swa
|
|
42
44
|
|
43
45
|
end
|
44
46
|
|
47
|
+
subcommand ["instance-profile", "ip"], "Show instance-profile" do
|
48
|
+
|
49
|
+
parameter "NAME", "name/ARN"
|
50
|
+
|
51
|
+
include ItemBehaviour
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def item
|
56
|
+
Swa::IAM::InstanceProfile.new(iam.instance_profile(File.basename(name)))
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
subcommand ["instance-profiles", "ips"], "Show instance-profiles" do
|
62
|
+
|
63
|
+
self.description = <<-EOF
|
64
|
+
List instance-profiles.
|
65
|
+
EOF
|
66
|
+
|
67
|
+
include CollectionBehaviour
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def collection
|
72
|
+
query_for(:instance_profiles, Swa::IAM::InstanceProfile)
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
45
77
|
subcommand ["policy"], "Show policy" do
|
46
78
|
|
47
79
|
parameter "ARN", "policy ARN"
|
@@ -70,12 +102,29 @@ module Swa
|
|
70
102
|
List policies.
|
71
103
|
EOF
|
72
104
|
|
105
|
+
option "--scope", "SCOPE", "'AWS' or 'Local'" do |arg|
|
106
|
+
case arg.downcase
|
107
|
+
when "all", "*"
|
108
|
+
"All"
|
109
|
+
when "local"
|
110
|
+
"Local"
|
111
|
+
when "aws"
|
112
|
+
"AWS"
|
113
|
+
else
|
114
|
+
raise ArgumentError, "must be one of 'All', 'AWS' or 'Local'"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
73
118
|
include CollectionBehaviour
|
74
119
|
|
75
120
|
private
|
76
121
|
|
77
122
|
def collection
|
78
|
-
query_for(:policies, Swa::IAM::Policy)
|
123
|
+
query_for(:policies, Swa::IAM::Policy, query_options)
|
124
|
+
end
|
125
|
+
|
126
|
+
def query_options
|
127
|
+
{ :scope => scope }.reject { |_k,v| v.nil? }
|
79
128
|
end
|
80
129
|
|
81
130
|
end
|
@@ -92,6 +141,41 @@ module Swa
|
|
92
141
|
Swa::IAM::Role.new(iam.role(File.basename(name)))
|
93
142
|
end
|
94
143
|
|
144
|
+
subcommand "assume", "Assume the role" do
|
145
|
+
|
146
|
+
option "--session-name", "NAME", "STS session-name",
|
147
|
+
:environment_variable => "USER",
|
148
|
+
:default => "swa"
|
149
|
+
|
150
|
+
parameter "[COMMAND] ...", "command to execute"
|
151
|
+
|
152
|
+
def execute
|
153
|
+
env = assume.to_env
|
154
|
+
if command_list.empty?
|
155
|
+
dump_env(env)
|
156
|
+
else
|
157
|
+
exec(env, *command_list)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
private
|
162
|
+
|
163
|
+
def assume
|
164
|
+
response = sts_client.assume_role(
|
165
|
+
:role_arn => item.arn,
|
166
|
+
:role_session_name => session_name
|
167
|
+
)
|
168
|
+
Swa::IAM::Credentials.new(response.credentials.to_h)
|
169
|
+
end
|
170
|
+
|
171
|
+
def dump_env(env)
|
172
|
+
env.each do |k,v|
|
173
|
+
puts "#{k}=#{v}"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
95
179
|
end
|
96
180
|
|
97
181
|
subcommand ["roles"], "Show roles" do
|
@@ -146,11 +230,15 @@ module Swa
|
|
146
230
|
::Aws::IAM::Resource.new(aws_config)
|
147
231
|
end
|
148
232
|
|
149
|
-
def query_for(query_method, resource_model)
|
150
|
-
aws_resources = iam.public_send(query_method)
|
233
|
+
def query_for(query_method, resource_model, *query_args)
|
234
|
+
aws_resources = iam.public_send(query_method, *query_args)
|
151
235
|
wrapped_resources = resource_model.list(aws_resources)
|
152
236
|
end
|
153
237
|
|
238
|
+
def sts_client
|
239
|
+
::Aws::STS::Client.new(aws_config)
|
240
|
+
end
|
241
|
+
|
154
242
|
end
|
155
243
|
|
156
244
|
end
|
data/lib/swa/cli/kms_command.rb
CHANGED
data/lib/swa/cli/main_command.rb
CHANGED
@@ -2,6 +2,7 @@ require "swa/cli/base_command"
|
|
2
2
|
require "swa/cli/cloud_formation_command"
|
3
3
|
require "swa/cli/ec2_command"
|
4
4
|
require "swa/cli/elb_command"
|
5
|
+
require "swa/cli/glue_command"
|
5
6
|
require "swa/cli/iam_command"
|
6
7
|
require "swa/cli/kms_command"
|
7
8
|
require "swa/cli/s3_command"
|
@@ -14,6 +15,7 @@ module Swa
|
|
14
15
|
subcommand ["cf", "cloudformation"], "CloudFormation stuff", CloudFormationCommand
|
15
16
|
subcommand "ec2", "EC2 stuff", Ec2Command
|
16
17
|
subcommand "elb", "elb stuff", ElbCommand
|
18
|
+
subcommand "glue", "Glue stuff", GlueCommand
|
17
19
|
subcommand "iam", "IAM stuff", IamCommand
|
18
20
|
subcommand "kms", "KMS stuff", KmsCommand
|
19
21
|
subcommand "s3", "S3 stuff", S3Command
|
data/lib/swa/cli/s3_command.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "aws-sdk-
|
1
|
+
require "aws-sdk-s3"
|
2
2
|
require "swa/cli/base_command"
|
3
3
|
require "swa/cli/collection_behaviour"
|
4
4
|
require "swa/cli/item_behaviour"
|
@@ -82,6 +82,30 @@ module Swa
|
|
82
82
|
|
83
83
|
end
|
84
84
|
|
85
|
+
subcommand ["version", "v"], "Show version" do
|
86
|
+
|
87
|
+
parameter "ID", "object version ID", :attribute_name => :version_id
|
88
|
+
|
89
|
+
include ItemBehaviour
|
90
|
+
|
91
|
+
subcommand "get", "GET object" do
|
92
|
+
|
93
|
+
def execute
|
94
|
+
IO.copy_stream(version.get_body, $stdout)
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
protected
|
100
|
+
|
101
|
+
def version
|
102
|
+
object.version(version_id)
|
103
|
+
end
|
104
|
+
|
105
|
+
alias_method :item, :version
|
106
|
+
|
107
|
+
end
|
108
|
+
|
85
109
|
protected
|
86
110
|
|
87
111
|
def object
|
@@ -137,6 +161,51 @@ module Swa
|
|
137
161
|
|
138
162
|
end
|
139
163
|
|
164
|
+
subcommand ["object-versions", "versions", "vs"], "List object-versions" do
|
165
|
+
|
166
|
+
option "--prefix", "PREFIX", "object prefix"
|
167
|
+
|
168
|
+
self.default_subcommand = "list"
|
169
|
+
|
170
|
+
subcommand ["list", "ls"], "One-line summary" do
|
171
|
+
|
172
|
+
def execute
|
173
|
+
versions.each do |i|
|
174
|
+
puts i.summary
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
subcommand ["data", "d"], "Full details" do
|
181
|
+
|
182
|
+
parameter "[QUERY]", "JMESPath expression"
|
183
|
+
|
184
|
+
def execute
|
185
|
+
display_data(versions.map(&:data).to_a, query)
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
subcommand "delete-all", "Delete versions" do
|
191
|
+
|
192
|
+
def execute
|
193
|
+
versions.each do |v|
|
194
|
+
logger.info "Deleting #{v.uri} #{v.id}"
|
195
|
+
v.delete
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
protected
|
202
|
+
|
203
|
+
def versions
|
204
|
+
bucket.object_versions(:prefix => prefix)
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
|
140
209
|
subcommand "policy", "print bucket policy" do
|
141
210
|
|
142
211
|
def execute
|
data/lib/swa/cli/selector.rb
CHANGED
data/lib/swa/ec2/instance.rb
CHANGED
@@ -21,7 +21,8 @@ module Swa
|
|
21
21
|
pad(i.state.name, 10),
|
22
22
|
field(i, :private_ip_address),
|
23
23
|
field(i, :public_ip_address),
|
24
|
-
quoted(name)
|
24
|
+
quoted(name),
|
25
|
+
decorated_key_name
|
25
26
|
].join(" ")
|
26
27
|
end
|
27
28
|
|
@@ -41,6 +42,10 @@ module Swa
|
|
41
42
|
|
42
43
|
alias_method :i, :aws_resource
|
43
44
|
|
45
|
+
def decorated_key_name
|
46
|
+
"🔑 #{i.key_name}" if i.key_name
|
47
|
+
end
|
48
|
+
|
44
49
|
end
|
45
50
|
|
46
51
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "swa/record"
|
2
|
+
|
3
|
+
module Swa
|
4
|
+
module Glue
|
5
|
+
|
6
|
+
class Crawler < Record
|
7
|
+
|
8
|
+
def summary
|
9
|
+
[
|
10
|
+
pad(name, 48),
|
11
|
+
pad(state, 10),
|
12
|
+
pad(last_crawl_status, 12),
|
13
|
+
role
|
14
|
+
].join(" ")
|
15
|
+
end
|
16
|
+
|
17
|
+
delegate :name
|
18
|
+
delegate :state
|
19
|
+
delegate :role
|
20
|
+
|
21
|
+
def last_crawl_status
|
22
|
+
aws_record.last_crawl.status
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/swa/glue/job.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "swa/record"
|
2
|
+
|
3
|
+
module Swa
|
4
|
+
module Glue
|
5
|
+
|
6
|
+
class JobRun < Record
|
7
|
+
|
8
|
+
def summary
|
9
|
+
[
|
10
|
+
pad(id, 68),
|
11
|
+
pad(job_run_state, 8),
|
12
|
+
pad(started_on, 28)
|
13
|
+
].join(" ")
|
14
|
+
end
|
15
|
+
|
16
|
+
delegate :id
|
17
|
+
delegate :job_run_state
|
18
|
+
|
19
|
+
def started_on
|
20
|
+
aws_record.started_on.iso8601
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "swa/record"
|
2
|
+
|
3
|
+
module Swa
|
4
|
+
module Glue
|
5
|
+
|
6
|
+
class Partition < Record
|
7
|
+
|
8
|
+
def summary
|
9
|
+
[
|
10
|
+
creation_time,
|
11
|
+
location
|
12
|
+
].join(" ")
|
13
|
+
end
|
14
|
+
|
15
|
+
def location
|
16
|
+
aws_record.storage_descriptor.location
|
17
|
+
end
|
18
|
+
|
19
|
+
def creation_time
|
20
|
+
aws_record.creation_time.iso8601
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Swa
|
2
|
+
module IAM
|
3
|
+
|
4
|
+
class Credentials
|
5
|
+
|
6
|
+
def initialize(attributes = {})
|
7
|
+
attributes.to_h.each do |k,v|
|
8
|
+
send("#{k}=", v)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_accessor :access_key_id
|
13
|
+
attr_accessor :secret_access_key
|
14
|
+
attr_accessor :session_token
|
15
|
+
|
16
|
+
attr_accessor :expires_at
|
17
|
+
alias :expiration= :expires_at=
|
18
|
+
|
19
|
+
def to_env
|
20
|
+
{
|
21
|
+
"AWS_ACCESS_KEY_ID" => access_key_id,
|
22
|
+
"AWS_SECRET_ACCESS_KEY" => secret_access_key,
|
23
|
+
"AWS_SESSION_TOKEN" => session_token,
|
24
|
+
"AWS_SESSION_EXPIRES" => expires_at.iso8601
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "swa/resource"
|
2
|
+
|
3
|
+
module Swa
|
4
|
+
module IAM
|
5
|
+
|
6
|
+
class InstanceProfile < Resource
|
7
|
+
|
8
|
+
def id
|
9
|
+
profile.instance_profile_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def summary
|
13
|
+
arn
|
14
|
+
end
|
15
|
+
|
16
|
+
delegate :name
|
17
|
+
delegate :arn
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
alias_method :profile, :aws_resource
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/swa/iam/role.rb
CHANGED
data/lib/swa/s3/bucket.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "multi_json"
|
2
2
|
require "swa/resource"
|
3
|
+
require "swa/s3/object"
|
4
|
+
require "swa/s3/object_version"
|
3
5
|
|
4
6
|
module Swa
|
5
7
|
module S3
|
@@ -32,6 +34,10 @@ module Swa
|
|
32
34
|
Swa::S3::Object.list(aws_resource.objects(options))
|
33
35
|
end
|
34
36
|
|
37
|
+
def object_versions(options = {})
|
38
|
+
Swa::S3::ObjectVersion.list(aws_resource.object_versions(options))
|
39
|
+
end
|
40
|
+
|
35
41
|
def delete
|
36
42
|
bucket.delete
|
37
43
|
end
|
data/lib/swa/s3/object.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "swa/resource"
|
2
|
+
require "swa/s3/object_version"
|
2
3
|
|
3
4
|
module Swa
|
4
5
|
module S3
|
@@ -41,6 +42,10 @@ module Swa
|
|
41
42
|
object.delete
|
42
43
|
end
|
43
44
|
|
45
|
+
def version(version_id)
|
46
|
+
Swa::S3::ObjectVersion.new(object.version(version_id))
|
47
|
+
end
|
48
|
+
|
44
49
|
private
|
45
50
|
|
46
51
|
alias_method :object, :aws_resource
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "swa/resource"
|
2
|
+
|
3
|
+
module Swa
|
4
|
+
module S3
|
5
|
+
|
6
|
+
class ObjectVersion < Resource
|
7
|
+
|
8
|
+
def summary
|
9
|
+
[
|
10
|
+
version.last_modified.iso8601,
|
11
|
+
rpad(version.size, 10),
|
12
|
+
pad(version.id, 32),
|
13
|
+
uri
|
14
|
+
].join(" ")
|
15
|
+
end
|
16
|
+
|
17
|
+
def key
|
18
|
+
version.key
|
19
|
+
end
|
20
|
+
|
21
|
+
def id
|
22
|
+
version.id
|
23
|
+
end
|
24
|
+
|
25
|
+
def uri
|
26
|
+
"s3://#{version.bucket_name}/#{version.key}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
uri
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_body
|
34
|
+
version.get.body
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete
|
38
|
+
version.delete
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
alias_method :version, :aws_resource
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/lib/swa/version.rb
CHANGED
data/swa.gemspec
CHANGED
@@ -20,14 +20,23 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler", "~> 1
|
24
|
-
spec.add_development_dependency "rake", "~>
|
23
|
+
spec.add_development_dependency "bundler", "~> 2.1"
|
24
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
25
|
+
|
26
|
+
spec.add_runtime_dependency "aws-sdk-cloudformation", "~> 1"
|
27
|
+
spec.add_runtime_dependency "aws-sdk-ec2", "~> 1"
|
28
|
+
spec.add_runtime_dependency "aws-sdk-elasticloadbalancing", "~> 1"
|
29
|
+
spec.add_runtime_dependency "aws-sdk-glue", "~> 1"
|
30
|
+
spec.add_runtime_dependency "aws-sdk-iam", "~> 1"
|
31
|
+
spec.add_runtime_dependency "aws-sdk-kms", "~> 1"
|
32
|
+
spec.add_runtime_dependency "aws-sdk-s3", "~> 1"
|
33
|
+
spec.add_runtime_dependency "pry"
|
25
34
|
|
26
|
-
spec.add_runtime_dependency "aws-sdk-resources", ">= 2.6.14"
|
27
35
|
spec.add_runtime_dependency "chronic"
|
28
36
|
spec.add_runtime_dependency "clamp", ">= 1.1.0"
|
29
37
|
spec.add_runtime_dependency "console_logger"
|
30
38
|
spec.add_runtime_dependency "multi_json"
|
39
|
+
spec.add_runtime_dependency "ox"
|
31
40
|
spec.add_runtime_dependency "stackup", ">= 1.0.0"
|
32
41
|
|
33
42
|
end
|
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.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,140 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '12.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '12.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: aws-sdk-
|
42
|
+
name: aws-sdk-cloudformation
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: aws-sdk-ec2
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: aws-sdk-elasticloadbalancing
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: aws-sdk-glue
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: aws-sdk-iam
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: aws-sdk-kms
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: aws-sdk-s3
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
43
141
|
requirement: !ruby/object:Gem::Requirement
|
44
142
|
requirements:
|
45
143
|
- - ">="
|
46
144
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
145
|
+
version: '0'
|
48
146
|
type: :runtime
|
49
147
|
prerelease: false
|
50
148
|
version_requirements: !ruby/object:Gem::Requirement
|
51
149
|
requirements:
|
52
150
|
- - ">="
|
53
151
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
152
|
+
version: '0'
|
55
153
|
- !ruby/object:Gem::Dependency
|
56
154
|
name: chronic
|
57
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +206,20 @@ dependencies:
|
|
108
206
|
- - ">="
|
109
207
|
- !ruby/object:Gem::Version
|
110
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: ox
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
111
223
|
- !ruby/object:Gem::Dependency
|
112
224
|
name: stackup
|
113
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,7 +234,7 @@ dependencies:
|
|
122
234
|
- - ">="
|
123
235
|
- !ruby/object:Gem::Version
|
124
236
|
version: 1.0.0
|
125
|
-
description:
|
237
|
+
description:
|
126
238
|
email:
|
127
239
|
- mdub@dogbiscuit.org
|
128
240
|
executables:
|
@@ -147,6 +259,7 @@ files:
|
|
147
259
|
- lib/swa/cli/ec2_command.rb
|
148
260
|
- lib/swa/cli/elb_command.rb
|
149
261
|
- lib/swa/cli/filter_options.rb
|
262
|
+
- lib/swa/cli/glue_command.rb
|
150
263
|
- lib/swa/cli/iam_command.rb
|
151
264
|
- lib/swa/cli/item_behaviour.rb
|
152
265
|
- lib/swa/cli/kms_command.rb
|
@@ -166,7 +279,16 @@ files:
|
|
166
279
|
- lib/swa/ec2/volume.rb
|
167
280
|
- lib/swa/ec2/vpc.rb
|
168
281
|
- lib/swa/elb/load_balancer.rb
|
282
|
+
- lib/swa/glue/crawler.rb
|
283
|
+
- lib/swa/glue/database.rb
|
284
|
+
- lib/swa/glue/job.rb
|
285
|
+
- lib/swa/glue/job_bookmark_entry.rb
|
286
|
+
- lib/swa/glue/job_run.rb
|
287
|
+
- lib/swa/glue/partition.rb
|
288
|
+
- lib/swa/glue/table.rb
|
289
|
+
- lib/swa/iam/credentials.rb
|
169
290
|
- lib/swa/iam/group.rb
|
291
|
+
- lib/swa/iam/instance_profile.rb
|
170
292
|
- lib/swa/iam/policy.rb
|
171
293
|
- lib/swa/iam/role.rb
|
172
294
|
- lib/swa/iam/user.rb
|
@@ -177,13 +299,14 @@ files:
|
|
177
299
|
- lib/swa/resource.rb
|
178
300
|
- lib/swa/s3/bucket.rb
|
179
301
|
- lib/swa/s3/object.rb
|
302
|
+
- lib/swa/s3/object_version.rb
|
180
303
|
- lib/swa/version.rb
|
181
304
|
- swa.gemspec
|
182
305
|
homepage: https://github.com/mdub/swa
|
183
306
|
licenses:
|
184
307
|
- MIT
|
185
308
|
metadata: {}
|
186
|
-
post_install_message:
|
309
|
+
post_install_message:
|
187
310
|
rdoc_options: []
|
188
311
|
require_paths:
|
189
312
|
- lib
|
@@ -198,9 +321,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
321
|
- !ruby/object:Gem::Version
|
199
322
|
version: '0'
|
200
323
|
requirements: []
|
201
|
-
|
202
|
-
|
203
|
-
signing_key:
|
324
|
+
rubygems_version: 3.4.10
|
325
|
+
signing_key:
|
204
326
|
specification_version: 4
|
205
327
|
summary: AWS, backwards
|
206
328
|
test_files: []
|