seiton 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|