rds-rotate-db-snapshots 0.5.0 → 0.5.1

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
2
  SHA256:
3
- metadata.gz: 7ddfaa42b87e8ad4f9cabafcea086ce82d0f351068d05db7da97b53fa5080a0f
4
- data.tar.gz: dac01f0570c16a5a5a205253f0ca3e6cd26d7f7ed22377da3f9f1bad2e99d87b
3
+ metadata.gz: ca82ea61b9da51d2888c98f21fda30ce73850b265dcb01b75c2e99c0b84d597d
4
+ data.tar.gz: 778fc695f23d0c713bedad76b2ce4893401c50d270df596c1324b52dcd0546b7
5
5
  SHA512:
6
- metadata.gz: 4d5d586b5ff033df7c7a4d131259d7f47b1f30e2592b616fc0e6644fcbd4999d0e24815dba96c9d335e8d6e35446293bee2b59f83ab286eda4a32a3f39cbaf38
7
- data.tar.gz: 5f9339752c7a963981f1d6be97ed321a0897f8028d52f632b6dae0fb81e2e495327e127f7dec3d4040b35610ad3a7c56d9206b8220a376485c87f4372fe88470
6
+ metadata.gz: f8bca5be1bb1d4324ae674677f574707782f92cb9717ec66010a8686ceca450d0127017c109289738c487f25131f6cf355ad60d4a33d8c71d0b2c2278ea24b68
7
+ data.tar.gz: b00fe71aab391fa82e64b52f1de28bfc68632f0ae5a7961b5e1358fb55a28d19f1d9dd44dbcd59e81ce06204b8d26f290c2c253e303386144b0525c75ff1c3ec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -9,7 +9,10 @@ class RdsRotateDbSnapshots
9
9
  reset_backoff
10
10
  begin
11
11
  super *args
12
- rescue Aws::RDS::Errors => e
12
+ rescue Aws::RDS::Errors::ServiceError => e
13
+ raise if e.is_a? Aws::RDS::Errors::ExpiredToken
14
+ # TODO: re-work
15
+ puts "Error: #{e}"
13
16
  backoff
14
17
  retry
15
18
  end
@@ -95,15 +95,15 @@ class RdsRotateDbSnapshots
95
95
  @options[:dry_run] = true
96
96
  end
97
97
  end
98
+ end
98
99
 
99
- def split_tag(hash,v)
100
- v.split(',').each do |pair|
101
- tag, value = pair.split('=',2)
102
- if value.nil?
103
- raise InvalidArgument, "invalid tag=value format"
104
- end
105
- hash[tag] = value
100
+ def split_tag(hash,v)
101
+ v.split(',').each do |pair|
102
+ tag, value = pair.split('=',2)
103
+ if value.nil?
104
+ raise InvalidArgument, "invalid tag=value format"
106
105
  end
106
+ hash[tag] = value
107
107
  end
108
108
  end
109
109
  end
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: rds-rotate-db-snapshots 0.5.0 ruby lib
5
+ # stub: rds-rotate-db-snapshots 0.5.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "rds-rotate-db-snapshots".freeze
9
- s.version = "0.5.0"
9
+ s.version = "0.5.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
@@ -38,7 +38,11 @@ Gem::Specification.new do |s|
38
38
  "lib/rds_rotate_db_snapshots/rds_client.rb",
39
39
  "rds-rotate-db-snapshots.gemspec",
40
40
  "spec/helper.rb",
41
- "spec/rds_rotate_db_snapshots_spec.rb"
41
+ "spec/lib/rds_rotate_db_snapshots/action_wrappers_spec.rb",
42
+ "spec/lib/rds_rotate_db_snapshots/actions_spec.rb",
43
+ "spec/lib/rds_rotate_db_snapshots/options_parser_spec.rb",
44
+ "spec/lib/rds_rotate_db_snapshots/rds_client_spec.rb",
45
+ "spec/lib/rds_rotate_db_snapshots_spec.rb"
42
46
  ]
43
47
  s.homepage = "http://github.com/serg-kovalev/rds-rotate-db-snapshots".freeze
44
48
  s.licenses = ["MIT".freeze]
data/spec/helper.rb CHANGED
@@ -4,7 +4,7 @@ require "simplecov"
4
4
 
5
5
  SimpleCov.start do
6
6
  add_filter "/spec"
7
- # minimum_coverage(70)
7
+ minimum_coverage(75)
8
8
 
9
9
  if ENV['CI']
