swa 0.6.1 → 0.7.1

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
- SHA1:
3
- metadata.gz: 518a3bd32a4bf016d2001f1c218a11075bcb439f
4
- data.tar.gz: 14cef26fd503b59396ae9eeb2eb950cd3823ff30
2
+ SHA256:
3
+ metadata.gz: 588a6a0445908b4b0c24eeab23190c51143c2b603f801c7c64fe8d296ac42180
4
+ data.tar.gz: 21f835b69987db9c4011e4672c1e2bed5a5bf1b2f84112662fb72af1114499c7
5
5
  SHA512:
6
- metadata.gz: 677537cc4f3c0acb8f93569eb27950b3b76db266b5dfe4a6233ca5990d97f09583a7725c5219a2bddb18d7c29dd8496d42965ffc9f565c81b6b81355e697c77a
7
- data.tar.gz: 26d882e959cbd567c9533d2e97144aeeea21cae0e42ca3770f93b908e2cda20d2d815f9d17c45fa99ae9c34040b6c0bb9001128f6ef15a852c97682232b5c9b0
6
+ metadata.gz: c3633166d5fd54e8299875540f0415b36ee092a01d7e3f055d415910ce9268456f89afe5fe88c79df37597d7dd452a8ffd5c5f935bfb397a1afe0353302e6b1c
7
+ data.tar.gz: 9189b5b62448a4430865f4965824c05513b334a0af372df722145a5d945996a15874bab4b3f7b9e7396308adde75633201c3e4c7f9264ac5535dd25ef97956ed
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.
@@ -1,4 +1,4 @@
1
- require "aws-sdk-resources"
1
+ require "aws-sdk-cloudformation"
2
2
  require "swa/cli/base_command"
3
3
  require "swa/cli/collection_behaviour"
4
4
  require "swa/cli/item_behaviour"
@@ -1,4 +1,4 @@
1
- require "aws-sdk-resources"
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
@@ -1,4 +1,4 @@
1
- require "aws-sdk-resources"
1
+ require "aws-sdk-elasticloadbalancing"
2
2
  require "swa/cli/base_command"
3
3
  require "swa/cli/collection_behaviour"
4
4
  require "swa/cli/item_behaviour"
