terraform-wrapper 0.0.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +2 -0
  3. data/Gemfile +0 -4
  4. data/lib/terraform-wrapper.rb +36 -16
  5. data/lib/terraform-wrapper/common.rb +12 -23
  6. data/lib/terraform-wrapper/shared.rb +7 -1
  7. data/lib/terraform-wrapper/shared/auths.rb +9 -0
  8. data/lib/terraform-wrapper/shared/auths/azure.rb +179 -0
  9. data/lib/terraform-wrapper/shared/auths/common.rb +95 -0
  10. data/lib/terraform-wrapper/shared/backends/aws.rb +71 -33
  11. data/lib/terraform-wrapper/shared/backends/azure.rb +38 -39
  12. data/lib/terraform-wrapper/shared/backends/common.rb +18 -14
  13. data/lib/terraform-wrapper/shared/backends/local.rb +20 -18
  14. data/lib/terraform-wrapper/shared/binary.rb +16 -5
  15. data/lib/terraform-wrapper/shared/code.rb +15 -4
  16. data/lib/terraform-wrapper/shared/config.rb +61 -31
  17. data/lib/terraform-wrapper/shared/latest.rb +11 -7
  18. data/lib/terraform-wrapper/shared/logger.rb +80 -0
  19. data/lib/terraform-wrapper/shared/logging.rb +77 -0
  20. data/lib/terraform-wrapper/shared/runner.rb +79 -21
  21. data/lib/terraform-wrapper/shared/variables.rb +66 -0
  22. data/lib/terraform-wrapper/tasks.rb +6 -0
  23. data/lib/terraform-wrapper/tasks/apply.rb +16 -18
  24. data/lib/terraform-wrapper/tasks/binary.rb +26 -23
  25. data/lib/terraform-wrapper/tasks/clean.rb +15 -15
  26. data/lib/terraform-wrapper/tasks/destroy.rb +16 -18
  27. data/lib/terraform-wrapper/tasks/import.rb +66 -0
  28. data/lib/terraform-wrapper/tasks/init.rb +16 -18
  29. data/lib/terraform-wrapper/tasks/plan.rb +16 -18
  30. data/lib/terraform-wrapper/tasks/plandestroy.rb +16 -18
  31. data/lib/terraform-wrapper/tasks/upgrade.rb +58 -0
  32. data/lib/terraform-wrapper/tasks/validate.rb +7 -7
  33. data/lib/terraform-wrapper/version.rb +1 -1
  34. data/terraform-wrapper.gemspec +3 -0
  35. metadata +39 -4
  36. data/lib/terraform-wrapper/shared/identifiers.rb +0 -70
@@ -1,9 +1,5 @@
1
1
  ###############################################################################
2
2
 
3
- require 'rake/tasklib'
4
-
5
- ###############################################################################
6
-
7
3
  module TerraformWrapper
8
4
 
9
5
  ###############################################################################
@@ -16,22 +12,20 @@ module TerraformWrapper
16
12
 
17
13
  ###############################################################################
18
14
 
19
- @backend
15
+ include TerraformWrapper::Shared::Logging
16
+
17
+ ###############################################################################
18
+
20
19
  @binary
21
20
  @code
22
- @configs
23
- @overrides
24
- @service
21
+ @options
25
22
 
26
23
  ###############################################################################
27
24
 
28
- def initialize(backend:, binary:, code:, configs:, overrides:, service:)
29
- @backend = backend
30
- @binary = binary
31
- @code = code
32
- @configs = configs
33
- @overrides = overrides
34
- @service = service
25
+ def initialize(binary:, code:, options:)
26
+ @binary = binary
27
+ @code = code
28
+ @options = options
35
29
 
36
30
  yield self if block_given?
37
31
 
@@ -41,13 +35,17 @@ module TerraformWrapper
41
35
  ###############################################################################
42
36
 
43
37
  def init_task
44
- desc "Initialises the Terraform workspace and remote backend (if applicable)."
38
+ desc "Initialises the Terraform infrastructure component and state backend."
45
39
  task :init, [:config] => :binary do |t, args|
