dh-proteus 0.3.0 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +10 -28
- data/dh-proteus.gemspec +1 -0
- data/lib/proteus/app.rb +5 -1
- data/lib/proteus/backend/backend.rb +45 -12
- data/lib/proteus/backend_info.rb +19 -0
- data/lib/proteus/commands/apply.rb +0 -4
- data/lib/proteus/common.rb +6 -12
- data/lib/proteus/config/config.rb +6 -4
- data/lib/proteus/global_commands/validate.rb +25 -0
- data/lib/proteus/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa12aa3c83be1ffe103180c3069d73f676b6ad4da32d9d283eeefdc3c14dcd85
|
4
|
+
data.tar.gz: '08b72501192990db34e12e3dd52be0001a708c559709a1e999da5557acf53a48'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4906493215ab3fc7ee3e3b871f05c83022eb36b388a3cb1cecd3d50a19d38cf794c83a7db1967870de103ee676ef61b82ba830bf06e924b7f1f8fa09378d234
|
7
|
+
data.tar.gz: 75200103d748eb3a4bf7150317d9e51cf08f0d820108ab69410010ffa0f3b126126967327f422ddabdd420fa49f6b6f81dcb897c499e4201d8bb6e6308dcdeb7
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dh-proteus (0.
|
4
|
+
dh-proteus (0.3.4)
|
5
5
|
activesupport (~> 5.1.1)
|
6
|
-
aws-sdk-elasticsearchservice (~> 1.4.0)
|
7
|
-
aws-sdk-rds (~> 1.11.0)
|
8
|
-
aws-sdk-route53 (~> 1.7.0)
|
9
6
|
erubis (~> 2.7.0)
|
7
|
+
terminal-table (~> 3.0.0)
|
10
8
|
thor (~> 0.20.0)
|
11
9
|
|
12
10
|
GEM
|
@@ -17,33 +15,14 @@ GEM
|
|
17
15
|
i18n (>= 0.7, < 2)
|
18
16
|
minitest (~> 5.1)
|
19
17
|
tzinfo (~> 1.1)
|
20
|
-
aws-eventstream (1.0.3)
|
21
|
-
aws-partitions (1.189.0)
|
22
|
-
aws-sdk-core (3.59.0)
|
23
|
-
aws-eventstream (~> 1.0, >= 1.0.2)
|
24
|
-
aws-partitions (~> 1.0)
|
25
|
-
aws-sigv4 (~> 1.1)
|
26
|
-
jmespath (~> 1.0)
|
27
|
-
aws-sdk-elasticsearchservice (1.4.0)
|
28
|
-
aws-sdk-core (~> 3)
|
29
|
-
aws-sigv4 (~> 1.0)
|
30
|
-
aws-sdk-rds (1.11.0)
|
31
|
-
aws-sdk-core (~> 3)
|
32
|
-
aws-sigv4 (~> 1.0)
|
33
|
-
aws-sdk-route53 (1.7.0)
|
34
|
-
aws-sdk-core (~> 3)
|
35
|
-
aws-sigv4 (~> 1.0)
|
36
|
-
aws-sigv4 (1.1.0)
|
37
|
-
aws-eventstream (~> 1.0, >= 1.0.2)
|
38
18
|
coderay (1.1.1)
|
39
|
-
concurrent-ruby (1.1.
|
19
|
+
concurrent-ruby (1.1.8)
|
40
20
|
diff-lcs (1.3)
|
41
21
|
erubis (2.7.0)
|
42
|
-
i18n (1.
|
22
|
+
i18n (1.8.9)
|
43
23
|
concurrent-ruby (~> 1.0)
|
44
|
-
jmespath (1.4.0)
|
45
24
|
method_source (0.8.2)
|
46
|
-
minitest (5.
|
25
|
+
minitest (5.14.4)
|
47
26
|
pry (0.10.4)
|
48
27
|
coderay (~> 1.1.0)
|
49
28
|
method_source (~> 0.8.1)
|
@@ -63,10 +42,13 @@ GEM
|
|
63
42
|
rspec-support (~> 3.8.0)
|
64
43
|
rspec-support (3.8.0)
|
65
44
|
slop (3.6.0)
|
45
|
+
terminal-table (3.0.0)
|
46
|
+
unicode-display_width (~> 1.1, >= 1.1.1)
|
66
47
|
thor (0.20.3)
|
67
48
|
thread_safe (0.3.6)
|
68
|
-
tzinfo (1.2.
|
49
|
+
tzinfo (1.2.9)
|
69
50
|
thread_safe (~> 0.1)
|
51
|
+
unicode-display_width (1.7.0)
|
70
52
|
|
71
53
|
PLATFORMS
|
72
54
|
ruby
|
@@ -79,4 +61,4 @@ DEPENDENCIES
|
|
79
61
|
rspec (~> 3.0)
|
80
62
|
|
81
63
|
BUNDLED WITH
|
82
|
-
2.
|
64
|
+
2.2.3
|
data/dh-proteus.gemspec
CHANGED
data/lib/proteus/app.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'proteus/common'
|
2
2
|
require 'proteus/generate'
|
3
3
|
require 'proteus/init'
|
4
|
+
require 'proteus/backend_info'
|
4
5
|
require 'proteus/global_commands/validate'
|
5
6
|
require 'proteus/global_commands/version'
|
6
7
|
require 'proteus/context_management/context'
|
@@ -22,7 +23,7 @@ module Proteus
|
|
22
23
|
extend Proteus::ContextManagement::Helpers
|
23
24
|
|
24
25
|
class_option :dryrun, type: :boolean, default: false, aliases: '-d'
|
25
|
-
class_option :verbose, type: :boolean, default:
|
26
|
+
class_option :verbose, type: :boolean, default: true, aliases: '-v'
|
26
27
|
|
27
28
|
contexts.each do |context|
|
28
29
|
|
@@ -113,6 +114,9 @@ module Proteus
|
|
113
114
|
desc 'init', 'Initializes a new proteus root directory in the current working directory'
|
114
115
|
subcommand('init', Proteus::Init)
|
115
116
|
|
117
|
+
desc 'backend_info', 'Shows information about backends'
|
118
|
+
subcommand('backend_info', Proteus::BackendInfo)
|
119
|
+
|
116
120
|
include Proteus::GlobalCommands::Validate
|
117
121
|
include Proteus::GlobalCommands::Version
|
118
122
|
end
|
@@ -13,17 +13,7 @@ module Proteus
|
|
13
13
|
@context = context
|
14
14
|
@environment = environment
|
15
15
|
|
16
|
-
|
17
|
-
provider[:environments].each do |env|
|
18
|
-
env[:match].each do |m|
|
19
|
-
if @environment == m
|
20
|
-
@provider_environment = env
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
@backend_key = @provider_environment[:backend]
|
16
|
+
find_backend_key
|
27
17
|
end
|
28
18
|
|
29
19
|
def render
|
@@ -36,8 +26,51 @@ module Proteus
|
|
36
26
|
exit 1
|
37
27
|
end
|
38
28
|
|
29
|
+
def show_backends
|
30
|
+
require 'terminal-table'
|
31
|
+
table = Terminal::Table.new do |t|
|
32
|
+
t << ['Context', 'Environment', 'Profile', 'Bucket']
|
33
|
+
|
34
|
+
@config[:contexts].each do |ctx|
|
35
|
+
ctx[:environments].each do |env|
|
36
|
+
env[:match].each do |m|
|
37
|
+
t << [
|
38
|
+
ctx[:name],
|
39
|
+
m,
|
40
|
+
@config[:backend][env[:backend]][:profile],
|
41
|
+
@config[:backend][env[:backend]][:bucket][:name]
|
42
|
+
]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
say table, :green
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def aws_profile
|
53
|
+
@config[:backend][@backend_key][:profile]
|
54
|
+
end
|
55
|
+
|
39
56
|
protected
|
40
57
|
|
58
|
+
def find_backend_key
|
59
|
+
@config[:contexts].each do |ctx|
|
60
|
+
if ctx[:name] == @context
|
61
|
+
ctx[:environments].each do |env|
|
62
|
+
env[:match].each do |m|
|
63
|
+
if @environment == m
|
64
|
+
@backend_key = env[:backend]
|
65
|
+
say "Using backend #{@backend_key}", :green
|
66
|
+
return
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
41
74
|
def template
|
42
75
|
<<~TEMPLATE
|
43
76
|
terraform {
|
@@ -45,7 +78,7 @@ module Proteus
|
|
45
78
|
bucket = "<%= @config[:backend][@backend_key][:bucket][:name] %>"
|
46
79
|
key = "<%= @config[:backend][@backend_key][:key_prefix] %>#{@context}-#{@environment}.tfstate"
|
47
80
|
region = "<%= @config[:backend][@backend_key][:bucket][:region] %>"
|
48
|
-
profile = "<%= @config[:backend][@backend_key][:
|
81
|
+
profile = "<%= @config[:backend][@backend_key][:profile]%>"
|
49
82
|
}
|
50
83
|
}
|
51
84
|
TEMPLATE
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'proteus/backend/backend'
|
2
|
+
|
3
|
+
module Proteus
|
4
|
+
class BackendInfo < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
include Helpers
|
7
|
+
include Config
|
8
|
+
|
9
|
+
desc "backend-info", "Shows information about backend configuration"
|
10
|
+
long_desc <<-LONGDESC
|
11
|
+
Shows information about backend configuration
|
12
|
+
LONGDESC
|
13
|
+
def backend_info
|
14
|
+
Proteus::Backend::Backend.new(config: config, context: nil, environment: nil).show_backends
|
15
|
+
end
|
16
|
+
|
17
|
+
default_task :backend_info
|
18
|
+
end
|
19
|
+
end
|
@@ -7,10 +7,7 @@ module Proteus
|
|
7
7
|
desc 'apply', 'Applies the current terraform code'
|
8
8
|
long_desc <<-LONGDESC
|
9
9
|
Applies the current terraform code
|
10
|
-
|
11
|
-
With --limit option, Terraform will only apply changes for the the specified resources
|
12
10
|
LONGDESC
|
13
|
-
option :limit, type: :array, aliases: "-l", required: false, default: nil
|
14
11
|
def apply
|
15
12
|
init(verbose: parent_options[:verbose])
|
16
13
|
|
@@ -30,7 +27,6 @@ module Proteus
|
|
30
27
|
terraform apply \
|
31
28
|
-input=true \
|
32
29
|
-refresh=true \
|
33
|
-
#{limit(options[:limit])} \
|
34
30
|
#{plan_file(context, environment)}
|
35
31
|
APPLY_COMMAND
|
36
32
|
|
data/lib/proteus/common.rb
CHANGED
@@ -30,17 +30,17 @@ module Proteus
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def render_backend
|
33
|
-
backend = Proteus::Backend::Backend.new(config: config, context: context, environment: environment)
|
34
|
-
backend.render
|
33
|
+
@backend = Proteus::Backend::Backend.new(config: config, context: context, environment: environment)
|
34
|
+
@backend.render
|
35
35
|
|
36
|
-
backend
|
36
|
+
@backend
|
37
37
|
end
|
38
38
|
|
39
39
|
def init(verbose: false)
|
40
40
|
say "initializing", :green
|
41
41
|
say "environment: #{environment}", :green
|
42
42
|
|
43
|
-
backend = render_backend
|
43
|
+
@backend = render_backend
|
44
44
|
|
45
45
|
`rm -rf #{context_path(context)}/.terraform/*.tf*`
|
46
46
|
`rm -rf #{context_path(context)}/.terraform/modules`
|
@@ -49,7 +49,7 @@ module Proteus
|
|
49
49
|
terraform_command = <<~TERRAFORM_COMMAND
|
50
50
|
cd #{context_path(context)} && \
|
51
51
|
terraform init \
|
52
|
-
-backend-config='key=#{config[:backend][backend.backend_key][:key_prefix]}#{context}-#{environment}.tfstate' \
|
52
|
+
-backend-config='key=#{config[:backend][@backend.backend_key][:key_prefix]}#{context}-#{environment}.tfstate' \
|
53
53
|
#{aws_profile} \
|
54
54
|
#{context_path(context)}
|
55
55
|
TERRAFORM_COMMAND
|
@@ -59,13 +59,7 @@ module Proteus
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def aws_profile
|
62
|
-
|
63
|
-
env[:match].each do |m|
|
64
|
-
return "-var 'aws_profile=#{env[:profile]}'" if environment == m
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
""
|
62
|
+
"-var 'aws_profile=#{@backend.aws_profile}'"
|
69
63
|
end
|
70
64
|
|
71
65
|
def dryrun
|
@@ -16,17 +16,19 @@ module Proteus
|
|
16
16
|
|
17
17
|
class ConfigValidator < Proteus::Validators::BaseValidator
|
18
18
|
def validate
|
19
|
-
within :
|
19
|
+
within :contexts do
|
20
20
|
ensure_data_type Array
|
21
|
+
ensure_uniqueness_across :name
|
21
22
|
|
22
23
|
each do
|
23
24
|
ensure_keys :name
|
25
|
+
ensure_uniqueness_across :name
|
24
26
|
|
25
27
|
within :environments do
|
26
28
|
ensure_uniqueness_across :match
|
27
29
|
|
28
30
|
each do
|
29
|
-
ensure_keys :
|
31
|
+
ensure_keys :backend
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
@@ -42,10 +44,10 @@ module Proteus
|
|
42
44
|
|
43
45
|
within :backend do
|
44
46
|
each_key do
|
45
|
-
|
47
|
+
ensure_keys :key_prefix, :profile
|
46
48
|
|
47
49
|
within :bucket do
|
48
|
-
ensure_keys :name, :region
|
50
|
+
ensure_keys :name, :region
|
49
51
|
end
|
50
52
|
end
|
51
53
|
end
|
@@ -14,8 +14,33 @@ module Proteus
|
|
14
14
|
long_desc <<-LONGDESC
|
15
15
|
Renders templates for all environments, reporting validation errors.
|
16
16
|
LONGDESC
|
17
|
+
option :selective, type: :boolean, default: false
|
17
18
|
def validate
|
19
|
+
# case 1: changes in root => run full validation
|
20
|
+
# case 2: no changes in root => run contexts only
|
21
|
+
status = `git --no-pager diff origin/master --stat --name-only`.split("\n")
|
22
|
+
|
23
|
+
run_full_validation = if status.map { |l| !l.include?('/') }.any? || !options[:selective]
|
24
|
+
say "Found changes in the root of the repository or --selective is not set. Running full validation.", :green
|
25
|
+
true
|
26
|
+
else
|
27
|
+
say "Running selective validation.", :green
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
selected_contexts = status.collect do |s|
|
32
|
+
parts = s.split("/")
|
33
|
+
parts.size > 1 ? parts[1] : nil
|
34
|
+
end.reject { |s| s.nil? }.uniq
|
35
|
+
|
18
36
|
self.class.contexts.each do |context|
|
37
|
+
unless run_full_validation
|
38
|
+
if !selected_contexts.include?(context.name)
|
39
|
+
say "Skipping context #{context.name}.", :green
|
40
|
+
next
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
19
44
|
context.environments.each do |environment|
|
20
45
|
module_manager = Proteus::Modules::Manager.new(context: context.name, environment: environment)
|
21
46
|
module_manager.render_modules
|
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.3.
|
4
|
+
version: 0.3.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: 2021-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 2.7.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: terminal-table
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.0.0
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.0.0
|
111
125
|
description:
|
112
126
|
email:
|
113
127
|
- simon.albrecht@deliveryhero.com
|
@@ -132,6 +146,7 @@ files:
|
|
132
146
|
- lib/proteus.rb
|
133
147
|
- lib/proteus/app.rb
|
134
148
|
- lib/proteus/backend/backend.rb
|
149
|
+
- lib/proteus/backend_info.rb
|
135
150
|
- lib/proteus/commands/apply.rb
|
136
151
|
- lib/proteus/commands/clean.rb
|
137
152
|
- lib/proteus/commands/destroy.rb
|
@@ -199,8 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
214
|
- !ruby/object:Gem::Version
|
200
215
|
version: '0'
|
201
216
|
requirements: []
|
202
|
-
|
203
|
-
rubygems_version: 2.7.6.2
|
217
|
+
rubygems_version: 3.2.3
|
204
218
|
signing_key:
|
205
219
|
specification_version: 4
|
206
220
|
summary: Proteus is a Terraform wrapper application.
|