@@ -0,0 +1,205 @@
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/crawl"
6
+ require "swa/glue/crawler"
7
+ require "swa/glue/database"
8
+ require "swa/glue/job"
9
+ require "swa/glue/job_run"
10
+ require "swa/glue/job_bookmark_entry"
11
+ require "swa/glue/partition"
12
+ require "swa/glue/table"
13
+
14
+ module Swa
15
+ module CLI
16
+
17
+ class GlueCommand < BaseCommand
18
+
19
+ subcommand ["crawler"], "Show crawler" do
20
+
21
+ parameter "NAME", "crawler name"
22
+
23
+ include ItemBehaviour
24
+
25
+ subcommand ["crawls"], "Show crawls" do
26
+
27
+ include CollectionBehaviour
28
+
29
+ private
30
+
31
+ def collection
32
+ query_for(:list_crawls, :crawls, Swa::Glue::Crawl, :crawler_name => name)
33
+ end
34
+
35
+ end
36
+
37
+ private
38
+
39
+ def item
40
+ Swa::Glue::Crawler.new(glue_client.get_crawler(:name => name).crawler)
41
+ end
42
+
43
+ end
44
+
45
+ subcommand ["crawlers"], "Show crawlers" do
46
+
47
+ include CollectionBehaviour
48
+
49
+ private
50
+
51
+ def collection
52
+ query_for(:get_crawlers, :crawlers, Swa::Glue::Crawler)
53
+ end
54
+
55
+ end
56
+
57
+ subcommand ["database"], "Show database" do
58
+
59
+ parameter "NAME", "database name"
60
+
61
+ include ItemBehaviour
62
+
63
+ private
64
+
65
+ def item
66
+ Swa::Glue::Database.new(glue_client.get_database(:name => name).database)
67
+ end
68
+
69
+ subcommand ["table"], "Show table" do
70
+
71
+ parameter "NAME", "table name", attribute_name: :table_name
72
+
73
+ include ItemBehaviour
74
+
75
+ subcommand ["partitions"], "Show partitions" do
76
+
77
+ include CollectionBehaviour
78
+
79
+ private
80
+
81
+ def collection
82
+ query_for(:get_partitions, :partitions, Swa::Glue::Partition, :database_name => name, :table_name => table_name)
83
+ end
84
+
85
+ end
86
+
87
+ private
88
+
89
+ def item
90
+ Swa::Glue::Table.new(glue_client.get_table(
91
+ :database_name => name, :name => table_name
92
+ ).table)
93
+ end
94
+
95
+ end
96
+
97
+ subcommand ["tables"], "Show tables" do
98
+
99
+ include CollectionBehaviour
100
+
101
+ private
102
+
103
+ def collection
104
+ query_for(:get_tables, :table_list, Swa::Glue::Table, :database_name => name)
105
+ end
106
+
107
+ end
108
+
109
+ end
110
+
111
+ subcommand ["databases"], "Show databases" do
112
+
113
+ include CollectionBehaviour
114
+
115
+ private
116
+
117
+ def collection
118
+ query_for(:get_databases, :database_list, Swa::Glue::Database)
119
+ end
120
+
121
+ end
122
+
123
+ subcommand ["job"], "Show job" do
124
+
125
+ parameter "NAME", "job name"
126
+
127
+ include ItemBehaviour
128
+
129
+ private
130
+
131
+ def item
132
+ Swa::Glue::Job.new(glue_client.get_job(:job_name => name).job)
133
+ end
134
+
135
+ subcommand ["run"], "Show run" do
136
+
137
+ parameter "ID", "run ID", attribute_name: :run_id
138
+
139
+ include ItemBehaviour
140
+
141
+ subcommand ["bookmark"], "Show bookmark" do
142
+
143
+ self.default_subcommand = "summary"
144
+
145
+ include ItemBehaviour
146
+
147
+ private
148
+
149
+ def item
150
+ Swa::Glue::JobBookmarkEntry.new(
151
+ glue_client.get_job_bookmark(:job_name => name, :run_id => run_id).job_bookmark_entry
152
+ )
153
+ end
154
+
155
+ end
156
+
157
+ private
158
+
159
+ def item
160
+ Swa::Glue::JobRun.new(glue_client.get_job_run(:job_name => name, :run_id => run_id).job_run)
161
+ end
162
+
163
+ end
164
+
165
+ subcommand ["runs"], "Show runs" do
166
+
167
+ include CollectionBehaviour
168
+
169
+ private
170
+
171
+ def collection
172
+ query_for(:get_job_runs, :job_runs, Swa::Glue::JobRun, :job_name => name)
173
+ end
174
+
175
+ end
176
+
177
+ end
178
+
179
+ subcommand ["jobs"], "Show jobs" do
180
+
181
+ include CollectionBehaviour
182
+
183
+ private
184
+
185
+ def collection
186
+ query_for(:get_jobs, :jobs, Swa::Glue::Job)
187
+ end
188
+
189
+ end
190
+
191
+ protected
192
+
193
+ def glue_client
194
+ ::Aws::Glue::Client.new(aws_config)
195
+ end
196
+
197
+ def query_for(query_method, response_key, model, **query_args)
198
+ records = glue_client.public_send(query_method, **query_args).public_send(response_key)
199
+ model.list(records)
200
+ end
201
+
202
+ end
203
+
204
+ end
205
+ end
@@ -1,8 +1,10 @@
1
- require "aws-sdk-resources"
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
@@ -1,4 +1,4 @@
1
- require "aws-sdk-resources"
1
+ require "aws-sdk-kms"
2
2
  require "swa/cli/base_command"
3
3
  require "swa/cli/collection_behaviour"
4
4
  require "swa/cli/item_behaviour"
@@ -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
@@ -1,4 +1,4 @@
1
- require "aws-sdk-resources"
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
@@ -21,6 +21,10 @@ module Swa
21
21
  collection.lazy.select(&method(:call))
22
22
  end
23
23
 
24
+ def specified?
25
+ @predicates.any?
26
+ end
27
+
24
28
  end
25
29
 
26
30
  end
@@ -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
@@ -22,6 +22,8 @@ module Swa
22
22
  aws_resource.name
23
23
  end
24
24
 
25
+ delegate :delete
26
+
25
27
  private
26
28
 
27
29
  alias_method :sg, :aws_resource