46
- $logger.info("Initialising Terraform for service: #{@service}, component: #{@code.name}...")
40
+ options = @options.merge({"name" => args[:config]})
47
41
 
48
- config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
42
+ logger.info("Processing configuration for Terraform init...")
43
+
44
+ config = TerraformWrapper::Shared::Config.new(code: @code, options: options)
49
45
  runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
50
46
 
47
+ logger.info("Initialising Terraform for service: #{config.service}, component: #{@code.name}...")
48
+
51
49
  runner.init(config: config)
52
50
  end
53
51
  end
@@ -1,9 +1,5 @@
1
1
  ###############################################################################
2
2
 
3
- require 'rake/tasklib'
4
-
5
- ###############################################################################
6
-
7
3
  module TerraformWrapper
8
4
 
9
5
  ###############################################################################
@@ -16,22 +12,20 @@ module TerraformWrapper
16
12
 
17
13
  ###############################################################################
18
14
 
19
- @backend
15
+ include TerraformWrapper::Shared::Logging
16
+
17
+ ###############################################################################
18
+
20
19
  @binary
21
20
  @code
22
- @configs
23
- @overrides
24
- @service
21
+ @options
25
22
 
26
23
  ###############################################################################
27
24
 
28
- def initialize(backend:, binary:, code:, configs:, overrides:, service:)
29
- @backend = backend
30
- @binary = binary
31
- @code = code
32
- @configs = configs
33
- @overrides = overrides
34
- @service = service
25
+ def initialize(binary:, code:, options:)
26
+ @binary = binary
27
+ @code = code
28
+ @options = options
35
29
 
36
30
  yield self if block_given?
37
31
 
@@ -41,13 +35,17 @@ module TerraformWrapper
41
35
  ###############################################################################
42
36
 
43
37
  def plan_task
44
- desc "Runs a Terraform plan for a given configuration on a workspace."
38
+ desc "Creates a Terraform plan for a given configuration on an infrastructure component."
45
39
  task :plan, [:config, :out] => :binary do |t, args|
46
- $logger.info("Running Terraform plan for service: #{@service}, component: #{@code.name}...")
40
+ options = @options.merge({"name" => args[:config]})
47
41
 
48
- config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
42
+ logger.info("Processing configuration for Terraform plan...")
43
+
44
+ config = TerraformWrapper::Shared::Config.new(code: @code, options: options)
49
45
  runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
50
46
 
47
+ logger.info("Running Terraform plan for service: #{config.service}, component: #{@code.name}...")
48
+
51
49
  runner.init(config: config)
52
50
  runner.plan(file: args[:out])
53
51
  end
@@ -1,9 +1,5 @@
1
1
  ###############################################################################
2
2
 
3
- require 'rake/tasklib'
4
-
5
- ###############################################################################
6
-
7
3
  module TerraformWrapper
8
4
 
9
5
  ###############################################################################
@@ -16,22 +12,20 @@ module TerraformWrapper
16
12
 
17
13
  ###############################################################################
18
14
 
19
- @backend
15
+ include TerraformWrapper::Shared::Logging
16
+
17
+ ###############################################################################
18
+
20
19
  @binary
21
20
  @code
22
- @configs
23
- @overrides
24
- @service
21
+ @options
25
22
 
26
23
  ###############################################################################
27
24
 
28
- def initialize(backend:, binary:, code:, configs:, overrides:, service:)
29
- @backend = backend
30
- @binary = binary
31
- @code = code
32
- @configs = configs
33
- @overrides = overrides
34
- @service = service
25
+ def initialize(binary:, code:, options:)
26
+ @binary = binary
27
+ @code = code
28
+ @options = options
35
29
 
36
30
  yield self if block_given?
37
31
 
@@ -41,13 +35,17 @@ module TerraformWrapper
41
35
  ###############################################################################
42
36
 
43
37
  def plan_destroy_task
44
- desc "Runs a Terraform destroy plan for a given configuration on a workspace."
38
+ desc "Creates a Terraform destroy plan for a given configuration on an infrastructure component."
45
39
  task :"plan-destroy", [:config, :out] => :binary do |t, args|
