terraform-wrapper 0.0.2 → 0.2.0
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 +4 -4
- data/.gitlab-ci.yml +2 -0
- data/Gemfile +0 -4
- data/lib/terraform-wrapper.rb +36 -16
- data/lib/terraform-wrapper/common.rb +12 -23
- data/lib/terraform-wrapper/shared.rb +7 -1
- data/lib/terraform-wrapper/shared/auths.rb +9 -0
- data/lib/terraform-wrapper/shared/auths/azure.rb +179 -0
- data/lib/terraform-wrapper/shared/auths/common.rb +95 -0
- data/lib/terraform-wrapper/shared/backends/aws.rb +71 -33
- data/lib/terraform-wrapper/shared/backends/azure.rb +38 -39
- data/lib/terraform-wrapper/shared/backends/common.rb +18 -14
- data/lib/terraform-wrapper/shared/backends/local.rb +20 -18
- data/lib/terraform-wrapper/shared/binary.rb +16 -5
- data/lib/terraform-wrapper/shared/code.rb +15 -4
- data/lib/terraform-wrapper/shared/config.rb +61 -31
- data/lib/terraform-wrapper/shared/latest.rb +11 -7
- data/lib/terraform-wrapper/shared/logger.rb +80 -0
- data/lib/terraform-wrapper/shared/logging.rb +77 -0
- data/lib/terraform-wrapper/shared/runner.rb +79 -21
- data/lib/terraform-wrapper/shared/variables.rb +66 -0
- data/lib/terraform-wrapper/tasks.rb +6 -0
- data/lib/terraform-wrapper/tasks/apply.rb +16 -18
- data/lib/terraform-wrapper/tasks/binary.rb +26 -23
- data/lib/terraform-wrapper/tasks/clean.rb +15 -15
- data/lib/terraform-wrapper/tasks/destroy.rb +16 -18
- data/lib/terraform-wrapper/tasks/import.rb +66 -0
- data/lib/terraform-wrapper/tasks/init.rb +16 -18
- data/lib/terraform-wrapper/tasks/plan.rb +16 -18
- data/lib/terraform-wrapper/tasks/plandestroy.rb +16 -18
- data/lib/terraform-wrapper/tasks/upgrade.rb +58 -0
- data/lib/terraform-wrapper/tasks/validate.rb +7 -7
- data/lib/terraform-wrapper/version.rb +1 -1
- data/terraform-wrapper.gemspec +3 -0
- metadata +39 -4
- 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
|
-
|
15
|
+
include TerraformWrapper::Shared::Logging
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
20
19
|
@binary
|
21
20
|
@code
|
22
|
-
@
|
23
|
-
@overrides
|
24
|
-
@service
|
21
|
+
@options
|
25
22
|
|
26
23
|
###############################################################################
|
27
24
|
|
28
|
-
def initialize(
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
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
|
38
|
+
desc "Initialises the Terraform infrastructure component and state backend."
|
45
39
|
task :init, [:config] => :binary do |t, args|
|
46
|
-
|
40
|
+
options = @options.merge({"name" => args[:config]})
|
47
41
|
|
48
|
-
|
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
|
-
|
15
|
+
include TerraformWrapper::Shared::Logging
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
20
19
|
@binary
|
21
20
|
@code
|
22
|
-
@
|
23
|
-
@overrides
|
24
|
-
@service
|
21
|
+
@options
|
25
22
|
|
26
23
|
###############################################################################
|
27
24
|
|
28
|
-
def initialize(
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
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 "
|
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
|
-
|
40
|
+
options = @options.merge({"name" => args[:config]})
|
47
41
|
|
48
|
-
|
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
|
-
|
15
|
+
include TerraformWrapper::Shared::Logging
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
20
19
|
@binary
|
21
20
|
@code
|
22
|
-
@
|
23
|
-
@overrides
|
24
|
-
@service
|
21
|
+
@options
|
25
22
|
|
26
23
|
###############################################################################
|
27
24
|
|
28
|
-
def initialize(
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
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 "
|
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
|
-
|
40
|
+
options = @options.merge({"name" => args[:config]})
|
47
41
|
|
48
|
-
|
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
|
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
|
data/terraform-wrapper.gemspec
CHANGED
@@ -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
|
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-
|
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
|
-
###############################################################################
|