rds-rotate-db-snapshots 0.3.0 → 0.4.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OGE1NGFiMmM3NDBkY2ExYzUzOGIxNzRjYmI2NDQzMDkzZDlhNTA5OQ==
5
- data.tar.gz: !binary |-
6
- MTU4Y2YyNTcwODRkMTNhYWEwMjQ2ZGFkMDViYjhiODQ3N2EwOWE0Mw==
2
+ SHA256:
3
+ metadata.gz: 89f6c03c428ea666793c1a5b1f8c73f9667466db382e4f69358aff1dee3026a1
4
+ data.tar.gz: 1a2ef773c19beeaefe8f393d26e97c4e1eb022288268f8881280978ad2ada7d6
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Y2JiNGEyZDk3MzI5ODFjZDg3NjEyNjQ1ODYyYzE2ZWFhMzkyOTI3M2Y4MmMz
10
- MDM1MjE2ZTViZWY3MDg0NjE0ZWU2NTM4OTExMWM1ZmY5MWFjNDYzMWFhYWM3
11
- YWQwOTU5YTYyOGYwYTRlNGU4NDIyNDk1ODY2Mzc5MThkM2ZhODI=
12
- data.tar.gz: !binary |-
13
- MjQxMzRmNWZjYWIwM2RmNzI0N2M0NmE3ZjA0ZWU4OTg5ZTkzYjcwNmU3MjNh
14
- YmQyMmI1MzM4ZjA3YzI2YzRmYWRkZTQ3NzhjNDExMWRmZWE3YTc3ZTY1ODBl
15
- MGFiNzlhM2Q4YjY1MmRjODBkNmMyZDYxMGQ2ZTFmYWVkYWU4OWY=
6
+ metadata.gz: 860abf62c29df38f7028c6466992af8c150217b9f0b5502343c895cb8620857ff8871795cccc3120d5ea226220dc897b8607652cf5f20c972e15306a1d25ecc3
7
+ data.tar.gz: c2d7fde7e855cbbc9fbd45edf7f935cfa4d310c6677ab9b0171b48840690ecee6ccca3af753c81fbae93ca425ef3d2df611c1323e953da14fd5bc57b835087d7
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'aws-sdk', '>= 1.51.0'
3
+ gem 'aws-sdk-rds', '~> 1'
4
4
 
5
5
  # Add dependencies to develop your gem here.
6
6
  # Include everything needed to run rake, tests, features, etc.
@@ -10,7 +10,7 @@ group :development, :test do
10
10
  end
11
11
 
12
12
  group :development do
13
- gem 'jeweler'
13
+ gem 'juwelier'
14
14
  end
15
15
 
16
16
  group :test do
data/Rakefile CHANGED
@@ -9,9 +9,8 @@ rescue Bundler::BundlerError => e
9
9
  end
10
10
  require 'rake'
11
11
 
12
- require 'jeweler'
13
- Jeweler::Tasks.new do |gem|
14
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
12
+ require 'juwelier'
13
+ Juwelier::Tasks.new do |gem|
15
14
  gem.name = "rds-rotate-db-snapshots"
16
15
  gem.homepage = "http://github.com/serg-kovalev/rds-rotate-db-snapshots"
17
16
  gem.license = "MIT"
@@ -19,8 +18,9 @@ Jeweler::Tasks.new do |gem|
19
18
  gem.description = %Q{Provides a simple way to rotate RDS DB snapshots with configurable retention periods.}
20
19
  gem.email = "kovserg@gmail.com"
21
20
  gem.authors = ["Siarhei Kavaliou"]
21
+ gem.version = File.exist?('VERSION') ? File.read('VERSION') : ""
22
22
  end
23
- Jeweler::RubygemsDotOrgTasks.new
23
+ Juwelier::RubygemsDotOrgTasks.new
24
24
 
25
25
  require 'rake/testtask'
26
26
  Rake::TestTask.new(:test) do |test|
@@ -28,7 +28,7 @@ Rake::TestTask.new(:test) do |test|
28
28
  test.verbose = true
29
29
  end
30
30
 
31
- require 'simplecov'
31
+ # require 'simplecov'
32
32
  # Rcov::RcovTask.new do |test|
33
33
  # test.libs << 'test'
