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 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: []