terraform-wrapper 1.0.0 → 1.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/lib/terraform-wrapper.rb +1 -1
- data/lib/terraform-wrapper/common.rb +1 -1
- data/lib/terraform-wrapper/shared/auths/azure.rb +19 -19
- data/lib/terraform-wrapper/shared/code.rb +0 -2
- data/lib/terraform-wrapper/shared/config.rb +22 -9
- data/lib/terraform-wrapper/shared/runner.rb +2 -0
- data/lib/terraform-wrapper/shared/variables.rb +12 -9
- data/lib/terraform-wrapper/tasks/upgrade.rb +1 -1
- data/lib/terraform-wrapper/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bafe8ef5b2dd58357fd8ac1eb741deb4ace78e02d374f1711c727e5835731715
|
4
|
+
data.tar.gz: 9899116a854e2ab82a4cfc6736f94321735593a7f03c6197715324415c8e5f30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48a9f108a1b0dc5d111486d3f093b08c8e0a5d40f9a3d70211f537a1623dcb86019c39144177e774ee22e224fd23030e473bf3a5dd3b501131c3e6691312d83b
|
7
|
+
data.tar.gz: d0dd56c21bd7b6345913b3117aa1921118d9b60fc31cb8bcef72dc6556868e7aeff9497104bda31331ad3b30e7be02cf1c71814a3549b09a9bbdeedbbdfa2a8e
|
data/lib/terraform-wrapper.rb
CHANGED
@@ -22,7 +22,7 @@ module TerraformWrapper
|
|
22
22
|
|
23
23
|
###############################################################################
|
24
24
|
|
25
|
-
def self.
|
25
|
+
def self.deployment_tasks(component:, options: Hash.new, service:)
|
26
26
|
@logger.info("Building tasks for service: #{service}, component: #{component}...")
|
27
27
|
|
28
28
|
@logger.fatal("Options must be specified as a hash!") unless options.kind_of?(Hash)
|
@@ -28,7 +28,7 @@ module TerraformWrapper
|
|
28
28
|
return path if File.file?(path)
|
29
29
|
end
|
30
30
|
|
31
|
-
logger.fatal("#{description} name: #{name} not found in location: #{base}!")
|
31
|
+
@logger.fatal("#{description} name: #{name} not found in location: #{base}!")
|
32
32
|
end
|
33
33
|
|
34
34
|
###############################################################################
|
@@ -25,13 +25,13 @@ module TerraformWrapper
|
|
25
25
|
|
26
26
|
###############################################################################
|
27
27
|
|
28
|
-
@
|
28
|
+
@keyvault = nil
|
29
|
+
@secret_username = nil
|
30
|
+
@secret_password = nil
|
29
31
|
|
30
32
|
###############################################################################
|
31
33
|
|
32
|
-
|
33
|
-
attr_reader :tenant
|
34
|
-
attr_reader :username
|
34
|
+
@subscription
|
35
35
|
|
36
36
|
###############################################################################
|
37
37
|
|
@@ -42,10 +42,17 @@ module TerraformWrapper
|
|
42
42
|
###############################################################################
|
43
43
|
|
44
44
|
def auth()
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
details = subscription_details(subscription: @subscription)
|
46
|
+
|
47
|
+
subscription = details["id"]
|
48
|
+
tenant = details["tenant"]
|
49
|
+
username = @keyvault.nil? ? nil : secret(vault: @keyvault, name: @secret_username)
|
50
|
+
password = @keyvault.nil? ? nil : secret(vault: @keyvault, name: @secret_password)
|
51
|
+
|
52
|
+
ENV["ARM_SUBSCRIPTION_ID"] = subscription
|
53
|
+
ENV["ARM_TENANT_ID"] = tenant
|
54
|
+
ENV["ARM_CLIENT_ID"] = username unless username.nil?
|
55
|
+
ENV["ARM_CLIENT_SECRET"] = password unless password.nil?
|
49
56
|
logger.success("Azure authenticator environment variables set!")
|
50
57
|
end
|
51
58
|
|
@@ -151,20 +158,13 @@ module TerraformWrapper
|
|
151
158
|
end
|
152
159
|
|
153
160
|
begin
|
154
|
-
subscription
|
155
|
-
keyvault
|
156
|
-
|
157
|
-
|
161
|
+
@subscription = subscription % @variables.identifiers
|
162
|
+
@keyvault = keyvault % @variables.identifiers unless keyvault.nil?
|
163
|
+
@secret_username = username % @variables.identifiers unless keyvault.nil?
|
164
|
+
@secret_password = password % @variables.identifiers unless keyvault.nil?
|
158
165
|
rescue
|
159
166
|
logger.fatal("Azure authenticator options contain identifiers that are not included in the configuration file!")
|
160
167
|
end
|
161
|
-
|
162
|
-
details = subscription_details(subscription: subscription)
|
163
|
-
|
164
|
-
@subscription = details["id"]
|
165
|
-
@tenant = details["tenant"]
|
166
|
-
@username = keyvault.nil? ? nil : secret(vault: keyvault, name: username)
|
167
|
-
@password = keyvault.nil? ? nil : secret(vault: keyvault, name: password)
|
168
168
|
end
|
169
169
|
|
170
170
|
###############################################################################
|
@@ -34,8 +34,6 @@ module TerraformWrapper
|
|
34
34
|
@name = options["name"]
|
35
35
|
|
36
36
|
@path = File.join(@base, @name)
|
37
|
-
|
38
|
-
logger.fatal("Terraform code location: #{@path} does not exist!") unless exists
|
39
37
|
end
|
40
38
|
|
41
39
|
###############################################################################
|
@@ -41,16 +41,16 @@ module TerraformWrapper
|
|
41
41
|
|
42
42
|
@base = options["base"]
|
43
43
|
|
44
|
-
logger.fatal("Configuration service name must be a string!") unless options["service"].kind_of?(String)
|
45
|
-
logger.fatal("Configuration service name must not be blank!") if options["service"].strip.empty?
|
46
|
-
|
47
|
-
@service = options["service"]
|
48
|
-
|
49
44
|
logger.fatal("Configuration name must be a string!") unless options["name"].kind_of?(String)
|
50
45
|
logger.fatal("Configuration name must not be blank!") if options["name"].strip.empty?
|
51
46
|
|
52
47
|
@name = options["name"]
|
53
48
|
|
49
|
+
logger.fatal("Configuration service name must be a string!") unless options["service"].kind_of?(String)
|
50
|
+
logger.fatal("Configuration service name must not be blank!") if options["service"].strip.empty?
|
51
|
+
|
52
|
+
@service = options["service"]
|
53
|
+
|
54
54
|
logger.fatal("Configuration authenticator for Azure enabled must be a Boolean!") unless [ true, false ].include?(options["auth-azure"])
|
55
55
|
|
56
56
|
auth_azure = options["auth-azure"]
|
@@ -75,15 +75,28 @@ module TerraformWrapper
|
|
75
75
|
logger.fatal("Invalid YAML in configuration file: #{@path}") unless yaml.kind_of?(Hash)
|
76
76
|
|
77
77
|
identifiers = yaml.key?("identifiers") ? yaml["identifiers"] : Hash.new
|
78
|
-
@variables
|
79
|
-
|
78
|
+
@variables = TerraformWrapper::Shared::Variables.new(config: @name, component: @code.name, service: @service, identifiers: identifiers)
|
79
|
+
|
80
|
+
if yaml.key?("globals") then
|
81
|
+
logger.fatal("Key 'globals' is not a hash in configuration file: #{@path}") unless yaml["globals"].kind_of?(Hash)
|
82
|
+
globals = yaml["globals"]
|
83
|
+
|
84
|
+
@variables.add_variables(variables: globals["variables"]) if globals.key?("variables")
|
85
|
+
end
|
80
86
|
|
81
87
|
if yaml.key?("terraform") then
|
82
88
|
logger.fatal("Key 'terraform' is not a hash in configuration file: #{@path}") unless yaml["terraform"].kind_of?(Hash)
|
83
89
|
terraform = yaml["terraform"]
|
84
90
|
|
85
|
-
@
|
86
|
-
|
91
|
+
[ "globals", @code.name ].each do |extra|
|
92
|
+
if terraform.key?(extra) then
|
93
|
+
logger.fatal("Key '#{extra}' under 'terraform' is not a hash in configuration file: #{@path}") unless terraform[extra].kind_of?(Hash)
|
94
|
+
section = terraform[extra]
|
95
|
+
|
96
|
+
@variables.add_variables(variables: section["variables"]) if section.key?("variables")
|
97
|
+
@variables.add_files(base: @base, files: section["files"]) if section.key?("files")
|
98
|
+
end
|
99
|
+
end
|
87
100
|
end
|
88
101
|
|
89
102
|
@auths = Array.new
|
@@ -25,6 +25,8 @@ module TerraformWrapper
|
|
25
25
|
###############################################################################
|
26
26
|
|
27
27
|
def initialize(binary:, code:)
|
28
|
+
logger.fatal("Terraform code location: #{code.path} does not exist!") unless code.check
|
29
|
+
|
28
30
|
@binary = binary
|
29
31
|
@code = code
|
30
32
|
|
@@ -36,11 +36,11 @@ module TerraformWrapper
|
|
36
36
|
@core[:config] = config
|
37
37
|
@core[:service] = service
|
38
38
|
|
39
|
-
user = cleanse(variables: identifiers, reserved: @core.keys)
|
39
|
+
user = cleanse(variables: identifiers, reserved: @core.keys, downcase: true)
|
40
40
|
merged = @core.merge(user)
|
41
41
|
|
42
42
|
@identifiers = sort ? merged.sort.to_h : merged
|
43
|
-
@values =
|
43
|
+
@values = Hash.new
|
44
44
|
@files = Array.new
|
45
45
|
end
|
46
46
|
|
@@ -89,7 +89,7 @@ module TerraformWrapper
|
|
89
89
|
###############################################################################
|
90
90
|
|
91
91
|
def clear_variables()
|
92
|
-
@values =
|
92
|
+
@values = Hash.new
|
93
93
|
end
|
94
94
|
|
95
95
|
###############################################################################
|
@@ -98,17 +98,20 @@ module TerraformWrapper
|
|
98
98
|
|
99
99
|
###############################################################################
|
100
100
|
|
101
|
-
def cleanse(variables:, reserved:)
|
101
|
+
def cleanse(variables:, reserved:, downcase: false)
|
102
102
|
result = Hash.new
|
103
103
|
|
104
104
|
variables.keys.each do |key|
|
105
105
|
logger.fatal("Could not clean variables hash. All keys MUST be strings!") unless key.kind_of?(String)
|
106
|
-
logger.fatal("Could not clean variables hash, key: #{key.downcase} is reserved or already in use and cannot be used!") if reserved.include?(key.downcase.to_sym)
|
107
|
-
logger.fatal("Could not clean variables hash, duplicate key found: #{key.downcase}!") if result.key?(key.downcase.to_sym)
|
108
|
-
logger.fatal("Could not clean variables hash, value for: #{key.downcase} is not a string!") unless variables[key].kind_of?(String)
|
109
|
-
logger.fatal("Could not clean variables hash, value for: #{key.downcase} is empty!") if variables[key].strip.empty?
|
110
106
|
|
111
|
-
|
107
|
+
sym = downcase ? key.downcase.to_sym : key.to_sym
|
108
|
+
|
109
|
+
logger.fatal("Could not clean variables hash, key: #{sym.to_s} is reserved or already in use and cannot be used!") if reserved.include?(sym)
|
110
|
+
logger.fatal("Could not clean variables hash, duplicate key found: #{sym.to_s}!") if result.key?(sym)
|
111
|
+
logger.fatal("Could not clean variables hash, value for: #{sym.to_s} is not a string!") unless variables[key].kind_of?(String)
|
112
|
+
logger.fatal("Could not clean variables hash, value for: #{sym.to_s} is empty!") if variables[key].strip.empty?
|
113
|
+
|
114
|
+
result[sym] = variables[key].strip
|
112
115
|
end
|
113
116
|
|
114
117
|
return result
|
@@ -34,7 +34,7 @@ module TerraformWrapper
|
|
34
34
|
|
35
35
|
def upgrade_task
|
36
36
|
desc "Upgrades the Terraform infrastructure component modules, providers and lock file."
|
37
|
-
task :upgrade => :binary do |t, args|
|
37
|
+
task :upgrade => [:binary, :clean] do |t, args|
|
38
38
|
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
39
39
|
|
40
40
|
logger.info("Upgrading Terraform component: #{@code.name}...")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terraform-wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.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-03-
|
11
|
+
date: 2021-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|