10
10
  require 'simplecov-lcov'
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+
3
+ class TestClass
4
+ def initialize
5
+ @backoff_counter = 0
6
+ @options = { backoff_limit: 5 }
7
+ end
8
+
9
+ def test_method
10
+ raise Aws::RDS::Errors::ServiceError.new(nil, 'service error')
11
+ end
12
+
13
+ def reset_backoff
14
+ @backoff_counter = 0
15
+ end
16
+
17
+ def backoff
18
+ @backoff_counter = @backoff_counter + 1
19
+
20
+ raise StandardError, 'gave up' if @options[:backoff_limit] > 0 && @options[:backoff_limit] < @backoff_counter
21
+ end
22
+
23
+ extend RdsRotateDbSnapshots::ActionWrappers
24
+
25
+ with_backoff :test_method
26
+ end
27
+
28
+ describe RdsRotateDbSnapshots::ActionWrappers do
29
+ subject { TestClass.new }
30
+
31
+ describe "#with_backoff" do
32
+ it "does not retry if the exception raised is Aws::RDS::Errors::ExpiredToken" do
33
+ allow(subject).to receive(:test_method).and_raise(Aws::RDS::Errors::ExpiredToken.new(nil, 'token expired'))
34
+ expect(subject).not_to receive(:reset_backoff)
35
+ expect(subject).not_to receive(:backoff)
36
+ expect{subject.test_method}.to raise_error(Aws::RDS::Errors::ExpiredToken)
37
+ end
38
+
39
+ it "retries if the exception raised is Aws::RDS::Errors::ServiceError" do
40
+ expect(subject).to receive(:backoff).exactly(6).and_call_original
41
+
42
+ expect{ subject.test_method }.to raise_error(StandardError, 'gave up')
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,96 @@
1
+ require 'helper'
2
+
3
+ RSpec.shared_examples 'rds_rotate_db_snapshots actions' do
4
+ let(:rds_client) { instance_double(RdsRotateDbSnapshots::RdsClient) }
5
+ let(:client) { rds_client }
6
+ let(:options) do
7
+ {
8
+ aws_access_key: 'ACCESS_KEY',
9
+ aws_secret_access_key: 'SECRET_KEY',
10
+ aws_region: 'REGION',
11
+ pattern: 'test',
12
+ dry_run: true,
13
+ backoff_limit: 15
14
+ }
15
+ end
16
+ let(:rds_snapshots) do
17
+ [
18
+ { snapshot_create_time: Time.now, db_instance_identifier: 'test_db', db_snapshot_identifier: 'test_snapshot' }
19
+ ]
20
+ end
21
+
22
+ before do
23
+ allow(subject).to receive(:client).and_return(rds_client)
24
+ allow(rds_client).to receive(:describe_db_snapshots).and_return(rds_snapshots)
25
+ allow(rds_client).to receive(:create_db_snapshot)
26
+ allow(rds_client).to receive(:delete_db_snapshot)
27
+ end
28
+
29
+ describe "#rotate_em" do
30
+ it "deletes the snapshots that are not part of the specified time periods" do
31
+ expect(rds_client).to receive(:delete_db_snapshot)
32
+ subject.rotate_em(rds_snapshots)
33
+ end
34
+ end
35
+
36
+ describe "#create_snapshot" do
37
+ it "creates a snapshot with the specified name" do
38
+ expect(rds_client).to receive(:create_db_snapshot)
39
+ subject.create_snapshot('test', ['test_db'])
40
+ end
41
+ end
42
+
43
+ describe "#get_db_snapshots" do
44
+ let(:snapshots) { double('snapshots', db_snapshots: rds_snapshots) }
45
+
46
+ it "returns the list of snapshots from the client" do
47
+ allow(snapshots).to receive(:[]).with(:marker).and_return(nil)
48
+ expect(rds_client).to receive(:describe_db_snapshots).and_return(snapshots)
49
+ snapshots = subject.get_db_snapshots(options)
50
+ expect(snapshots).to eq(rds_snapshots)
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ class Test
57
+ include RdsRotateDbSnapshots::Actions
58
+
59
+ attr_reader :options
60
+
61
+ def initialize(script_name: nil, cli: false, options: {})
62
+ @script_name = script_name
63
+ @options = options
64
+ @cli = cli
65
+ parse_options if cli?
66
+ @backoff_counter = 0
67
+ end
68
+
69
+ def reset_backoff
70
+ @backoff_counter = 0
71
+ end
72
+
73
+ def time_periods
74
+ @options[:time_periods] || {}
75
+ end
76
+
77
+ private
78
+
79
+ def cli?
80
+ !!@cli
81
+ end
82
+
83
+ def parse_options
84
+ @options = RdsRotateDbSnapshots::OptionsParser.new(script_name: @script_name, cli: @cli).parse!
85
+ end
86
+
87
+ def backoff
88
+ @backoff_counter = @backoff_counter + 1
89
+ end
90
+ end
91
+
92
+ describe RdsRotateDbSnapshots::Actions do
93
+ subject { Test.new }
94
+
95
+ it_behaves_like 'rds_rotate_db_snapshots actions'
96
+ end
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ describe RdsRotateDbSnapshots::OptionsParser do
4
+ let(:script_name) { "rds_rotate_snapshots.rb" }
5
+ subject { RdsRotateDbSnapshots::OptionsParser.new(script_name: script_name, cli: true).parse! }
6
+
7
+ describe "#parse!" do
8
+ before { ARGV.clear }
9
+
10
+ it "parses options correctly" do
11
+ ARGV.concat(["--aws-access-key", "ACCESS_KEY",
12
+ "--aws-secret-access-key", "SECRET_KEY",
13
+ "--aws-region", "REGION",
14
+ "--pattern", "PATTERN",
15
+ "--backoff-limit", "20",
16
+ "--create-snapshot", "snapshot"])
17
+ options = subject
18
+
19
+ expect(options[:aws_access_key]).to eq("ACCESS_KEY")
20
+ expect(options[:aws_secret_access_key]).to eq("SECRET_KEY")
21
+ expect(options[:aws_region]).to eq("REGION")
22
+ expect(options[:pattern]).to eq("PATTERN")
23
+ expect(options[:backoff_limit]).to eq("20")
24
+ expect(options[:create_snapshot]).to eq("snapshot")
25
+ end
26
+
27
+ it "raises NotImplementedError when by-tags option is passed and it is not implemented" do
28
+ ARGV.concat(["--by-tags", "tag=value,tag2=value"])
29
+
30
+ expect { subject }.to raise_error(RdsRotateDbSnapshots::OptionsParser::NotImplementedError)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require 'helper'
2
+
3
+ describe RdsRotateDbSnapshots::RdsClient do
4
+ let(:options) { {
5
+ :aws_access_key => "ACCESS_KEY",
6
+ :aws_secret_access_key => "SECRET_KEY",
7
+ :aws_session_token => "SESSION_TOKEN",
8
+ :aws_region => "REGION"
9
+ } }
10
+ let(:rds_client) { RdsRotateDbSnapshots::RdsClient.new(options) }
11
+
12
+ it 'configures the client with the correct credentials and region' do
13
+ expect(rds_client.instance_variable_get(:@client).config.credentials).
14
+ to have_attributes(access_key_id: "ACCESS_KEY", secret_access_key: "SECRET_KEY", session_token: "SESSION_TOKEN")
15
+ expect(rds_client.instance_variable_get(:@client).config.region).to eq("REGION")
16
+ end
17
+
18
+ it 'delegates describe_db_snapshots method to the @client object' do
19
+ expect(rds_client.instance_variable_get(:@client)).to receive(:describe_db_snapshots)
20
+ rds_client.describe_db_snapshots
21
+ end
22
+
23
+ it 'delegates create_db_snapshot method to the @client object' do
24
+ expect(rds_client.instance_variable_get(:@client)).to receive(:create_db_snapshot)
25
+ rds_client.create_db_snapshot("test-snapshot")
26
+ end
27
+
28
+ it 'delegates delete_db_snapshot method to the @client object' do
29
+ expect(rds_client.instance_variable_get(:@client)).to receive(:delete_db_snapshot)
30
+ rds_client.delete_db_snapshot("test-snapshot")
31
+ end
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rds-rotate-db-snapshots
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siarhei Kavaliou
@@ -108,7 +108,11 @@ files:
108
108
  - lib/rds_rotate_db_snapshots/rds_client.rb
109
109
  - rds-rotate-db-snapshots.gemspec
110
110
  - spec/helper.rb
111
- - spec/rds_rotate_db_snapshots_spec.rb
111
+ - spec/lib/rds_rotate_db_snapshots/action_wrappers_spec.rb
112
+ - spec/lib/rds_rotate_db_snapshots/actions_spec.rb
113
+ - spec/lib/rds_rotate_db_snapshots/options_parser_spec.rb
114
+ - spec/lib/rds_rotate_db_snapshots/rds_client_spec.rb
115
+ - spec/lib/rds_rotate_db_snapshots_spec.rb
112
116
  homepage: http://github.com/serg-kovalev/rds-rotate-db-snapshots
113
117
  licenses:
114
118
  - MIT