34
34
  # test.pattern = 'test/**/test_*.rb'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems'
4
- require 'aws-sdk'
4
+ require 'aws-sdk-rds'
5
5
  require 'optparse'
6
6
 
7
7
  $opts = {
8
8
  :aws_access_key => ENV["AWS_ACCESS_KEY_ID"],
9
9
  :aws_secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
10
+ :aws_session_token => ENV["AWS_SESSION_TOKEN"],
10
11
  :aws_region => ENV["AWS_REGION"],
11
12
  :pattern => nil,
12
13
  :by_tags => nil,
@@ -38,24 +39,24 @@ end
38
39
  def rotate_em(snapshots)
39
40
  # poor man's way to get a deep copy of our time_periods definition hash
40
41
  periods = Marshal.load(Marshal.dump($time_periods))
41
-
42
+
42
43
  snapshots.each do |snapshot|
43
44
  time = snapshot[:snapshot_create_time]
44
45
  db_id = snapshot[:db_instance_identifier]
45
46
  snapshot_id = snapshot[:db_snapshot_identifier]
46
47
  description = snapshot_id
47
48
  keep_reason = nil
48
-
49
+
49
50
  if $opts[:pattern] && description !~ /#{$opts[:pattern]}/
50
51
  puts " #{time.strftime '%Y-%m-%d %H:%M:%S'} #{snapshot_id} Skipping snapshot with description #{description}"
51
52
  next
52
53
  end
53
-
54
+
54
55
  periods.keys.sort { |a, b| periods[a][:seconds] <=> periods[b][:seconds] }.each do |period|
55
56
  period_info = periods[period]
56
57
  keep = period_info[:keep]
57
58
  keeping = period_info[:keeping]
58
-
59
+
59
60
  time_string = time.strftime period_info[:format]
60
61
  if Time.now - time < keep * period_info[:seconds]
61
62
  if !keeping.key?(time_string) && keeping.length < keep
@@ -65,18 +66,18 @@ def rotate_em(snapshots)
65
66
  break
66
67
  end
67
68
  end
68
-
69
+
69
70
  if keep_reason.nil? && snapshot == snapshots.last && $opts[:keep_last]
70
71
  keep_reason = 'last snapshot'
71
72
  end
72
-
73
+
73
74
  if !keep_reason.nil?
74
75
  puts " #{time.strftime '%Y-%m-%d %H:%M:%S'} #{snapshot_id} Keeping for #{keep_reason}"
75
76
  else
76
77
  puts " #{time.strftime '%Y-%m-%d %H:%M:%S'} #{snapshot_id} Deleting"
77
78
  begin
78
79
  $rds.delete_db_snapshot(db_snapshot_identifier: snapshot_id) unless $opts[:dry_run]
79
- rescue AWS::RDS::Errors => e
80
+ rescue Aws::RDS::Errors => e
80
81
  backoff()
81
82
  retry
82
83
  end
@@ -93,7 +94,7 @@ def create_snapshot(name, db_indentifier_ids)
93
94
  begin
94
95
  $rds.create_db_snapshot(db_snapshot_identifier: name, db_instance_identifier: db_id) unless $opts[:dry_run]
95
96
  puts " #{Time.now.strftime '%Y-%m-%d %H:%M:%S'} Creation snapshot #{name} is pending (db: #{db_id})"
96
- rescue AWS::RDS::Errors::InvalidDBInstanceState => e
97
+ rescue Aws::RDS::Errors::InvalidDBInstanceStateFault => e
97
98
  backoff()
98
99
  retry
99
100
  end
@@ -116,6 +117,18 @@ def split_tag(hash,v)
116
117
  end
117
118
  end
118
119
 
120
+ def get_db_snapshots(options)
121
+ snapshots = []
122
+ response = $rds.describe_db_snapshots(options)
123
+ while true do
124
+ snapshots += response.db_snapshots
125
+ break unless response[:marker]
126
+
127
+ response = $rds.describe_db_snapshots(options.merge(marker: response[:marker]))
128
+ end
129
+ snapshots
130
+ end
131
+
119
132
  OptionParser.new do |o|
120
133
  script_name = File.basename($0)
121
134
  o.banner = "Usage: #{script_name} [options] <db_indentifier>\nUsage: #{script_name} --by-tags <tag=value,...> [other options]"
@@ -133,6 +146,10 @@ OptionParser.new do |o|
133
146
  $opts[:aws_region] = v
134
147
  end
135
148
 
149
+ o.on("--aws-session-token SESSION_TOKEN", "AWS session token") do |v|
150
+ $opts[:aws_session_token] = v
151
+ end
152
+
136
153
  o.on("--pattern STRING", "Snapshots without this string in the description will be ignored") do |v|
137
154
  $opts[:pattern] = v
138
155
  end
@@ -204,9 +221,14 @@ end
204
221
 
205
222
  $backoffed = 0
206
223
  begin
207
- AWS.config(access_key_id: $opts[:aws_access_key], secret_access_key: $opts[:aws_secret_access_key], region: $opts[:aws_region])
208
- $rds = AWS.rds.client
209
- rescue AWS::RDS::Errors => e
224
+ Aws.config.update(
225
+ access_key_id: $opts[:aws_access_key],
226
+ secret_access_key: $opts[:aws_secret_access_key],
227
+ region: $opts[:aws_region],
228
+ session_token: $opts[:aws_session_token]
229
+ )
230
+ $rds = Aws::RDS::Client.new
231
+ rescue Aws::RDS::Errors => e
210
232
  backoff()
211
233
  retry
212
234
  end
@@ -221,7 +243,7 @@ if $opts[:by_tags]
221
243
  begin
222
244
  these_snapshots = $rds.describe_tags(snapshot_type: 'manual', filters: {'resource-type'=>"snapshot", 'key'=>tag, 'value'=>value}).
223
245
  delete_if{ |e| e.status != 'available' }
224
- rescue AWS::RDS::Errors => e
246
+ rescue Aws::RDS::Errors => e
225
247
  backoff()
226
248
  retry
227
249
  end
@@ -242,10 +264,10 @@ if $opts[:by_tags]
242
264
  end
243
265
 
244
266
  begin
245
- rotate_these = $rds.describe_db_snapshots(db_instance_identifier: all_snapshots.map(&:db_instance_identifier).uniq).
246
- db_snapshots.delete_if{ |e| !all_snapshots.include?(e.db_snapshot_identifier) }.
267
+ rotate_these = get_db_snapshots(db_instance_identifier: all_snapshots.map(&:db_instance_identifier).uniq).
268
+ delete_if{ |e| !all_snapshots.include?(e.db_snapshot_identifier) }.
247
269
  sort {|a,b| a[:snapshot_create_time] <=> b[:snapshot_create_time] }
248
- rescue AWS::RDS::Errors => e
270
+ rescue Aws::RDS::Errors => e
249
271
  backoff()
250
272
  retry
251
273
  end
@@ -253,9 +275,9 @@ if $opts[:by_tags]
253
275
  rotate_em(rotate_these)
254
276
  else
255
277
  begin
256
- all_snapshots = $rds.describe_db_snapshots(snapshot_type: 'manual').db_snapshots.
257
- delete_if{ |e| e.status != 'available' }
258
- rescue AWS::RDS::Errors => e
278
+ all_snapshots = get_db_snapshots(snapshot_type: 'manual').
279
+ delete_if{ |e| e[:status] != 'available' }
280
+ rescue Aws::RDS::Errors => e
259
281
  backoff()
260
282
  retry
261
283
  end
data/lib/.empty CHANGED
@@ -1 +1 @@
1
- Jeweler doesn't like me not having a lib/ directory.
1
+ Juwelier doesn't like me not having a lib/ directory.
@@ -1,20 +1,20 @@
1
- # Generated by jeweler
1
+ # Generated by juwelier
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: rds-rotate-db-snapshots 0.3.0 ruby lib
5
+ # stub: rds-rotate-db-snapshots 0.4.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = "rds-rotate-db-snapshots"
9
- s.version = "0.3.0"
8
+ s.name = "rds-rotate-db-snapshots".freeze
9
+ s.version = "0.4.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Siarhei Kavaliou"]
14
- s.date = "2015-06-17"
15
- s.description = "Provides a simple way to rotate RDS DB snapshots with configurable retention periods."
16
- s.email = "kovserg@gmail.com"
17
- s.executables = ["rds-rotate-db-snapshots"]
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Siarhei Kavaliou".freeze]
14
+ s.date = "2022-12-24"
15
+ s.description = "Provides a simple way to rotate RDS DB snapshots with configurable retention periods.".freeze
16
+ s.email = "kovserg@gmail.com".freeze
17
+ s.executables = ["rds-rotate-db-snapshots".freeze]
18
18
  s.extra_rdoc_files = [
19
19
  "LICENSE.txt",
20
20
  "README.rdoc"
@@ -33,30 +33,25 @@ Gem::Specification.new do |s|
33
33
  "test/helper.rb",
34
34
  "test/test_rds-rotate-db-snapshots.rb"
35
35
  ]
