dh-proteus 0.3.3 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a2fc0b898fae5d35182d34a30ee925d3b1f017514b9a5ea5bf1ef7a0f61a099
4
- data.tar.gz: 5c2c564881da7463672c297ca56b95329f784266d8f7018850f74bc2d5936e59
3
+ metadata.gz: 10f66dcab397697c71838f79094e37d2222b1be3c9110bc31f3f6f07183fd5fa
4
+ data.tar.gz: 462eac3c33ffab2f47a8fa0ed0e3e4669c38a88d2b63f3478cdf63d8a9d8e2db
5
5
  SHA512:
6
- metadata.gz: acf91c5fa344141e5b704a72180e9e1ef375df52ce8122819ff7c9e36e465b99d0fb485c9a3d3cab86fcbbf72455a5b0989f4bce700127c5d59e695859b27cc7
7
- data.tar.gz: 294544ff72bc27ac86c7e4cf925d9a00a0579e16e1d37f1048482003fb28c6809b92dbabac4dea087ccfafc816b35b85ba80d27ac21ff76a56226a1617dc5bae
6
+ metadata.gz: add7493c81e4472bdadd9ce24aef06dcab1a3d56138ef653ad7eaa0a7fae5634c05fd8a8b551f450e6d22f36772e6bf4dc248b770a5898deccd9decfaeb9c30a
7
+ data.tar.gz: 9c5d32885ab3977f1d51e2f2288abf0680842b9f9291df614a3cef4bf883008e9607ac446590c0744d41cb6fbd5047ce40bfe81e404e0b8a940e586d144169c4
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dh-proteus (0.3.3)
4
+ dh-proteus (0.3.4)
5
5
  activesupport (~> 5.1.1)
6
6
  erubis (~> 2.7.0)
7
+ terminal-table (~> 3.0.0)
7
8
  thor (~> 0.20.0)
8
9
 
9
10
  GEM
@@ -18,10 +19,10 @@ GEM
18
19
  concurrent-ruby (1.1.8)
19
20
  diff-lcs (1.3)
20
21
  erubis (2.7.0)
21
- i18n (1.8.8)
22
+ i18n (1.8.9)
22
23
  concurrent-ruby (~> 1.0)
23
24
  method_source (0.8.2)
24
- minitest (5.14.3)
25
+ minitest (5.14.4)
25
26
  pry (0.10.4)
26
27
  coderay (~> 1.1.0)
27
28
  method_source (~> 0.8.1)
@@ -41,10 +42,13 @@ GEM
41
42
  rspec-support (~> 3.8.0)
42
43
  rspec-support (3.8.0)
43
44
  slop (3.6.0)
45
+ terminal-table (3.0.0)
46
+ unicode-display_width (~> 1.1, >= 1.1.1)
44
47
  thor (0.20.3)
45
48
  thread_safe (0.3.6)
46
49
  tzinfo (1.2.9)
47
50
  thread_safe (~> 0.1)
51
+ unicode-display_width (1.7.0)
48
52
 
49
53
  PLATFORMS
50
54
  ruby
data/dh-proteus.gemspec CHANGED
@@ -43,4 +43,5 @@ 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 'terminal-table', '~> 3.0.0'
46
47
  end
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'
@@ -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
- @config[:providers].each do |provider|
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][:bucket][:profile]%>"
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
@@ -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
- config[:providers].select {|p| p[:name] == 'aws' }.first[:environments].each do |env|
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 :providers do
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 :profile, :backend
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
- ensure_presence :key_prefix
47
+ ensure_keys :key_prefix, :profile
46
48
 
47
49
  within :bucket do
48
- ensure_keys :name, :region, :profile
50
+ ensure_keys :name, :region
49
51
  end
50
52
  end
51
53
  end
@@ -1,5 +1,5 @@
1
1
  module Proteus
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
4
4
 
5
5
  if $0 == __FILE__
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.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Albrecht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-12 00:00:00.000000000 Z
11
+ date: 2021-03-25 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