preserve-rds-snapshot 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -3
- data/lib/preserve-rds-snapshot/cli.rb +72 -2
- data/lib/preserve-rds-snapshot/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ac1fad7b038d2f7714ce5775f6faca3f607865d
|
4
|
+
data.tar.gz: 9c4b3e1d56a99892049df09479be7d2196a5164e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b22cbca0519b61ada69d8ec3d0a2bfe29fd1af82c869d158694a493a5f23f22a1772ec42c599e944e0870eb6972814a281e8aecd5f22db33d7cea671beeb9e8
|
7
|
+
data.tar.gz: 58ea25f44eaef6accac79fe4e6a811c9570034a362038d4464f67ef1269833b72184517bf80f1157c71a5999d9fe93e0cd361f8607d55520d3d90376da18d7df
|
data/README.md
CHANGED
@@ -22,9 +22,11 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
```
|
24
24
|
Commands:
|
25
|
-
preserve-rds-snapshot
|
26
|
-
preserve-rds-snapshot
|
27
|
-
preserve-rds-snapshot
|
25
|
+
preserve-rds-snapshot copy -o src -t target # copy snapshot
|
26
|
+
preserve-rds-snapshot help [COMMAND] # Describe available commands or one specific command
|
27
|
+
preserve-rds-snapshot latest # show latest snapshot
|
28
|
+
preserve-rds-snapshot list # Show list of RDS Snapshots
|
29
|
+
preserve-rds-snapshot preserve # copy automated snapshot to manual
|
28
30
|
|
29
31
|
Options:
|
30
32
|
p, [--profile=PROFILE] # Load credentials by profile name from shared credentials file.
|
@@ -32,6 +34,15 @@ Options:
|
|
32
34
|
s, [--secret-access-key=SECRET_ACCESS_KEY] # AWS secret access key.
|
33
35
|
r, [--region=REGION] # AWS region.
|
34
36
|
[--shared-credentials-path=SHARED_CREDENTIALS_PATH] # AWS shared credentials path.
|
37
|
+
i, [--instance=INSTANCE] # target DB Instance
|
38
|
+
|
39
|
+
Options:
|
40
|
+
p, [--profile=PROFILE] # Load credentials by profile name from shared credentials file.
|
41
|
+
k, [--access-key-id=ACCESS_KEY_ID] # AWS access key id.
|
42
|
+
s, [--secret-access-key=SECRET_ACCESS_KEY] # AWS secret access key.
|
43
|
+
r, [--region=REGION] # AWS region.
|
44
|
+
[--shared-credentials-path=SHARED_CREDENTIALS_PATH] # AWS shared credentials path.
|
45
|
+
i, [--instance=INSTANCE] # target DB Instance
|
35
46
|
```
|
36
47
|
|
37
48
|
## Development
|
@@ -5,6 +5,11 @@ module PreserveRdsSnapshot
|
|
5
5
|
class CLI < Thor
|
6
6
|
include Thor::Aws
|
7
7
|
|
8
|
+
class_option :instance,
|
9
|
+
aliases: [:i],
|
10
|
+
type: :string,
|
11
|
+
desc: 'target DB Instance'
|
12
|
+
|
8
13
|
desc :list, 'Show list of RDS Snapshots'
|
9
14
|
option :snapshot_type,
|
10
15
|
aliases: [:t],
|
@@ -13,7 +18,8 @@ module PreserveRdsSnapshot
|
|
13
18
|
def list
|
14
19
|
begin
|
15
20
|
resp = rds.client.describe_db_snapshots(
|
16
|
-
snapshot_type: options[:snapshot_type]
|
21
|
+
snapshot_type: options[:snapshot_type],
|
22
|
+
db_instance_identifier: options[:instance]
|
17
23
|
)
|
18
24
|
resp.db_snapshots.each do |s|
|
19
25
|
puts "#{s.db_snapshot_identifier}\t#{s.snapshot_create_time}"
|
@@ -24,6 +30,28 @@ module PreserveRdsSnapshot
|
|
24
30
|
end
|
25
31
|
|
26
32
|
desc :preserve, 'copy automated snapshot to manual'
|
33
|
+
def preserve
|
34
|
+
begin
|
35
|
+
instances = db_instances(options[:instance])
|
36
|
+
instances.each do |i|
|
37
|
+
latest = latest_auto_snapshot(i.db_instance_identifier)
|
38
|
+
if latest
|
39
|
+
db_snapshot_identifier = latest.db_snapshot_identifier
|
40
|
+
resp = rds.client.copy_db_snapshot(
|
41
|
+
source_db_snapshot_identifier: db_snapshot_identifier,
|
42
|
+
target_db_snapshot_identifier: preserve_snapshot_name(db_snapshot_identifier),
|
43
|
+
tags: [key: 'type', value: 'preserve']
|
44
|
+
)
|
45
|
+
s = resp.db_snapshot
|
46
|
+
puts "#{s.db_snapshot_identifier}\t#{s.snapshot_create_time}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
rescue ::Aws::Errors::ServiceError => e
|
50
|
+
$stderr.puts e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc :copy, 'copy snapshot'
|
27
55
|
option :source_db_snapshot_identifier,
|
28
56
|
aliases: [:o],
|
29
57
|
type: :string,
|
@@ -34,7 +62,7 @@ module PreserveRdsSnapshot
|
|
34
62
|
type: :string,
|
35
63
|
desc: 'target snapshot identifier',
|
36
64
|
required: true
|
37
|
-
def
|
65
|
+
def copy
|
38
66
|
begin
|
39
67
|
resp = rds.client.copy_db_snapshot(
|
40
68
|
source_db_snapshot_identifier: options[:source_db_snapshot_identifier],
|
@@ -47,5 +75,47 @@ module PreserveRdsSnapshot
|
|
47
75
|
$stderr.puts e
|
48
76
|
end
|
49
77
|
end
|
78
|
+
|
79
|
+
desc :latest, 'show latest snapshot'
|
80
|
+
def latest
|
81
|
+
instances = db_instances(options[:instance])
|
82
|
+
instances.each do |instance|
|
83
|
+
s = latest_auto_snapshot(instance.db_instance_identifier)
|
84
|
+
puts "#{s.db_snapshot_identifier}\t#{s.snapshot_create_time}" if s
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def latest_auto_snapshot(db_instance_identifier = nil)
|
91
|
+
latest = nil
|
92
|
+
begin
|
93
|
+
resp = rds.client.describe_db_snapshots(
|
94
|
+
snapshot_type: 'automated',
|
95
|
+
db_instance_identifier: db_instance_identifier
|
96
|
+
)
|
97
|
+
latest = resp.db_snapshots.sort_by(&:snapshot_create_time).last
|
98
|
+
rescue ::Aws::Errors::ServiceError => e
|
99
|
+
$stderr.puts e
|
100
|
+
end
|
101
|
+
latest
|
102
|
+
end
|
103
|
+
|
104
|
+
def db_instances(db_instance_identifier = nil)
|
105
|
+
list = []
|
106
|
+
begin
|
107
|
+
if db_instance_identifier
|
108
|
+
list << rds.db_instance(db_instance_identifier)
|
109
|
+
else
|
110
|
+
list = rds.db_instances.to_a
|
111
|
+
end
|
112
|
+
rescue ::Aws::Errors::ServiceError => e
|
113
|
+
$stderr.puts e
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def preserve_snapshot_name(db_snapshot_identifier)
|
118
|
+
'preserve-' + db_snapshot_identifier.gsub(/^rds:/, '')
|
119
|
+
end
|
50
120
|
end
|
51
121
|
end
|