36
- s.homepage = "http://github.com/serg-kovalev/rds-rotate-db-snapshots"
37
- s.licenses = ["MIT"]
38
- s.rubygems_version = "2.2.2"
39
- s.summary = "Amazon RDS DB snapshot rotator"
36
+ s.homepage = "http://github.com/serg-kovalev/rds-rotate-db-snapshots".freeze
37
+ s.licenses = ["MIT".freeze]
38
+ s.rubygems_version = "3.3.7".freeze
39
+ s.summary = "Amazon RDS DB snapshot rotator".freeze
40
40
 
41
41
  if s.respond_to? :specification_version then
42
42
  s.specification_version = 4
43
+ end
43
44
 
44
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<aws-sdk>, [">= 1.51.0"])
46
- s.add_development_dependency(%q<bundler>, [">= 0"])
47
- s.add_development_dependency(%q<simplecov>, [">= 0"])
48
- s.add_development_dependency(%q<jeweler>, [">= 0"])
49
- else
50
- s.add_dependency(%q<aws-sdk>, [">= 1.51.0"])
51
- s.add_dependency(%q<bundler>, [">= 0"])
52
- s.add_dependency(%q<simplecov>, [">= 0"])
53
- s.add_dependency(%q<jeweler>, [">= 0"])
54
- end
45
+ if s.respond_to? :add_runtime_dependency then
46
+ s.add_runtime_dependency(%q<aws-sdk-rds>.freeze, ["~> 1"])
47
+ s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
48
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
49
+ s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
55
50
  else
