swa 0.6.1 → 0.7.0

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: b1dfb1773a649e5d9e24e8ee24739cb6b2df451bb2cd4ffdf6a9b4336c067d87
4
+ data.tar.gz: dc90877d13ad90f7df91dfcec228639de7dd1393b42f2378ee2236421e1d44a4
5
5
  SHA512:
6
- metadata.gz: 677537cc4f3c0acb8f93569eb27950b3b76db266b5dfe4a6233ca5990d97f09583a7725c5219a2bddb18d7c29dd8496d42965ffc9f565c81b6b81355e697c77a
7
- data.tar.gz: 26d882e959cbd567c9533d2e97144aeeea21cae0e42ca3770f93b908e2cda20d2d815f9d17c45fa99ae9c34040b6c0bb9001128f6ef15a852c97682232b5c9b0
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.
@@ -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,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
@@ -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,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
@@ -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.0"
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.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: 2016-11-21 00:00:00.000000000 Z
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.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,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
- rubyforge_project:
202
- rubygems_version: 2.6.7
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: []