seiton 0.0.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 +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/README.md +295 -0
- data/Rakefile +112 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/seiton +5 -0
- data/lib/seiton.rb +15 -0
- data/lib/seiton/cli.rb +88 -0
- data/lib/seiton/client.rb +119 -0
- data/lib/seiton/common.rb +42 -0
- data/lib/seiton/ec2.rb +300 -0
- data/lib/seiton/ec2_check.rb +99 -0
- data/lib/seiton/ext.rb +7 -0
- data/lib/seiton/rds.rb +52 -0
- data/lib/seiton/rds_check.rb +20 -0
- data/lib/seiton/sqs.rb +54 -0
- data/lib/seiton/sqs_check.rb +26 -0
- data/lib/seiton/version.rb +3 -0
- data/seiton.gemspec +30 -0
- metadata +161 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
module Seiton
|
2
|
+
module Ec2Check
|
3
|
+
def generator_ec2_instances_check(delete_resources, ignore_resources = nil)
|
4
|
+
template = <<-'EOF'
|
5
|
+
<% delete_resources.each do |resource| %>
|
6
|
+
describe ec2("<%= resource.instance_id %>") do
|
7
|
+
it { should_not exist }
|
8
|
+
end
|
9
|
+
<%- end -%>
|
10
|
+
<% if ignore_resources %>
|
11
|
+
<% ignore_resources.each do |resource| %>
|
12
|
+
describe 'Do not delete this resource ( <%= resource.instance_id %> ).' do
|
13
|
+
describe ec2("<%= resource.instance_id %>") do
|
14
|
+
it { should exist }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
<%- end -%>
|
18
|
+
<% end %>
|
19
|
+
EOF
|
20
|
+
File.open("spec/" + "ec2_instance_spec.rb", "w") do |file|
|
21
|
+
file.puts "require 'spec_helper'"
|
22
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def generator_ec2_volumes_check(delete_resources)
|
27
|
+
template = <<-'EOF'
|
28
|
+
<% delete_resources.each do |resource| %>
|
29
|
+
describe ebs("<%= resource.volume_id %>") do
|
30
|
+
it { should_not exist }
|
31
|
+
end
|
32
|
+
<% end %>
|
33
|
+
EOF
|
34
|
+
File.open("spec/" + "ec2_volumes_spec.rb", "w") do |file|
|
35
|
+
file.puts "require 'spec_helper'"
|
36
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def generator_ec2_images_check(delete_resources, ignore_resources = nil)
|
41
|
+
template = <<-'EOF'
|
42
|
+
<% delete_resources.each do |resource| %>
|
43
|
+
describe ami("<%= resource.image_id %>") do
|
44
|
+
it { should_not exist }
|
45
|
+
end
|
46
|
+
<%- end -%>
|
47
|
+
<% if ignore_resources %>
|
48
|
+
<% ignore_resources.each do |resource| %>
|
49
|
+
describe 'Do not delete this resource ( <%= resource.name %> ).' do
|
50
|
+
describe ami("<%= resource.image_id %>") do
|
51
|
+
it { should exist }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
<%- end -%>
|
55
|
+
<% end %>
|
56
|
+
EOF
|
57
|
+
File.open("spec/" + "ec2_images_spec.rb", "w") do |file|
|
58
|
+
file.puts "require 'spec_helper'"
|
59
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def generator_ec2_snapshots_check(delete_resources)
|
64
|
+
template = <<-'EOF'
|
65
|
+
<% delete_resources.each do |resource| %>
|
66
|
+
<%= resource.snapshot_id %>
|
67
|
+
<% end %>
|
68
|
+
EOF
|
69
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
70
|
+
File.open("check/" + "ec2_snapshots_list.txt", "w") do |file|
|
71
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def generator_ec2_eips_check(delete_resources, ignore_resources = nil)
|
76
|
+
template = <<-'EOF'
|
77
|
+
<% delete_resources.each do |resource| %>
|
78
|
+
describe eip("<%= resource.public_ip %>") do
|
79
|
+
it { should_not exist }
|
80
|
+
end
|
81
|
+
<% end %>
|
82
|
+
<% if ignore_resources %>
|
83
|
+
<% ignore_resources.each do |resource| %>
|
84
|
+
describe 'Do not delete this resource ( <%= resource %> ).' do
|
85
|
+
describe eip("<%= resource %>") do
|
86
|
+
it { should exist }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
<%- end -%>
|
90
|
+
<% end %>
|
91
|
+
EOF
|
92
|
+
File.open("spec/" + "ec2_eips_spec.rb", "w") do |file|
|
93
|
+
file.puts "require 'spec_helper'"
|
94
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
data/lib/seiton/ext.rb
ADDED
data/lib/seiton/rds.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Seiton
|
2
|
+
class Rds < Client
|
3
|
+
|
4
|
+
include Seiton::Helper
|
5
|
+
include Seiton::RdsCheck
|
6
|
+
|
7
|
+
def rds_snapshot(check = false, dt, ignores)
|
8
|
+
if check
|
9
|
+
log.info('List up the resources to be removed.')
|
10
|
+
else
|
11
|
+
log.info('Start deleting.')
|
12
|
+
end
|
13
|
+
res = rds_client.describe_db_cluster_snapshots({})
|
14
|
+
delete_db_snapshots = []
|
15
|
+
res.db_cluster_snapshots.each do |delete_db_snapshot|
|
16
|
+
if datetime_parse(delete_db_snapshot.snapshot_create_time.to_s) < datetime_parse(dt)
|
17
|
+
delete_db_snapshots << delete_db_snapshot
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
unless ignores.nil?
|
22
|
+
ignore_resouces = []
|
23
|
+
ignores.each do |ignore|
|
24
|
+
ignore_resouces << delete_db_snapshots.select { |delete_db_snapshot| delete_db_snapshot.db_cluster_snapshot_identifier == ignore }.last
|
25
|
+
delete_db_snapshots.delete_if { |delete_db_snapshot| delete_db_snapshot.db_cluster_snapshot_identifier == ignore }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if delete_db_snapshots.empty?
|
30
|
+
log.info('The resource to be deleted does not exist.')
|
31
|
+
exit 0
|
32
|
+
end
|
33
|
+
|
34
|
+
puts display_db_snapshot_resources(delete_db_snapshots)
|
35
|
+
generator_db_snapshots_check(delete_db_snapshots, ignore_resouces)
|
36
|
+
exit 0 if check
|
37
|
+
|
38
|
+
if process_ok?
|
39
|
+
begin
|
40
|
+
delete_db_snapshots.each do |delete_db_snapshot|
|
41
|
+
delete_db_snapshot_action(delete_db_snapshot.db_cluster_snapshot_identifier)
|
42
|
+
end
|
43
|
+
rescue StandardError => e
|
44
|
+
log.error(e)
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
else
|
48
|
+
exit 0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Seiton
|
2
|
+
module RdsCheck
|
3
|
+
def generator_db_snapshots_check(delete_resouces, ignore_resouces = nil)
|
4
|
+
template = <<-'EOF'
|
5
|
+
<% delete_resouces.each do |resouce| %>
|
6
|
+
<%= resouce.db_cluster_snapshot_identifier %>
|
7
|
+
<%- end -%>
|
8
|
+
<% if ignore_resouces %>
|
9
|
+
<% ignore_resouces.each do |resouce| %>
|
10
|
+
ignore|<%= resouce.db_cluster_snapshot_identifier %>
|
11
|
+
<%- end -%>
|
12
|
+
<% end %>
|
13
|
+
EOF
|
14
|
+
FileUtils.mkdir_p("check") unless FileTest.exist?("check")
|
15
|
+
File.open("check/" + "db_snapshots_list.txt", "w") do |file|
|
16
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/seiton/sqs.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Seiton
|
2
|
+
class Sqs < Client
|
3
|
+
|
4
|
+
include Seiton::Helper
|
5
|
+
include Seiton::SqsCheck
|
6
|
+
|
7
|
+
def sqs_queue(check = false, ignores)
|
8
|
+
if check
|
9
|
+
log.info('List up the resources to be removed.')
|
10
|
+
else
|
11
|
+
log.info('Start deleting.')
|
12
|
+
end
|
13
|
+
|
14
|
+
delete_resources = []
|
15
|
+
loop do
|
16
|
+
res = sqs_client.list_queues({})
|
17
|
+
res.queue_urls.each do |r|
|
18
|
+
delete_resources << r
|
19
|
+
end
|
20
|
+
break if res.next_token.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
unless ignores.nil?
|
24
|
+
ignore_resouces = []
|
25
|
+
ignores.each do |ignore|
|
26
|
+
ignore_resouces << delete_resources.select { |delete_resource| delete_resource.include?(ignore) }.last
|
27
|
+
delete_resources.delete_if { |delete_resource| delete_resource.include?(ignore) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
if delete_resources.empty?
|
32
|
+
log.info('The resource to be deleted does not exist.')
|
33
|
+
exit 0
|
34
|
+
end
|
35
|
+
|
36
|
+
puts display_sqs_queue_resources(delete_resources)
|
37
|
+
generator_sqs_queue_check(delete_resources, ignore_resouces)
|
38
|
+
exit 0 if check
|
39
|
+
|
40
|
+
if process_ok?
|
41
|
+
begin
|
42
|
+
delete_resources.each do |delete_resource|
|
43
|
+
delete_sqs_queue_action(delete_resource)
|
44
|
+
end
|
45
|
+
rescue StandardError => e
|
46
|
+
log.error(e)
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
else
|
50
|
+
exit 0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Seiton
|
2
|
+
module SqsCheck
|
3
|
+
def generator_sqs_queue_check(delete_resouces, ignore_resources = nil)
|
4
|
+
template = <<-'EOF'
|
5
|
+
<% delete_resouces.each do |resource| %>
|
6
|
+
describe sqs("<%= resource.queue_name %>") do
|
7
|
+
it { should_not exist }
|
8
|
+
end
|
9
|
+
<%- end -%>
|
10
|
+
<% if ignore_resources %>
|
11
|
+
<% ignore_resources.each do |resource| %>
|
12
|
+
describe 'Do not delete this resource ( <%= resource.queue_name %> ).' do
|
13
|
+
describe sqs("<%= resource.queue_name %>") do
|
14
|
+
it { should exist }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
<%- end -%>
|
18
|
+
<% end %>
|
19
|
+
EOF
|
20
|
+
File.open("spec/" + "sqs_queue_spec.rb", "w") do |file|
|
21
|
+
file.puts "require 'spec_helper'"
|
22
|
+
file.puts ERB.new(template, nil, "-").result(binding).gsub(/^\n/, "")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/seiton.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'seiton/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "seiton"
|
8
|
+
spec.version = Seiton::VERSION
|
9
|
+
spec.authors = ["inokappa"]
|
10
|
+
spec.email = ["inokara@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{seiton is a command line tool that allows you to remove unused AWS resources.}
|
13
|
+
spec.description = %q{seiton is a command line tool that allows you to remove unused AWS resources.}
|
14
|
+
spec.homepage = "https://github.com/inokappa/seiton"
|
15
|
+
|
16
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
17
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|check)/}) }
|
18
|
+
end
|
19
|
+
spec.bindir = "exe"
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 2.1.4"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
spec.add_dependency 'thor'
|
26
|
+
spec.add_dependency 'aws-sdk'
|
27
|
+
spec.add_dependency 'terminal-table'
|
28
|
+
spec.add_dependency 'awspec'
|
29
|
+
spec.add_dependency 'highline'
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: seiton
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- inokappa
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.1.4
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.1.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: aws-sdk
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: terminal-table
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: awspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: highline
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: seiton is a command line tool that allows you to remove unused AWS resources.
|
112
|
+
email:
|
113
|
+
- inokara@gmail.com
|
114
|
+
executables:
|
115
|
+
- seiton
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- Gemfile
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- bin/console
|
124
|
+
- bin/setup
|
125
|
+
- exe/seiton
|
126
|
+
- lib/seiton.rb
|
127
|
+
- lib/seiton/cli.rb
|
128
|
+
- lib/seiton/client.rb
|
129
|
+
- lib/seiton/common.rb
|
130
|
+
- lib/seiton/ec2.rb
|
131
|
+
- lib/seiton/ec2_check.rb
|
132
|
+
- lib/seiton/ext.rb
|
133
|
+
- lib/seiton/rds.rb
|
134
|
+
- lib/seiton/rds_check.rb
|
135
|
+
- lib/seiton/sqs.rb
|
136
|
+
- lib/seiton/sqs_check.rb
|
137
|
+
- lib/seiton/version.rb
|
138
|
+
- seiton.gemspec
|
139
|
+
homepage: https://github.com/inokappa/seiton
|
140
|
+
licenses: []
|
141
|
+
metadata: {}
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
requirements: []
|
157
|
+
rubygems_version: 3.0.3
|
158
|
+
signing_key:
|
159
|
+
specification_version: 4
|
160
|
+
summary: seiton is a command line tool that allows you to remove unused AWS resources.
|
161
|
+
test_files: []
|