56
- s.add_dependency(%q<aws-sdk>, [">= 1.51.0"])
57
- s.add_dependency(%q<bundler>, [">= 0"])
58
- s.add_dependency(%q<simplecov>, [">= 0"])
59
- s.add_dependency(%q<jeweler>, [">= 0"])
51
+ s.add_dependency(%q<aws-sdk-rds>.freeze, ["~> 1"])
52
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
53
+ s.add_dependency(%q<simplecov>.freeze, [">= 0"])
54
+ s.add_dependency(%q<juwelier>.freeze, [">= 0"])
60
55
  end
61
56
  end
62
57
 
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rds-rotate-db-snapshots
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siarhei Kavaliou
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-17 00:00:00.000000000 Z
11
+ date: 2022-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
14
+ name: aws-sdk-rds
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.51.0
19
+ version: '1'
20
20
  type: :runtime
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.51.0
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '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
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: simplecov
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: jeweler
56
+ name: juwelier
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Provides a simple way to rotate RDS DB snapshots with configurable retention
@@ -76,8 +76,8 @@ extra_rdoc_files:
76
76
  - LICENSE.txt
77
77
  - README.rdoc
78
78
  files:
79
- - .document
80
- - .travis.yml
79
+ - ".document"
80
+ - ".travis.yml"
81
81
  - Gemfile
82
82
  - LICENSE.txt
83
83
  - README.rdoc
@@ -92,24 +92,23 @@ homepage: http://github.com/serg-kovalev/rds-rotate-db-snapshots
92
92
  licenses:
93
93
  - MIT
94
94
  metadata: {}
95
- post_install_message:
95
+ post_install_message:
96
96
  rdoc_options: []
97
97
  require_paths:
98
98
  - lib
99
99
  required_ruby_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - ! '>='
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.2.2
112
- signing_key:
110
+ rubygems_version: 3.3.7
111
+ signing_key:
113
112
  specification_version: 4
114
113
  summary: Amazon RDS DB snapshot rotator
115
114
  test_files: []