seiton 0.0.2 → 0.0.4
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 +4 -4
- data/.gitignore +0 -1
- data/README.md +24 -0
- data/Rakefile +0 -107
- data/lib/seiton.rb +12 -11
- data/lib/seiton/cli.rb +29 -6
- data/lib/seiton/common.rb +20 -0
- data/lib/seiton/ec2_check.rb +8 -4
- data/lib/seiton/ignores.rb +29 -0
- data/lib/seiton/init.rb +144 -0
- data/lib/seiton/sqs_check.rb +2 -1
- data/lib/seiton/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1c76283846f2d5849c33ff421c2141e77d6cf2dcff0e4da80b3c443fedb2391
|
4
|
+
data.tar.gz: f54a880b530d61686262d888df107d62021d2907a32d6dcf2d91931d5139fb51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 394b674a35ee00fa9947e64a7782ed2a615fac774239e8809f3a25af0790e82b1e765eb9b732620754ab37d2859af10efc8dc63ecbb0ea151742d699f129ed8e
|
7
|
+
data.tar.gz: d012859cadefc12195b0d8aadd99059b5496c162aee88ffd00df45cd514eccc10b16de411adb92f10c32107699f8c9d0deecbb3eb3d5d247bbdbbd5c33080732
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -29,15 +29,39 @@ $ gem install seiton
|
|
29
29
|
```sh
|
30
30
|
$ bundle exec seiton --help
|
31
31
|
Commands:
|
32
|
+
seiton ami # Delete the EC2 AMI.
|
32
33
|
seiton ec2_snapshot # Delete the EC2 Snapshot.
|
33
34
|
seiton eip # Delete the Elastic IP.
|
34
35
|
seiton help [COMMAND] # Describe available commands or one specific command
|
36
|
+
seiton init # Initialize seiton.
|
35
37
|
seiton instance # Delete the EC2 Instance.
|
36
38
|
seiton rds_snapshot # Delete the RDS Snapshot.
|
37
39
|
seiton sqs_queue # Delete the SQS Queue.
|
38
40
|
seiton version # Print the version number.
|
39
41
|
```
|
40
42
|
|
43
|
+
### Init
|
44
|
+
|
45
|
+
#### help
|
46
|
+
|
47
|
+
```sh
|
48
|
+
$ bundle exec seiton --help init
|
49
|
+
Usage:
|
50
|
+
seiton init
|
51
|
+
|
52
|
+
Initialize seiton.
|
53
|
+
```
|
54
|
+
|
55
|
+
#### init
|
56
|
+
|
57
|
+
```sh
|
58
|
+
$ bundle exec seiton init
|
59
|
+
```
|
60
|
+
|
61
|
+
* Create a `check` directory in the current directory
|
62
|
+
* Create a spec_helper.rb in the `check` directory
|
63
|
+
* Create a Rakefile in the current directory
|
64
|
+
|
41
65
|
### Delete EC2 AMI
|
42
66
|
|
43
67
|
#### help
|
data/Rakefile
CHANGED
@@ -1,112 +1,5 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
2
|
require 'bundler/gem_tasks'
|
3
|
-
require 'aws-sdk'
|
4
|
-
require 'highline'
|
5
|
-
require 'logger'
|
6
3
|
|
7
4
|
RSpec::Core::RakeTask.new('spec')
|
8
5
|
task :default => :spec
|
9
|
-
|
10
|
-
namespace :check do
|
11
|
-
targets1 = []
|
12
|
-
targets2 = []
|
13
|
-
Dir.glob(['./spec/*', './check/*']).each do |file|
|
14
|
-
target = File.basename(file)
|
15
|
-
if target.include?('_spec.rb') then
|
16
|
-
targets1 << File.basename(target, '_spec.rb')
|
17
|
-
elsif target.include?('_list.txt') then
|
18
|
-
targets2 << File.basename(target, '_list.txt')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
targets1.each do |target|
|
23
|
-
desc "Test for #{target} deleted"
|
24
|
-
|
25
|
-
RSpec::Core::RakeTask.new(target.to_sym) do |t|
|
26
|
-
# t.rspec_opts = ["--format documentation", "--format html", "--out ./result_html/#{target}_result.html"]
|
27
|
-
t.rspec_opts = ["--format documentation", "--format html", "--out ./result_html/#{target}_result.html"]
|
28
|
-
t.pattern = "spec/#{target}_spec.rb"
|
29
|
-
t.verbose = true
|
30
|
-
end if target != 'ec2_snapshot'
|
31
|
-
end
|
32
|
-
|
33
|
-
targets2.each do |target|
|
34
|
-
desc "Test for #{target} deleted"
|
35
|
-
task target.to_sym do
|
36
|
-
log.info('Check that ' + target + ' has been deleted.')
|
37
|
-
resouces = []
|
38
|
-
File.open('./check/' + target + '_list.txt', "r") do |f|
|
39
|
-
f.each_line do |line|
|
40
|
-
resouces << line.chomp
|
41
|
-
end
|
42
|
-
end
|
43
|
-
eval "check_#{target}(resouces)"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def ec2_client
|
49
|
-
@ec2_client ||= Aws::EC2::Client.new
|
50
|
-
end
|
51
|
-
|
52
|
-
def rds_client
|
53
|
-
@rds_client ||= Aws::RDS::Client.new
|
54
|
-
end
|
55
|
-
|
56
|
-
def hl
|
57
|
-
@hl ||= HighLine.new
|
58
|
-
end
|
59
|
-
|
60
|
-
def log
|
61
|
-
@log ||= Logger.new(STDOUT)
|
62
|
-
end
|
63
|
-
|
64
|
-
def ignore_resource?(resource)
|
65
|
-
if resource.include?('ignore|')
|
66
|
-
r = resource.split('|').last
|
67
|
-
log.info('[ ' + hl.color("!", :yellow) + ' ] ' + r + ' is not for deletion.')
|
68
|
-
not_deleted = '[ ' + hl.color("\u2714".encode('utf-8'), :green) + ' ] ' + r + ' exists.'
|
69
|
-
deleted = '[ ' + hl.color("\u2715".encode('utf-8'), :red) + ' ] ' + r + ' has been removed.'
|
70
|
-
else
|
71
|
-
r = resource
|
72
|
-
deleted = '[ ' + hl.color("\u2714".encode('utf-8'), :green) + ' ] ' + r + ' has been removed..'
|
73
|
-
not_deleted = '[ ' + hl.color("\u2715".encode('utf-8'), :red) + ' ] ' + r + ' exists.'
|
74
|
-
end
|
75
|
-
return r, deleted, not_deleted
|
76
|
-
end
|
77
|
-
|
78
|
-
def check_ec2_snapshots(resouces)
|
79
|
-
resouces.each do |resouce|
|
80
|
-
r, deleted, not_deleted = ignore_resource?(resouce)
|
81
|
-
begin
|
82
|
-
ec2_client.describe_snapshots({ snapshot_ids: [ r ] })
|
83
|
-
log.info(not_deleted)
|
84
|
-
rescue
|
85
|
-
log.info(deleted)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def check_ec2_eips(resouces)
|
91
|
-
resouces.each do |resouce|
|
92
|
-
r, deleted, not_deleted = ignore_resource?(resouce)
|
93
|
-
res = ec2_client.describe_addresses({ filters: [{ name: 'public-ip', values: [r] }] })
|
94
|
-
if res.addresses.empty?
|
95
|
-
log.info(deleted)
|
96
|
-
else
|
97
|
-
log.info(not_deleted)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def check_db_snapshots(resouces)
|
103
|
-
resouces.each do |resouce|
|
104
|
-
r, deleted, not_deleted = ignore_resource?(resouce)
|
105
|
-
res = rds_client.describe_db_cluster_snapshots(db_cluster_snapshot_identifier: r)
|
106
|
-
if res.db_cluster_snapshots.empty?
|
107
|
-
log.info(deleted)
|
108
|
-
else
|
109
|
-
log.info(not_deleted)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/lib/seiton.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
1
|
+
require 'seiton/cli'
|
2
|
+
require 'seiton/client'
|
3
|
+
require 'seiton/common'
|
4
|
+
require 'seiton/ext'
|
5
|
+
require 'seiton/ec2_check'
|
6
|
+
require 'seiton/ec2'
|
7
|
+
require 'seiton/ignores'
|
8
|
+
require 'seiton/rds_check'
|
9
|
+
require 'seiton/rds'
|
10
|
+
require 'seiton/sqs_check'
|
11
|
+
require 'seiton/sqs'
|
12
|
+
require 'seiton/version'
|
12
13
|
|
13
14
|
module Seiton
|
14
15
|
# Your code goes here...
|
data/lib/seiton/cli.rb
CHANGED
@@ -16,72 +16,95 @@ module Seiton
|
|
16
16
|
puts Seiton::VERSION
|
17
17
|
end
|
18
18
|
|
19
|
+
desc 'init', 'Initialize seiton.'
|
20
|
+
def init
|
21
|
+
require 'seiton/init'
|
22
|
+
Seiton::Init.welcome
|
23
|
+
end
|
24
|
+
|
19
25
|
desc 'ami', 'Delete the EC2 AMI.'
|
20
26
|
option :before_datetime, type: :string, aliases: '-b', desc: 'Specify the date and time for deletion (delete resources before the specified date and time.)'
|
21
27
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
28
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
22
29
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
23
30
|
def ami
|
24
31
|
unless options[:before_datetime] then
|
25
32
|
puts '--before-datetime must be specified. (--before-datetime=YYYY/MM/DD)'
|
26
33
|
exit 1
|
27
34
|
end
|
35
|
+
|
36
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
28
37
|
seiton = Seiton::Ec2.new
|
29
|
-
seiton.ec2_image(options[:check], options[:before_datetime],
|
38
|
+
seiton.ec2_image(options[:check], options[:before_datetime], ignores)
|
30
39
|
end
|
31
40
|
|
32
41
|
desc 'ec2_snapshot', 'Delete the EC2 Snapshot.'
|
33
42
|
option :before_datetime, type: :string, aliases: '-b', desc: 'Specify the date and time for deletion (delete resources before the specified date and time.)'
|
34
43
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
44
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
35
45
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
36
46
|
def ec2_snapshot
|
37
47
|
unless options[:before_datetime] then
|
38
48
|
puts '--before-datetime must be specified. (--before-datetime=YYYY/MM/DD)'
|
39
49
|
exit 1
|
40
50
|
end
|
51
|
+
|
52
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
41
53
|
seiton = Seiton::Ec2.new
|
42
|
-
seiton.ec2_snapshots(options[:check],
|
54
|
+
seiton.ec2_snapshots(options[:check],
|
55
|
+
options[:before_datetime], ignores)
|
43
56
|
end
|
44
57
|
|
45
58
|
desc 'instance', 'Delete the EC2 Instance.'
|
46
59
|
option :before_datetime, type: :string, aliases: '-b', desc: 'Specify the date and time for deletion (delete resources before the specified date and time.)'
|
47
60
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
61
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
48
62
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
49
63
|
def instance
|
50
64
|
unless options[:before_datetime] then
|
51
65
|
puts '--before-datetime must be specified. (--before-datetime=YYYY/MM/DD)'
|
52
66
|
exit 1
|
53
67
|
end
|
68
|
+
|
69
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
54
70
|
seiton = Seiton::Ec2.new
|
55
|
-
seiton.ec2_instance(options[:check], options[:before_datetime],
|
71
|
+
seiton.ec2_instance(options[:check], options[:before_datetime], ignores)
|
56
72
|
end
|
57
73
|
|
58
74
|
desc 'rds_snapshot', 'Delete the RDS Snapshot.'
|
59
75
|
option :before_datetime, type: :string, aliases: '-b', desc: 'Specify the date and time for deletion (delete resources before the specified date and time.)'
|
60
76
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
77
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
61
78
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
62
79
|
def rds_snapshot
|
63
80
|
unless options[:before_datetime] then
|
64
81
|
puts '--before-datetime must be specified. (--before-datetime=YYYY/MM/DD)'
|
65
82
|
exit 1
|
66
83
|
end
|
84
|
+
|
85
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
67
86
|
seiton = Seiton::Rds.new
|
68
|
-
seiton.rds_snapshot(options[:check], options[:before_datetime],
|
87
|
+
seiton.rds_snapshot(options[:check], options[:before_datetime], ignores)
|
69
88
|
end
|
70
89
|
|
71
90
|
desc 'eip', 'Delete the Elastic IP.'
|
72
91
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
92
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
73
93
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
74
94
|
def eip
|
95
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
75
96
|
seiton = Seiton::Ec2.new
|
76
|
-
seiton.eip(options[:check],
|
97
|
+
seiton.eip(options[:check], ignores)
|
77
98
|
end
|
78
99
|
|
79
100
|
desc 'sqs_queue', 'Delete the SQS Queue.'
|
80
101
|
option :ignores, type: :array, aliases: '-i', desc: 'Specify resources to be undeleted (you can specify multiple resources).'
|
102
|
+
option :ignores_file, type: :string, aliases: nil, desc: 'Specify file name for resources list to be undeleted.'
|
81
103
|
option :check, type: :boolean, aliases: '-c', desc: 'Check the resources to be deleted.'
|
82
104
|
def sqs_queue
|
105
|
+
ignores = Seiton::Ignores.new(options[:ignores_file], options[:ignores]).generate
|
83
106
|
seiton = Seiton::Sqs.new
|
84
|
-
seiton.sqs_queue(options[:check],
|
107
|
+
seiton.sqs_queue(options[:check], ignores)
|
85
108
|
end
|
86
109
|
|
87
110
|
end
|
data/lib/seiton/common.rb
CHANGED
@@ -38,5 +38,25 @@ module Seiton
|
|
38
38
|
end
|
39
39
|
volume_ids
|
40
40
|
end
|
41
|
+
|
42
|
+
def ignores(ignores_file, ignore_list)
|
43
|
+
ignores = nil
|
44
|
+
begin
|
45
|
+
File.open(ignores_file) do |file|
|
46
|
+
file.read.split("\n").each do |ignore|
|
47
|
+
ignores << ignore
|
48
|
+
end
|
49
|
+
end
|
50
|
+
rescue SystemCallError => e
|
51
|
+
puts e.message
|
52
|
+
exit 1
|
53
|
+
rescue IOError => e
|
54
|
+
puts e.message
|
55
|
+
exit 1
|
56
|
+
end unless ignore_file.nil?
|
57
|
+
ignores.concat(ignore_list) unless ignore_list.nil?
|
58
|
+
|
59
|
+
ignores
|
60
|
+
end
|
41
61
|
end
|
42
62
|
end
|
data/lib/seiton/ec2_check.rb
CHANGED
@@ -17,7 +17,8 @@ end
|
|
17
17
|
<%- end -%>
|
18
18
|
<% end %>
|
19
19
|
EOF
|
20
|
-
|
20
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
21
|
+
File.open("check/" + "ec2_instance_spec.rb", "w") do |file|
|
21
22
|
file.puts "require 'spec_helper'"
|
22
23
|
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
23
24
|
end
|
@@ -31,7 +32,8 @@ describe ebs("<%= resource.volume_id %>") do
|
|
31
32
|
end
|
32
33
|
<% end %>
|
33
34
|
EOF
|
34
|
-
|
35
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
36
|
+
File.open("check/" + "ec2_volumes_spec.rb", "w") do |file|
|
35
37
|
file.puts "require 'spec_helper'"
|
36
38
|
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
37
39
|
end
|
@@ -54,7 +56,8 @@ end
|
|
54
56
|
<%- end -%>
|
55
57
|
<% end %>
|
56
58
|
EOF
|
57
|
-
|
59
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
60
|
+
File.open("check/" + "ec2_images_spec.rb", "w") do |file|
|
58
61
|
file.puts "require 'spec_helper'"
|
59
62
|
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
60
63
|
end
|
@@ -89,7 +92,8 @@ end
|
|
89
92
|
<%- end -%>
|
90
93
|
<% end %>
|
91
94
|
EOF
|
92
|
-
|
95
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
96
|
+
File.open("check/" + "ec2_eips_spec.rb", "w") do |file|
|
93
97
|
file.puts "require 'spec_helper'"
|
94
98
|
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
95
99
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Seiton
|
2
|
+
module Ignores
|
3
|
+
def initialize(ignores_file, ignores_list)
|
4
|
+
@file = ignores_file
|
5
|
+
@list = inogres_list
|
6
|
+
end
|
7
|
+
|
8
|
+
def generate
|
9
|
+
ignores = nil
|
10
|
+
begin
|
11
|
+
File.open(@file) do |file|
|
12
|
+
file.read.split("\n").each do |ignore|
|
13
|
+
ignores << ignore
|
14
|
+
end
|
15
|
+
end
|
16
|
+
rescue SystemCallError => e
|
17
|
+
puts e.message
|
18
|
+
exit 1
|
19
|
+
rescue IOError => e
|
20
|
+
puts e.message
|
21
|
+
exit 1
|
22
|
+
end unless @file.nil?
|
23
|
+
|
24
|
+
ignores.concat(@list) unless @list.nil?
|
25
|
+
|
26
|
+
ignores
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/seiton/init.rb
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
module Seiton
|
2
|
+
class Init
|
3
|
+
def self.welcome
|
4
|
+
puts 'Welcome to seiton (整頓) !!'
|
5
|
+
create_directory
|
6
|
+
write_rakefile
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.create_directory
|
10
|
+
puts 'Create check directory...'
|
11
|
+
FileUtils.mkdir_p('check') unless FileTest.exist?('check')
|
12
|
+
spec_helper = <<~SPEC_HELPER
|
13
|
+
require 'awspec'
|
14
|
+
Awsecrets.load(secrets_path: File.expand_path('./secrets.yml', File.dirname(__FILE__)))
|
15
|
+
SPEC_HELPER
|
16
|
+
|
17
|
+
File.open('check/spec_helper.rb', 'w') do |f|
|
18
|
+
f.puts(spec_helper)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.write_rakefile
|
23
|
+
puts 'Write Rakefile...'
|
24
|
+
rakefile = <<~RAKE_FILE
|
25
|
+
require 'rspec/core/rake_task'
|
26
|
+
require 'bundler/gem_tasks'
|
27
|
+
require 'aws-sdk'
|
28
|
+
require 'highline'
|
29
|
+
require 'logger'
|
30
|
+
|
31
|
+
RSpec::Core::RakeTask.new('spec')
|
32
|
+
task :default => :spec
|
33
|
+
|
34
|
+
namespace :check do
|
35
|
+
targets1 = []
|
36
|
+
targets2 = []
|
37
|
+
Dir.glob(['./spec/*', './check/*']).each do |file|
|
38
|
+
target = File.basename(file)
|
39
|
+
if target.include?('_spec.rb') then
|
40
|
+
targets1 << File.basename(target, '_spec.rb')
|
41
|
+
elsif target.include?('_list.txt') then
|
42
|
+
targets2 << File.basename(target, '_list.txt')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
targets1.each do |target|
|
47
|
+
desc "Test for \#{target} deleted"
|
48
|
+
|
49
|
+
RSpec::Core::RakeTask.new(target.to_sym) do |t|
|
50
|
+
# t.rspec_opts = ["--format documentation", "--format html", "--out ./result_html/\#{target}_result.html"]
|
51
|
+
t.rspec_opts = ["--format documentation", "--format html", "--out ./result_html/\#{target}_result.html"]
|
52
|
+
t.pattern = "spec/\#{target}_spec.rb"
|
53
|
+
t.verbose = true
|
54
|
+
end if target != 'ec2_snapshot'
|
55
|
+
end
|
56
|
+
|
57
|
+
targets2.each do |target|
|
58
|
+
desc "Test for \#{target} deleted"
|
59
|
+
task target.to_sym do
|
60
|
+
log.info('Check that ' + target + ' has been deleted.')
|
61
|
+
resouces = []
|
62
|
+
File.open('./check/' + target + '_list.txt', "r") do |f|
|
63
|
+
f.each_line do |line|
|
64
|
+
resouces << line.chomp
|
65
|
+
end
|
66
|
+
end
|
67
|
+
eval "check_\#{target}(resouces)"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def ec2_client
|
73
|
+
@ec2_client ||= Aws::EC2::Client.new
|
74
|
+
end
|
75
|
+
|
76
|
+
def rds_client
|
77
|
+
@rds_client ||= Aws::RDS::Client.new
|
78
|
+
end
|
79
|
+
|
80
|
+
def hl
|
81
|
+
@hl ||= HighLine.new
|
82
|
+
end
|
83
|
+
|
84
|
+
def log
|
85
|
+
@log ||= Logger.new(STDOUT)
|
86
|
+
end
|
87
|
+
|
88
|
+
def ignore_resource?(resource)
|
89
|
+
if resource.include?('ignore|')
|
90
|
+
r = resource.split('|').last
|
91
|
+
log.info('[ ' + hl.color("!", :yellow) + ' ] ' + r + ' is not for deletion.')
|
92
|
+
not_deleted = '[ ' + hl.color("\\u2714".encode('utf-8'), :green) + ' ] ' + r + ' exists.'
|
93
|
+
deleted = '[ ' + hl.color("\\u2715".encode('utf-8'), :red) + ' ] ' + r + ' has been removed.'
|
94
|
+
else
|
95
|
+
r = resource
|
96
|
+
deleted = '[ ' + hl.color("\\u2714".encode('utf-8'), :green) + ' ] ' + r + ' has been removed..'
|
97
|
+
not_deleted = '[ ' + hl.color("\\u2715".encode('utf-8'), :red) + ' ] ' + r + ' exists.'
|
98
|
+
end
|
99
|
+
return r, deleted, not_deleted
|
100
|
+
end
|
101
|
+
|
102
|
+
def check_ec2_snapshots(resouces)
|
103
|
+
resouces.each do |resouce|
|
104
|
+
r, deleted, not_deleted = ignore_resource?(resouce)
|
105
|
+
begin
|
106
|
+
ec2_client.describe_snapshots({ snapshot_ids: [ r ] })
|
107
|
+
log.info(not_deleted)
|
108
|
+
rescue
|
109
|
+
log.info(deleted)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def check_ec2_eips(resouces)
|
115
|
+
resouces.each do |resouce|
|
116
|
+
r, deleted, not_deleted = ignore_resource?(resouce)
|
117
|
+
res = ec2_client.describe_addresses({ filters: [{ name: 'public-ip', values: [r] }] })
|
118
|
+
if res.addresses.empty?
|
119
|
+
log.info(deleted)
|
120
|
+
else
|
121
|
+
log.info(not_deleted)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def check_db_snapshots(resouces)
|
127
|
+
resouces.each do |resouce|
|
128
|
+
r, deleted, not_deleted = ignore_resource?(resouce)
|
129
|
+
res = rds_client.describe_db_cluster_snapshots(db_cluster_snapshot_identifier: r)
|
130
|
+
if res.db_cluster_snapshots.empty?
|
131
|
+
log.info(deleted)
|
132
|
+
else
|
133
|
+
log.info(not_deleted)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
RAKE_FILE
|
138
|
+
|
139
|
+
File.open('Rakefile', 'w') do |f|
|
140
|
+
f.puts(rakefile)
|
141
|
+
end unless FileTest.exist?('Rakefile')
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
data/lib/seiton/sqs_check.rb
CHANGED
@@ -17,7 +17,8 @@ end
|
|
17
17
|
<%- end -%>
|
18
18
|
<% end %>
|
19
19
|
EOF
|
20
|
-
|
20
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
21
|
+
File.open("check/" + "sqs_queue_spec.rb", "w") do |file|
|
21
22
|
file.puts "require 'spec_helper'"
|
22
23
|
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
23
24
|
end
|
data/lib/seiton/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seiton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- inokappa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -130,6 +130,8 @@ files:
|
|
130
130
|
- lib/seiton/ec2.rb
|
131
131
|
- lib/seiton/ec2_check.rb
|
132
132
|
- lib/seiton/ext.rb
|
133
|
+
- lib/seiton/ignores.rb
|
134
|
+
- lib/seiton/init.rb
|
133
135
|
- lib/seiton/rds.rb
|
134
136
|
- lib/seiton/rds_check.rb
|
135
137
|
- lib/seiton/sqs.rb
|