46
- $logger.info("Running Terraform destroy plan for service: #{@service}, component: #{@code.name}...")
40
+ options = @options.merge({"name" => args[:config]})
47
41
 
48
- config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
42
+ logger.info("Processing configuration for Terraform destroy plan...")
43
+
44
+ config = TerraformWrapper::Shared::Config.new(code: @code, options: options)
49
45
  runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
50
46
 
47
+ logger.info("Running Terraform destroy plan for service: #{config.service}, component: #{@code.name}...")
48
+
51
49
  runner.init(config: config)
52
50
  runner.plan(destroy: true, file: args[:out])
53
51
  end
@@ -0,0 +1,58 @@
1
+ ###############################################################################
2
+
3
+ module TerraformWrapper
4
+
5
+ ###############################################################################
6
+
7
+ module Tasks
8
+
9
+ ###############################################################################
10
+
11
+ class Upgrade < ::Rake::TaskLib
12
+
13
+ ###############################################################################
14
+
15
+ include TerraformWrapper::Shared::Logging
16
+
17
+ ###############################################################################
18
+
19
+ @binary
20
+ @code
21
+
22
+ ###############################################################################
23
+
24
+ def initialize(binary:, code:)
25
+ @binary = binary
26
+ @code = code
27
+
28
+ yield self if block_given?
29
+
30
+ upgrade_task
31
+ end
32
+
33
+ ###############################################################################
34
+
35
+ def upgrade_task
36
+ desc "Upgrades the Terraform infrastructure component modules, providers and lock file."
37
+ task :upgrade => :binary do |t, args|
38
+ runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
39
+
40
+ logger.info("Upgrading Terraform component: #{@code.name}...")
41
+
42
+ runner.download(upgrade: true)
43
+ end
44
+ end
45
+
46
+ ###############################################################################
47
+
48
+ end
49
+
50
+ ###############################################################################
51
+
52
+ end
53
+
54
+ ###############################################################################
55
+
56
+ end
57
+
58
+ ###############################################################################
@@ -1,9 +1,5 @@
1
1
  ###############################################################################
2
2
 
3
- require 'rake/tasklib'
4
-
5
- ###############################################################################
6
-
7
3
  module TerraformWrapper
8
4
 
9
5
  ###############################################################################
@@ -14,6 +10,10 @@ module TerraformWrapper
14
10
 
15
11
  class Validate < ::Rake::TaskLib
16
12
 
13
+ ###############################################################################
14
+
15
+ include TerraformWrapper::Shared::Logging
16
+
17
17
  ###############################################################################
18
18
 
19
19
  @binary
@@ -33,12 +33,12 @@ module TerraformWrapper
33
33
  ###############################################################################
34
34
 
35
35
  def validate_task
36
- desc "Validates the Terraform code within a workspace."
36
+ desc "Validates the Terraform code for an infrastructure component."
37
37
  task :validate => :binary do |t, args|
38
- $logger.info("Validating Terraform component: #{@code.name}...")
39
-
40
38
  runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
41
39
 
40
+ logger.info("Validating Terraform component: #{@code.name}...")
41
+
42
42
  runner.download
43
43
  runner.validate
44
44
  end
@@ -4,7 +4,7 @@ module TerraformWrapper
4
4
 
5
5
  ###############################################################################
6
6
 
7
- VERSION = "0.0.2"
7
+ VERSION = "0.2.0"
8
8
 
9
9
  ###############################################################################
10
10
 
@@ -31,6 +31,9 @@ Gem::Specification.new do |spec|
31
31
  spec.bindir = "exe"
32
32
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
33
33
  spec.require_paths = ["lib"]
34
+
35
+ spec.add_dependency 'rake', '~> 13.0'
36
+ spec.add_dependency 'rubyzip', '~> 2.3'
34
37
  end
35
38
 
36
39
  ###############################################################################
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraform-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lees
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-04 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-02-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.3'
13
41
  description: A ruby wrapper for managing Terraform binaries and remote state. Each
14
42
  Terraform command (plan, apply, etc) is wrapped so that the correct binary is used
15
43
  and remote state referenced.
