terraform-wrapper 1.2.0 → 1.2.6
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/shared/auths/azure.rb +1 -1
- data/lib/terraform-wrapper/shared/binary.rb +3 -2
- data/lib/terraform-wrapper/shared/provider.rb +41 -0
- data/lib/terraform-wrapper/shared/runner.rb +90 -60
- data/lib/terraform-wrapper/shared.rb +1 -0
- data/lib/terraform-wrapper/tasks/upgrade.rb +2 -2
- data/lib/terraform-wrapper/version.rb +1 -1
- data/lib/terraform-wrapper.rb +6 -2
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '08695485310df49bc046b08b37f9ba0bb9deb239a385de56c001d0a7abe0ec46'
|
|
4
|
+
data.tar.gz: f017a24cd6e27dacbfd7ee9fd754dc6765599ed650830029f40574d8cc6738e4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 45781614bb97c62ef85a16ae28a645a9c051502d9e5b1d02bdb9d9947599cec2603579738eb3a4d674914e2d44fde0d1254de539ae4ae8d4c3730e519517a6d7
|
|
7
|
+
data.tar.gz: 3e73ea3e388813a543c484e23577fa9275131de588c571c9d0f7f22a3a804e4090d55944fdaa6789cfeab683dd9e81b18a343a41357b9640b1461181c4f2a7a9
|
|
@@ -71,7 +71,7 @@ module TerraformWrapper
|
|
|
71
71
|
###############################################################################
|
|
72
72
|
|
|
73
73
|
def cli()
|
|
74
|
-
output = logger.colour ? "
|
|
74
|
+
output = logger.colour ? "yamlc" : "yaml"
|
|
75
75
|
cmdline = "\"#{@@az}\" version --output \"#{output}\""
|
|
76
76
|
return(system(cmdline) || false)
|
|
77
77
|
end
|
|
@@ -22,12 +22,13 @@ module TerraformWrapper
|
|
|
22
22
|
|
|
23
23
|
attr_reader :base
|
|
24
24
|
attr_reader :directory
|
|
25
|
+
attr_reader :provider
|
|
25
26
|
attr_reader :platform
|
|
26
27
|
attr_reader :version
|
|
27
28
|
|
|
28
29
|
###############################################################################
|
|
29
30
|
|
|
30
|
-
def initialize(options:)
|
|
31
|
+
def initialize(options:, provider:)
|
|
31
32
|
logger.fatal("Binary base path must be a string!") unless options["base"].kind_of?(String)
|
|
32
33
|
logger.fatal("Binary base path must not be blank!") if options["base"].strip.empty?
|
|
33
34
|
|
|
@@ -39,8 +40,8 @@ module TerraformWrapper
|
|
|
39
40
|
@version = options["version"]
|
|
40
41
|
|
|
41
42
|
@platform = platform_detect
|
|
42
|
-
|
|
43
43
|
@directory = File.join(@base, @version, @platform)
|
|
44
|
+
@provider = provider
|
|
44
45
|
@name = "terraform"
|
|
45
46
|
end
|
|
46
47
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
|
|
3
|
+
module TerraformWrapper
|
|
4
|
+
|
|
5
|
+
###############################################################################
|
|
6
|
+
|
|
7
|
+
module Shared
|
|
8
|
+
|
|
9
|
+
###############################################################################
|
|
10
|
+
|
|
11
|
+
class Provider
|
|
12
|
+
|
|
13
|
+
###############################################################################
|
|
14
|
+
|
|
15
|
+
include TerraformWrapper::Shared::Logging
|
|
16
|
+
|
|
17
|
+
###############################################################################
|
|
18
|
+
|
|
19
|
+
attr_reader :platforms
|
|
20
|
+
|
|
21
|
+
###############################################################################
|
|
22
|
+
|
|
23
|
+
def initialize(options:)
|
|
24
|
+
logger.fatal("Provider platforms to prefetch hashs for must be an array!") unless options["platforms"].kind_of?(Array)
|
|
25
|
+
|
|
26
|
+
@platforms = options["platforms"]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
###############################################################################
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
###############################################################################
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
###############################################################################
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
###############################################################################
|
|
@@ -14,6 +14,10 @@ module TerraformWrapper
|
|
|
14
14
|
|
|
15
15
|
include TerraformWrapper::Shared::Logging
|
|
16
16
|
|
|
17
|
+
###############################################################################
|
|
18
|
+
|
|
19
|
+
@@lockfile_name = ".terraform.lock.hcl"
|
|
20
|
+
|
|
17
21
|
###############################################################################
|
|
18
22
|
|
|
19
23
|
attr_reader :binary
|
|
@@ -35,52 +39,76 @@ module TerraformWrapper
|
|
|
35
39
|
|
|
36
40
|
###############################################################################
|
|
37
41
|
|
|
38
|
-
def download
|
|
42
|
+
def download
|
|
39
43
|
parameters = Array.new
|
|
40
44
|
parameters.append("-backend=false")
|
|
41
|
-
parameters.append("-upgrade") if upgrade
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
logger.fatal("Failed to download Terraform modules.") unless run(action: "init", parameters: parameters)
|
|
47
|
+
|
|
48
|
+
@downloaded = true
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
###############################################################################
|
|
48
52
|
|
|
49
|
-
def
|
|
50
|
-
|
|
53
|
+
def init(config:)
|
|
54
|
+
parameters = Array.new
|
|
55
|
+
parameters.append("-reconfigure")
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
config.backend.hash.each do |key, value|
|
|
58
|
+
parameters.append("-backend-config=\"#{key}=#{value}\"")
|
|
59
|
+
end
|
|
55
60
|
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
config.auths.map(&:auth)
|
|
62
|
+
|
|
63
|
+
logger.fatal("Failed to initialise Terraform with backend.") unless run(action: "init", parameters: parameters)
|
|
64
|
+
|
|
65
|
+
@config = config
|
|
66
|
+
@initialised = true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
###############################################################################
|
|
70
|
+
|
|
71
|
+
def upgrade
|
|
72
|
+
lockfile_path = File.join(@code.path, @@lockfile_name)
|
|
73
|
+
|
|
74
|
+
if File.file?(lockfile_path)
|
|
75
|
+
logger.info("Removing lock file: #{lockfile_path}")
|
|
76
|
+
File.delete(lockfile_path)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
logger.fatal("Lock file removal failed!") if File.file?(lockfile_path)
|
|
58
80
|
|
|
59
81
|
parameters = Array.new
|
|
60
|
-
parameters.
|
|
61
|
-
|
|
82
|
+
parameters.append("-update")
|
|
83
|
+
logger.fatal("Failed to upgrade Terraform modules!") unless run(action: "get", parameters: parameters)
|
|
62
84
|
|
|
63
|
-
parameters.
|
|
64
|
-
parameters.append("
|
|
85
|
+
parameters = Array.new
|
|
86
|
+
parameters.append("lock")
|
|
65
87
|
|
|
66
|
-
|
|
88
|
+
@binary.provider.platforms.each do |platform|
|
|
89
|
+
parameters.append("-platform=\"#{platform}\"")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
logger.fatal("Failed to upgrade Terraform providers!") unless run(action: "providers", parameters: parameters)
|
|
67
93
|
end
|
|
68
94
|
|
|
69
95
|
###############################################################################
|
|
70
96
|
|
|
71
|
-
def
|
|
97
|
+
def apply(file: nil)
|
|
98
|
+
logger.fatal("Cannot Terraform apply before initialising backend!") unless initialised
|
|
99
|
+
|
|
72
100
|
parameters = Array.new
|
|
73
|
-
parameters.append("-
|
|
101
|
+
parameters.append("-auto-approve")
|
|
74
102
|
|
|
75
|
-
|
|
76
|
-
|
|
103
|
+
if (not file.nil?) and file.kind_of?(String) and (not file.strip.empty?) then
|
|
104
|
+
logger.fatal("Plan file: #{file} does not exist!") unless File.file?(file)
|
|
105
|
+
parameters.append("\"#{file}\"")
|
|
106
|
+
else
|
|
107
|
+
parameters.concat(variable_files)
|
|
108
|
+
parameters.concat(variable_strings)
|
|
77
109
|
end
|
|
78
110
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
@config = config
|
|
82
|
-
@initialised = run(action: "init", parameters: parameters)
|
|
83
|
-
logger.fatal("Failed to initialise Terraform with backend.") unless @initialised
|
|
111
|
+
logger.fatal("Terraform apply failed!") unless run(action: "apply", parameters: parameters)
|
|
84
112
|
end
|
|
85
113
|
|
|
86
114
|
###############################################################################
|
|
@@ -104,35 +132,37 @@ module TerraformWrapper
|
|
|
104
132
|
|
|
105
133
|
###############################################################################
|
|
106
134
|
|
|
107
|
-
def
|
|
108
|
-
logger.fatal("Cannot Terraform
|
|
135
|
+
def destroy
|
|
136
|
+
logger.fatal("Cannot Terraform destroy before initialising backend!") unless initialised
|
|
109
137
|
|
|
110
138
|
parameters = Array.new
|
|
111
139
|
parameters.concat(variable_files)
|
|
112
140
|
parameters.concat(variable_strings)
|
|
113
141
|
parameters.append("-auto-approve")
|
|
114
142
|
|
|
115
|
-
|
|
116
|
-
logger.fatal("Plan file: #{file} does not exist!") unless File.file?(file)
|
|
117
|
-
parameters.append("\"#{file}\"")
|
|
118
|
-
else
|
|
119
|
-
parameters.concat(variable_files)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
logger.fatal("Terraform apply failed!") unless run(action: "apply", parameters: parameters)
|
|
143
|
+
logger.fatal("Terraform destroy failed!") unless run(action: "destroy", parameters: parameters)
|
|
123
144
|
end
|
|
124
145
|
|
|
125
146
|
###############################################################################
|
|
126
147
|
|
|
127
|
-
def
|
|
128
|
-
logger.fatal("Cannot Terraform
|
|
148
|
+
def import(address: nil, id: nil)
|
|
149
|
+
logger.fatal("Cannot Terraform import before initialising backend!") unless initialised
|
|
150
|
+
|
|
151
|
+
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
152
|
+
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
153
|
+
logger.fatal("Terraform state address for import must not be blank!") if address.strip.empty?
|
|
154
|
+
|
|
155
|
+
logger.fatal("Identification for infrastructure to import must be a string!") unless id.kind_of?(String)
|
|
156
|
+
logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty?
|
|
129
157
|
|
|
130
158
|
parameters = Array.new
|
|
131
159
|
parameters.concat(variable_files)
|
|
132
160
|
parameters.concat(variable_strings)
|
|
133
|
-
parameters.append("-auto-approve")
|
|
134
161
|
|
|
135
|
-
|
|
162
|
+
parameters.append("'#{address}'")
|
|
163
|
+
parameters.append("'#{id}'")
|
|
164
|
+
|
|
165
|
+
logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters)
|
|
136
166
|
end
|
|
137
167
|
|
|
138
168
|
###############################################################################
|
|
@@ -146,6 +176,27 @@ module TerraformWrapper
|
|
|
146
176
|
|
|
147
177
|
private
|
|
148
178
|
|
|
179
|
+
###############################################################################
|
|
180
|
+
|
|
181
|
+
def run(action:, parameters: Array.new)
|
|
182
|
+
result = false
|
|
183
|
+
|
|
184
|
+
parameters.reject! { |item| not item.kind_of?(String) or item.strip.empty? }
|
|
185
|
+
|
|
186
|
+
cmdline = [ "\"#{@binary.path}\"", action ].concat(parameters).join(" ")
|
|
187
|
+
|
|
188
|
+
logger.info("Starting Terraform, action: #{action}")
|
|
189
|
+
|
|
190
|
+
puts("\n" + ('#' * 80) + "\n\n")
|
|
191
|
+
|
|
192
|
+
Dir.chdir(@code.path)
|
|
193
|
+
result = system(cmdline) || false
|
|
194
|
+
|
|
195
|
+
puts("\n" + ('#' * 80) + "\n\n")
|
|
196
|
+
|
|
197
|
+
return result
|
|
198
|
+
end
|
|
199
|
+
|
|
149
200
|
###############################################################################
|
|
150
201
|
|
|
151
202
|
def variable_files
|
|
@@ -174,27 +225,6 @@ module TerraformWrapper
|
|
|
174
225
|
return result
|
|
175
226
|
end
|
|
176
227
|
|
|
177
|
-
###############################################################################
|
|
178
|
-
|
|
179
|
-
def run(action:, parameters: Array.new)
|
|
180
|
-
result = false
|
|
181
|
-
|
|
182
|
-
parameters.reject! { |item| not item.kind_of?(String) or item.strip.empty? }
|
|
183
|
-
|
|
184
|
-
cmdline = [ "\"#{@binary.path}\"", action ].concat(parameters).join(" ")
|
|
185
|
-
|
|
186
|
-
logger.info("Starting Terraform, action: #{action}")
|
|
187
|
-
|
|
188
|
-
puts("\n" + ('#' * 80) + "\n\n")
|
|
189
|
-
|
|
190
|
-
Dir.chdir(@code.path)
|
|
191
|
-
result = system(cmdline) || false
|
|
192
|
-
|
|
193
|
-
puts("\n" + ('#' * 80) + "\n\n")
|
|
194
|
-
|
|
195
|
-
return result
|
|
196
|
-
end
|
|
197
|
-
|
|
198
228
|
###############################################################################
|
|
199
229
|
|
|
200
230
|
end
|
|
@@ -34,12 +34,12 @@ 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
|
|
37
|
+
task :upgrade => [:binary] 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}...")
|
|
41
41
|
|
|
42
|
-
runner.
|
|
42
|
+
runner.upgrade
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
data/lib/terraform-wrapper.rb
CHANGED
|
@@ -43,8 +43,12 @@ module TerraformWrapper
|
|
|
43
43
|
config_options["backend-options"] = options.key?("config-backend-options") ? options["config-backend-options"] : Hash.new
|
|
44
44
|
config_options["service"] = service
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
provider_options = Hash.new
|
|
47
|
+
provider_options["platforms"] = options.key?("provider-platforms") ? options["provider-platforms"] : Array.new
|
|
48
|
+
|
|
49
|
+
provider = TerraformWrapper::Shared::Provider.new(options: provider_options)
|
|
50
|
+
binary = TerraformWrapper::Shared::Binary.new(options: binary_options, provider: provider)
|
|
51
|
+
code = TerraformWrapper::Shared::Code.new(options: code_options)
|
|
48
52
|
|
|
49
53
|
tasks = Array.new
|
|
50
54
|
tasks << TerraformWrapper::Tasks::Apply.new(binary: binary, code: code, options: config_options)
|
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.2.
|
|
4
|
+
version: 1.2.6
|
|
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-
|
|
11
|
+
date: 2021-08-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -71,6 +71,7 @@ files:
|
|
|
71
71
|
- lib/terraform-wrapper/shared/latest.rb
|
|
72
72
|
- lib/terraform-wrapper/shared/logger.rb
|
|
73
73
|
- lib/terraform-wrapper/shared/logging.rb
|
|
74
|
+
- lib/terraform-wrapper/shared/provider.rb
|
|
74
75
|
- lib/terraform-wrapper/shared/runner.rb
|
|
75
76
|
- lib/terraform-wrapper/shared/variables.rb
|
|
76
77
|
- lib/terraform-wrapper/tasks.rb
|
|
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
107
108
|
- !ruby/object:Gem::Version
|
|
108
109
|
version: '0'
|
|
109
110
|
requirements: []
|
|
110
|
-
rubygems_version: 3.2.
|
|
111
|
+
rubygems_version: 3.2.22
|
|
111
112
|
signing_key:
|
|
112
113
|
specification_version: 4
|
|
113
114
|
summary: A ruby wrapper for managing Terraform binaries and remote state.
|