dh-proteus 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/dh-proteus.gemspec +0 -3
- data/lib/proteus/app.rb +31 -0
- data/lib/proteus/commands/state/list.rb +25 -0
- data/lib/proteus/commands/state/move.rb +28 -0
- data/lib/proteus/commands/state/remove.rb +71 -0
- data/lib/proteus/commands/state/show.rb +25 -0
- data/lib/proteus/commands/taint.rb +0 -2
- data/lib/proteus/common.rb +9 -6
- data/lib/proteus/config/config.rb +6 -0
- data/lib/proteus/version.rb +1 -1
- metadata +6 -46
- data/lib/proteus/commands/move.rb +0 -28
- data/lib/proteus/commands/remove.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9166f710a73dd5e425c1c57678b074953e822f18373115dab83c2bb69c1a4e1
|
4
|
+
data.tar.gz: 536e2c89ea79aeb66cd751d280905bdad818d0f3dde221d8b6a8ed3714a1f16d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: addf02fb05acde3f7fbe087fb969725ea07ff5aa191ddb3a3025dbaf8b8abb6ead4b9a0639151698ae74f758ec05da7777f9d838c4361be933ff18e0fb2a2288
|
7
|
+
data.tar.gz: 0fc89209ad85a76df1010b7842b9a6ff427b9171b3e888ad5ff5cb2a4533d755f4d2070a7f6599af991ac20c5dfb9b056d8f1f135818dbfa0a4e655aa0c686ad
|
data/dh-proteus.gemspec
CHANGED
@@ -43,7 +43,4 @@ Gem::Specification.new do |spec|
|
|
43
43
|
spec.add_runtime_dependency 'activesupport', '~> 5.1.1'
|
44
44
|
spec.add_runtime_dependency 'thor', '~> 0.20.0'
|
45
45
|
spec.add_runtime_dependency 'erubis', '~> 2.7.0'
|
46
|
-
spec.add_runtime_dependency 'aws-sdk-rds', '~> 1.11.0'
|
47
|
-
spec.add_runtime_dependency 'aws-sdk-route53', '~> 1.7.0'
|
48
|
-
spec.add_runtime_dependency 'aws-sdk-elasticsearchservice', '~> 1.4.0'
|
49
46
|
end
|
data/lib/proteus/app.rb
CHANGED
@@ -7,6 +7,10 @@ require 'proteus/context_management/context'
|
|
7
7
|
require 'proteus/context_management/helpers'
|
8
8
|
require 'proteus/templates/template_binding'
|
9
9
|
require 'proteus/templates/partial'
|
10
|
+
require 'proteus/commands/state/list'
|
11
|
+
require 'proteus/commands/state/move'
|
12
|
+
require 'proteus/commands/state/remove'
|
13
|
+
require 'proteus/commands/state/show'
|
10
14
|
|
11
15
|
module Proteus
|
12
16
|
|
@@ -56,6 +60,33 @@ module Proteus
|
|
56
60
|
def self.environment
|
57
61
|
@environment
|
58
62
|
end
|
63
|
+
|
64
|
+
state_class = Class.new(Proteus::Common)
|
65
|
+
state_class_name = "#{class_name}State"
|
66
|
+
mod_name.const_set(state_class_name, state_class)
|
67
|
+
|
68
|
+
state_class.class_eval do
|
69
|
+
include Config
|
70
|
+
include Helpers
|
71
|
+
include Proteus::Helpers::PathHelpers
|
72
|
+
include Proteus::Commands::StateCommands::List
|
73
|
+
include Proteus::Commands::StateCommands::Move
|
74
|
+
include Proteus::Commands::StateCommands::Remove
|
75
|
+
include Proteus::Commands::StateCommands::Show
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
define_method :context do
|
80
|
+
context.name
|
81
|
+
end
|
82
|
+
|
83
|
+
define_method :environment do
|
84
|
+
environment
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
desc 'state', 'This command has subcommands for advanced state management.'
|
89
|
+
subcommand('state', state_class)
|
59
90
|
end
|
60
91
|
|
61
92
|
if context.name == 'default'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Proteus
|
2
|
+
module Commands
|
3
|
+
module StateCommands
|
4
|
+
module List
|
5
|
+
def self.included(thor_class)
|
6
|
+
thor_class.class_eval do
|
7
|
+
|
8
|
+
desc "list", "List resources in the state"
|
9
|
+
def list
|
10
|
+
list_cmd = <<~LIST_CMD
|
11
|
+
cd #{context_path(context)} && \
|
12
|
+
terraform state list
|
13
|
+
LIST_CMD
|
14
|
+
|
15
|
+
init(verbose: parent_options[:verbose])
|
16
|
+
|
17
|
+
syscall list_cmd.squeeze(' ')
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Proteus
|
2
|
+
module Commands
|
3
|
+
module StateCommands
|
4
|
+
module Move
|
5
|
+
def self.included(thor_class)
|
6
|
+
thor_class.class_eval do
|
7
|
+
|
8
|
+
desc "move FROM TO", "Moves an existing resource within the Terraform state"
|
9
|
+
def move(from, to)
|
10
|
+
init(verbose: parent_options[:verbose])
|
11
|
+
confirm question: "Do you really want to move #{from} to #{to} in context '(#{context}, #{environment})'?", color: :on_red, exit_code: 0 do
|
12
|
+
|
13
|
+
state_move_command = <<~STATE_MOVE_COMMAND
|
14
|
+
cd #{context_path(context)} && \
|
15
|
+
terraform state mv \
|
16
|
+
#{from} \
|
17
|
+
#{to}
|
18
|
+
STATE_MOVE_COMMAND
|
19
|
+
syscall state_move_command.squeeze(' '), dryrun: dryrun
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Proteus
|
2
|
+
module Commands
|
3
|
+
module StateCommands
|
4
|
+
module Remove
|
5
|
+
def self.included(thor_class)
|
6
|
+
thor_class.class_eval do
|
7
|
+
|
8
|
+
desc "remove", "Remove a resource from the terraform state"
|
9
|
+
long_desc <<-LONGDESC
|
10
|
+
Remove a resource from the terraform state
|
11
|
+
--bulk Enables bulk import mode
|
12
|
+
|
13
|
+
--resource_address Terraform address of resource to remove from the terraform state
|
14
|
+
|
15
|
+
--resources_file File containing resource addresses and identifiers
|
16
|
+
LONGDESC
|
17
|
+
option :bulk, type: :boolean, aliases: "-b", required: false, default: false
|
18
|
+
option :resource_address, type: :string, aliases: "-a", required: false, default: nil
|
19
|
+
option :resources_file, type: :string, aliases: "-f", required: false, default: nil
|
20
|
+
def remove
|
21
|
+
if options[:bulk]
|
22
|
+
if !options[:resources_file]
|
23
|
+
say "Supply a file containing resource identifiers and Terraform addresses for bulk operations", :red
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
else
|
27
|
+
if !options[:resource_address]
|
28
|
+
say "You need to supply a resource address.", :red
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
init(verbose: parent_options[:verbose])
|
34
|
+
|
35
|
+
confirm question: "Do you really want to run 'terraform state rm' in context '(#{context}, #{environment})'?", color: :on_red, exit_code: 0 do
|
36
|
+
state_remove_command = <<~STATE_REMOVE_COMMAND
|
37
|
+
cd #{context_path(context)} && \
|
38
|
+
terraform state rm \
|
39
|
+
%{resource_addresses}
|
40
|
+
STATE_REMOVE_COMMAND
|
41
|
+
|
42
|
+
if options[:bulk]
|
43
|
+
if File.file?(options[:resources_file])
|
44
|
+
File.open(options[:resources_file], "r") do |file|
|
45
|
+
resource_addresses = []
|
46
|
+
file.each_line do |line|
|
47
|
+
resource = line.chomp.split(" = ")
|
48
|
+
resource_addresses << resource[0]
|
49
|
+
end
|
50
|
+
|
51
|
+
resource_addresses.each_slice(500) do |slice|
|
52
|
+
syscall (state_remove_command % { resource_addresses: slice.join(' ') }).squeeze(' ')
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
else
|
57
|
+
say "File #{options[:resources_file]} does not exist.", :red
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
else
|
61
|
+
syscall (state_remove_command % { resource_addresses: options[:resource_address] })
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Proteus
|
2
|
+
module Commands
|
3
|
+
module StateCommands
|
4
|
+
module Show
|
5
|
+
def self.included(thor_class)
|
6
|
+
thor_class.class_eval do
|
7
|
+
|
8
|
+
desc "show", "Show a resource in the state"
|
9
|
+
def show(resource)
|
10
|
+
list_cmd = <<~LIST_CMD
|
11
|
+
cd #{context_path(context)} && \
|
12
|
+
terraform state show #{resource}
|
13
|
+
LIST_CMD
|
14
|
+
|
15
|
+
init(verbose: parent_options[:verbose])
|
16
|
+
|
17
|
+
syscall list_cmd.squeeze(' ')
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -11,7 +11,6 @@ module Proteus
|
|
11
11
|
--resource The resource to taint
|
12
12
|
LONGDESC
|
13
13
|
option :resource, type: :string, aliases: "-r", required: true
|
14
|
-
option :module, type: :string, aliases: "-m", required: false, default: nil
|
15
14
|
def taint
|
16
15
|
init(verbose: parent_options[:verbose])
|
17
16
|
confirm question: "Do you really want to run 'terraform taint' on environment '#{environment}' in context '#{context}'?", color: :on_red, exit_code: 0 do
|
@@ -19,7 +18,6 @@ module Proteus
|
|
19
18
|
taint_command = <<~TAINT_COMMAND
|
20
19
|
cd #{context_path(context)} && \
|
21
20
|
terraform taint \
|
22
|
-
#{options[:module] ? "-module=#{options[:module]}" : ""} \
|
23
21
|
#{options[:resource]}
|
24
22
|
TAINT_COMMAND
|
25
23
|
syscall taint_command.squeeze(' ')
|
data/lib/proteus/common.rb
CHANGED
@@ -3,10 +3,8 @@ require 'proteus/commands/clean'
|
|
3
3
|
require 'proteus/commands/destroy'
|
4
4
|
require 'proteus/commands/graph'
|
5
5
|
require 'proteus/commands/import'
|
6
|
-
require 'proteus/commands/move'
|
7
6
|
require 'proteus/commands/output'
|
8
7
|
require 'proteus/commands/plan'
|
9
|
-
require 'proteus/commands/remove'
|
10
8
|
require 'proteus/commands/render'
|
11
9
|
require 'proteus/commands/taint'
|
12
10
|
|
@@ -16,7 +14,9 @@ module Proteus
|
|
16
14
|
include Proteus::Helpers::PathHelpers
|
17
15
|
|
18
16
|
Proteus::Commands.constants.each do |command|
|
19
|
-
|
17
|
+
unless command == :State
|
18
|
+
include const_get("Proteus::Commands::#{command}")
|
19
|
+
end
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
@@ -56,10 +56,13 @@ module Proteus
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def aws_profile
|
59
|
-
config[:providers].select {|p| p[:name] == 'aws' }.first[:environments].each do |
|
60
|
-
|
59
|
+
config[:providers].select {|p| p[:name] == 'aws' }.first[:environments].each do |env|
|
60
|
+
env[:match].each do |m|
|
61
|
+
return "-var 'aws_profile=#{env[:profile]}'" if environment == m
|
62
|
+
end
|
61
63
|
end
|
62
|
-
|
64
|
+
|
65
|
+
raise "No AWS profile found in config."
|
63
66
|
end
|
64
67
|
|
65
68
|
def dryrun
|
data/lib/proteus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dh-proteus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Albrecht
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,48 +108,6 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 2.7.0
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: aws-sdk-rds
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 1.11.0
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 1.11.0
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: aws-sdk-route53
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 1.7.0
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: 1.7.0
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: aws-sdk-elasticsearchservice
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 1.4.0
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 1.4.0
|
153
111
|
description:
|
154
112
|
email:
|
155
113
|
- simon.albrecht@deliveryhero.com
|
@@ -179,11 +137,13 @@ files:
|
|
179
137
|
- lib/proteus/commands/destroy.rb
|
180
138
|
- lib/proteus/commands/graph.rb
|
181
139
|
- lib/proteus/commands/import.rb
|
182
|
-
- lib/proteus/commands/move.rb
|
183
140
|
- lib/proteus/commands/output.rb
|
184
141
|
- lib/proteus/commands/plan.rb
|
185
|
-
- lib/proteus/commands/remove.rb
|
186
142
|
- lib/proteus/commands/render.rb
|
143
|
+
- lib/proteus/commands/state/list.rb
|
144
|
+
- lib/proteus/commands/state/move.rb
|
145
|
+
- lib/proteus/commands/state/remove.rb
|
146
|
+
- lib/proteus/commands/state/show.rb
|
187
147
|
- lib/proteus/commands/taint.rb
|
188
148
|
- lib/proteus/common.rb
|
189
149
|
- lib/proteus/config/config.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Proteus
|
2
|
-
module Commands
|
3
|
-
module Move
|
4
|
-
def self.included(thor_class)
|
5
|
-
thor_class.class_eval do
|
6
|
-
|
7
|
-
desc "move FROM TO", "Moves an existing resource within the Terraform state"
|
8
|
-
def move(from, to)
|
9
|
-
init(verbose: parent_options[:verbose])
|
10
|
-
confirm question: "Do you really want to move #{from} to #{to} in context '(#{context}, #{environment})'?", color: :on_red, exit_code: 0 do
|
11
|
-
|
12
|
-
state_move_command = <<~STATE_MOVE_COMMAND
|
13
|
-
cd #{context_path(context)} && \
|
14
|
-
terraform state mv \
|
15
|
-
-var-file=#{var_file(context, environment)} \
|
16
|
-
#{aws_profile} \
|
17
|
-
#{from} \
|
18
|
-
#{to}
|
19
|
-
STATE_MOVE_COMMAND
|
20
|
-
syscall state_move_command.squeeze(' '), dryrun: dryrun
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
module Proteus
|
2
|
-
module Commands
|
3
|
-
module Remove
|
4
|
-
def self.included(thor_class)
|
5
|
-
thor_class.class_eval do
|
6
|
-
|
7
|
-
desc "remove", "Remove a resource from the terraform state"
|
8
|
-
long_desc <<-LONGDESC
|
9
|
-
Remove a resource from the terraform state
|
10
|
-
--bulk Enables bulk import mode
|
11
|
-
|
12
|
-
--resource_address Terraform address of resource to remove from the terraform state
|
13
|
-
|
14
|
-
--resources_file File containing resource addresses and identifiers
|
15
|
-
LONGDESC
|
16
|
-
option :bulk, type: :boolean, aliases: "-b", required: false, default: false
|
17
|
-
option :resource_address, type: :string, aliases: "-a", required: false, default: nil
|
18
|
-
option :resources_file, type: :string, aliases: "-f", required: false, default: nil
|
19
|
-
def remove
|
20
|
-
if options[:bulk]
|
21
|
-
if !options[:resources_file]
|
22
|
-
say "Supply a file containing resource identifiers and Terraform addresses for bulk operations", :red
|
23
|
-
exit 1
|
24
|
-
end
|
25
|
-
else
|
26
|
-
if !options[:resource_address]
|
27
|
-
say "You need to supply a resource address.", :red
|
28
|
-
exit 1
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
init(verbose: parent_options[:verbose])
|
33
|
-
|
34
|
-
confirm question: "Do you really want to run 'terraform state rm' in context '(#{context}, #{environment})'?", color: :on_red, exit_code: 0 do
|
35
|
-
state_remove_command = <<~STATE_REMOVE_COMMAND
|
36
|
-
cd #{context_path(context)} && \
|
37
|
-
terraform state rm \
|
38
|
-
%{resource_addresses}
|
39
|
-
STATE_REMOVE_COMMAND
|
40
|
-
|
41
|
-
if options[:bulk]
|
42
|
-
if File.file?(options[:resources_file])
|
43
|
-
File.open(options[:resources_file], "r") do |file|
|
44
|
-
resource_addresses = []
|
45
|
-
file.each_line do |line|
|
46
|
-
resource = line.chomp.split(" = ")
|
47
|
-
resource_addresses << resource[0]
|
48
|
-
end
|
49
|
-
|
50
|
-
resource_addresses.each_slice(500) do |slice|
|
51
|
-
syscall (state_remove_command % { resource_addresses: slice.join(' ') }).squeeze(' ')
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
else
|
56
|
-
say "File #{options[:resources_file]} does not exist.", :red
|
57
|
-
exit 1
|
58
|
-
end
|
59
|
-
else
|
60
|
-
syscall (state_remove_command % { resource_addresses: options[:resource_address] })
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|