@@ -29,6 +57,9 @@ files:
29
57
  - lib/terraform-wrapper.rb
30
58
  - lib/terraform-wrapper/common.rb
31
59
  - lib/terraform-wrapper/shared.rb
60
+ - lib/terraform-wrapper/shared/auths.rb
61
+ - lib/terraform-wrapper/shared/auths/azure.rb
62
+ - lib/terraform-wrapper/shared/auths/common.rb
32
63
  - lib/terraform-wrapper/shared/backends.rb
33
64
  - lib/terraform-wrapper/shared/backends/aws.rb
34
65
  - lib/terraform-wrapper/shared/backends/azure.rb
@@ -37,17 +68,21 @@ files:
37
68
  - lib/terraform-wrapper/shared/binary.rb
38
69
  - lib/terraform-wrapper/shared/code.rb
39
70
  - lib/terraform-wrapper/shared/config.rb
40
- - lib/terraform-wrapper/shared/identifiers.rb
41
71
  - lib/terraform-wrapper/shared/latest.rb
72
+ - lib/terraform-wrapper/shared/logger.rb
73
+ - lib/terraform-wrapper/shared/logging.rb
42
74
  - lib/terraform-wrapper/shared/runner.rb
75
+ - lib/terraform-wrapper/shared/variables.rb
43
76
  - lib/terraform-wrapper/tasks.rb
44
77
  - lib/terraform-wrapper/tasks/apply.rb
45
78
  - lib/terraform-wrapper/tasks/binary.rb
46
79
  - lib/terraform-wrapper/tasks/clean.rb
47
80
  - lib/terraform-wrapper/tasks/destroy.rb
81
+ - lib/terraform-wrapper/tasks/import.rb
48
82
  - lib/terraform-wrapper/tasks/init.rb
49
83
  - lib/terraform-wrapper/tasks/plan.rb
50
84
  - lib/terraform-wrapper/tasks/plandestroy.rb
85
+ - lib/terraform-wrapper/tasks/upgrade.rb
51
86
  - lib/terraform-wrapper/tasks/validate.rb
52
87
  - lib/terraform-wrapper/version.rb
53
88
  - terraform-wrapper.gemspec
@@ -1,70 +0,0 @@
1
- ###############################################################################
2
-
3
- module TerraformWrapper
4
-
5
- ###############################################################################
6
-
7
- module Shared
8
-
9
- ###############################################################################
10
-
11
- class Identifiers
12
-
13
- ###############################################################################
14
-
15
- attr_reader :identifiers
16
-
17
- ###############################################################################
18
-
19
- def initialize(identifiers: Hash.new, sort: true)
20
- cleansed = cleanse(identifiers: identifiers)
21
- @identifiers = sort ? cleansed.sort : cleansed
22
- end
23
-
24
- ###############################################################################
25
-
26
- def path()
27
- result = String.new
28
-
29
- @identifiers.each do |key, value|
30
- directory = key + "-" + value
31
- result = result.empty? ? directory : File.join(result, directory)
32
- end
33
-
34
- return result
35
- end
36
-
37
- ###############################################################################
38
-
39
- private
40
-
41
- ###############################################################################
42
-
43
- def cleanse(identifiers:)
44
- result = Hash.new
45
-
46
- identifiers.keys.each do |key|
47
- raise "Could not clean identifiers hash. All keys MUST be strings!" unless key.kind_of?(String)
48
- raise "Could not clean identifiers hash, duplicate key found: #{key.downcase}!" if result.key?(key.downcase)
49
- raise "Could not clean identifiers hash, value for: #{key.downcase} is not a string!" unless identifiers[key].kind_of?(String)
50
- raise "Could not clean identifiers hash, value for: #{key.downcase} is empty!" if identifiers[key].strip.empty?
51
-
52
- result[key.downcase] = identifiers[key].strip.downcase
53
- end
54
-
55
- return result
56
- end
57
-
58
- ###############################################################################
59
-
60
- end
61
-
62
- ###############################################################################
63
-
64
- end
65
-
66
- ###############################################################################
67
-
68
- end
69
-
70
- ###############################################################################