@@ -0,0 +1,25 @@
1
+ require "swa/record"
2
+
3
+ module Swa
4
+ module Glue
5
+
6
+ class Crawl < Record
7
+
8
+ def summary
9
+ [
10
+ crawl_id,
11
+ pad(state, 9),
12
+ start_time.iso8601,
13
+ end_time.iso8601
14
+ ].join(" ")
15
+ end
16
+
17
+ delegate :crawl_id
18
+ delegate :state
19
+ delegate :start_time
20
+ delegate :end_time
21
+
22
+ end
23
+
24
+ end
25
+ 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 || "NEW"
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ require "swa/record"
2
+
3
+ module Swa
4
+ module Glue
5
+
6
+ class Database < Record
7
+
8
+ def summary
9
+ name
10
+ end
11
+
12
+ delegate :name
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require "swa/record"
2
+
3
+ module Swa
4
+ module Glue
5
+
6
+ class Job < Record
7
+
8
+ def summary
9
+ [
10
+ pad(name, 48),
11
+ role
12
+ ].join(" ")
13
+ end
14
+
15
+ delegate :name
16
+ delegate :role
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ require "swa/record"
2
+
3
+ module Swa
4
+ module Glue
5
+
6
+ class JobBookmarkEntry < Record
7
+
8
+ def summary
9
+ job_bookmark
10
+ end
11
+
12
+ delegate :job_bookmark
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -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,17 @@
1
+ require "swa/record"
2
+
3
+ module Swa
4
+ module Glue
5
+
6
+ class Table < Record
7
+
8
+ def summary
9
+ name
10
+ end
11
+
12
+ delegate :name
13
+
14
+ end
15
+
16
+ end
17
+ 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
@@ -1,4 +1,5 @@
1
1
  require "swa/resource"
2
+ require "swa/iam/credentials"
2
3
 
3
4
  module Swa
4
5
  module IAM
@@ -9,6 +10,10 @@ module Swa
9
10
  role.role_id
10
11
  end
11
12
 
13
+ def arn
14
+ role.arn
15
+ end
16
+
12
17
  def summary
13
18
  role.name
14
19
  end
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
@@ -1,3 +1,3 @@
1
1
  module Swa
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.1"
3
3
  end
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.12"
24
- spec.add_development_dependency "rake", "~> 10.0"
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.6.1
4
+ version: 0.7.1
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: 2016-11-21 00:00:00.000000000 Z
11
+ date: 2023-10-24 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.12'
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.12'
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: '10.0'
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: '10.0'
40
+ version: '12.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: aws-sdk-resources
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: 2.6.14
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: 2.6.14
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,17 @@ 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/crawl.rb
283
+ - lib/swa/glue/crawler.rb
284
+ - lib/swa/glue/database.rb
285
+ - lib/swa/glue/job.rb
286
+ - lib/swa/glue/job_bookmark_entry.rb
287
+ - lib/swa/glue/job_run.rb
288
+ - lib/swa/glue/partition.rb
289
+ - lib/swa/glue/table.rb
290
+ - lib/swa/iam/credentials.rb
169
291
  - lib/swa/iam/group.rb
292
+ - lib/swa/iam/instance_profile.rb
170
293
  - lib/swa/iam/policy.rb
171
294
  - lib/swa/iam/role.rb
172
295
  - lib/swa/iam/user.rb
@@ -177,13 +300,14 @@ files:
177
300
  - lib/swa/resource.rb
178
301
  - lib/swa/s3/bucket.rb
179
302
  - lib/swa/s3/object.rb
303
+ - lib/swa/s3/object_version.rb
180
304
  - lib/swa/version.rb
181
305
  - swa.gemspec
182
306
  homepage: https://github.com/mdub/swa
183
307
  licenses:
184
308
  - MIT
185
309
  metadata: {}
186
- post_install_message:
310
+ post_install_message:
187
311
  rdoc_options: []
188
312
  require_paths:
189
313
  - lib
@@ -198,9 +322,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
322
  - !ruby/object:Gem::Version
199
323
  version: '0'
200
324
  requirements: []
201
- rubyforge_project:
202
- rubygems_version: 2.6.7
203
- signing_key:
325
+ rubygems_version: 3.4.10
326
+ signing_key:
204
327
  specification_version: 4
205
328
  summary: AWS, backwards
206
329
  test_files: []