terraform-wrapper 1.2.0 → 1.2.3
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 +6 -2
- data/lib/terraform-wrapper/shared.rb +1 -0
- 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 +85 -59
- data/lib/terraform-wrapper/tasks/upgrade.rb +2 -2
- data/lib/terraform-wrapper/version.rb +1 -1
- 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: f79a8c4cca3d760d2dac3766055a31b94ce3d24785d946c37cf63c8976ef8000
|
|
4
|
+
data.tar.gz: ff9a1986b4473b7697439d3729f79dfffa18f22301436171f736ff238ee16394
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8e7271146e058d3166c7414710a85345fb3d5d26b5a5beaecdc36b416c6b65bf4197a0a6325cdeec04996e554f06c345fcee5878d23f0efd02b431261b047491
|
|
7
|
+
data.tar.gz: a097d6d1baf0373e7ed4ba14ef34d36ecf907b022c87da6ea747d2398d46dea65c3acf52a4d6dcc435b050debbf30e8d2ba288902d55219a44b18fabd459d667
|
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)
|
|
@@ -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,35 +39,13 @@ 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
|
-
|
|
43
|
-
@downloaded = run(action: "init", parameters: parameters)
|
|
44
|
-
logger.fatal("Failed to download Terraform modules.") unless @downloaded
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
###############################################################################
|
|
48
|
-
|
|
49
|
-
def import(address: nil, id: nil)
|
|
50
|
-
logger.fatal("Cannot Terraform import before initialising backend!") unless initialised
|
|
51
|
-
|
|
52
|
-
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
53
|
-
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
54
|
-
logger.fatal("Terraform state address for import must not be blank!") if address.strip.empty?
|
|
55
45
|
|
|
56
|
-
logger.fatal("
|
|
57
|
-
logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty?
|
|
46
|
+
logger.fatal("Failed to download Terraform modules.") unless run(action: "init", parameters: parameters)
|
|
58
47
|
|
|
59
|
-
|
|
60
|
-
parameters.concat(variable_files)
|
|
61
|
-
parameters.concat(variable_strings)
|
|
62
|
-
|
|
63
|
-
parameters.append("'#{address}'")
|
|
64
|
-
parameters.append("'#{id}'")
|
|
65
|
-
|
|
66
|
-
logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters)
|
|
48
|
+
@downloaded = true
|
|
67
49
|
end
|
|
68
50
|
|
|
69
51
|
###############################################################################
|
|
@@ -78,28 +60,31 @@ module TerraformWrapper
|
|
|
78
60
|
|
|
79
61
|
config.auths.map(&:auth)
|
|
80
62
|
|
|
63
|
+
logger.fatal("Failed to initialise Terraform with backend.") unless run(action: "init", parameters: parameters)
|
|
64
|
+
|
|
81
65
|
@config = config
|
|
82
|
-
@initialised =
|
|
83
|
-
logger.fatal("Failed to initialise Terraform with backend.") unless @initialised
|
|
66
|
+
@initialised = true
|
|
84
67
|
end
|
|
85
68
|
|
|
86
69
|
###############################################################################
|
|
87
70
|
|
|
88
|
-
def
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
parameters = Array.new
|
|
92
|
-
parameters.concat(variable_files)
|
|
93
|
-
parameters.concat(variable_strings)
|
|
71
|
+
def upgrade
|
|
72
|
+
lockfile_path = File.join(@code.path, @@lockfile_name)
|
|
94
73
|
|
|
95
|
-
if
|
|
96
|
-
logger.
|
|
97
|
-
|
|
74
|
+
if File.file?(lockfile_path)
|
|
75
|
+
logger.info("Removing lock file: #{lockfile_path}")
|
|
76
|
+
File.delete(lockfile_path)
|
|
98
77
|
end
|
|
99
78
|
|
|
100
|
-
|
|
79
|
+
logger.fatal("Lock file removal failed!") if File.file?(lockfile_path)
|
|
101
80
|
|
|
102
|
-
|
|
81
|
+
parameters = Array.new
|
|
82
|
+
parameters.append("-update")
|
|
83
|
+
logger.fatal("Failed to upgrade Terraform modules!") unless run(action: "get", parameters: parameters)
|
|
84
|
+
|
|
85
|
+
parameters = Array.new
|
|
86
|
+
parameters.append("lock")
|
|
87
|
+
logger.fatal("Failed to upgrade Terraform providers!") unless run(action: "providers", parameters: parameters)
|
|
103
88
|
end
|
|
104
89
|
|
|
105
90
|
###############################################################################
|
|
@@ -122,6 +107,25 @@ module TerraformWrapper
|
|
|
122
107
|
logger.fatal("Terraform apply failed!") unless run(action: "apply", parameters: parameters)
|
|
123
108
|
end
|
|
124
109
|
|
|
110
|
+
###############################################################################
|
|
111
|
+
|
|
112
|
+
def plan(destroy: false, file: nil)
|
|
113
|
+
logger.fatal("Cannot Terraform plan before initialising backend!") unless initialised
|
|
114
|
+
|
|
115
|
+
parameters = Array.new
|
|
116
|
+
parameters.concat(variable_files)
|
|
117
|
+
parameters.concat(variable_strings)
|
|
118
|
+
|
|
119
|
+
if not file.nil? and file.kind_of?(String) and not file.strip.empty? then
|
|
120
|
+
logger.fatal("Failed to create plan directory: #{directory}") unless ::TerraformWrapper.create_directory(directory: File.dirname(file), purpose: "plan")
|
|
121
|
+
parameters.append("-out=\"#{file}\"")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
parameters.append("-destroy") if destroy
|
|
125
|
+
|
|
126
|
+
logger.fatal("Terraform plan failed!") unless run(action: "plan", parameters: parameters)
|
|
127
|
+
end
|
|
128
|
+
|
|
125
129
|
###############################################################################
|
|
126
130
|
|
|
127
131
|
def destroy
|
|
@@ -135,6 +139,28 @@ module TerraformWrapper
|
|
|
135
139
|
logger.fatal("Terraform destroy failed!") unless run(action: "destroy", parameters: parameters)
|
|
136
140
|
end
|
|
137
141
|
|
|
142
|
+
###############################################################################
|
|
143
|
+
|
|
144
|
+
def import(address: nil, id: nil)
|
|
145
|
+
logger.fatal("Cannot Terraform import before initialising backend!") unless initialised
|
|
146
|
+
|
|
147
|
+
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
148
|
+
logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String)
|
|
149
|
+
logger.fatal("Terraform state address for import must not be blank!") if address.strip.empty?
|
|
150
|
+
|
|
151
|
+
logger.fatal("Identification for infrastructure to import must be a string!") unless id.kind_of?(String)
|
|
152
|
+
logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty?
|
|
153
|
+
|
|
154
|
+
parameters = Array.new
|
|
155
|
+
parameters.concat(variable_files)
|
|
156
|
+
parameters.concat(variable_strings)
|
|
157
|
+
|
|
158
|
+
parameters.append("'#{address}'")
|
|
159
|
+
parameters.append("'#{id}'")
|
|
160
|
+
|
|
161
|
+
logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters)
|
|
162
|
+
end
|
|
163
|
+
|
|
138
164
|
###############################################################################
|
|
139
165
|
|
|
140
166
|
def validate
|
|
@@ -146,6 +172,27 @@ module TerraformWrapper
|
|
|
146
172
|
|
|
147
173
|
private
|
|
148
174
|
|
|
175
|
+
###############################################################################
|
|
176
|
+
|
|
177
|
+
def run(action:, parameters: Array.new)
|
|
178
|
+
result = false
|
|
179
|
+
|
|
180
|
+
parameters.reject! { |item| not item.kind_of?(String) or item.strip.empty? }
|
|
181
|
+
|
|
182
|
+
cmdline = [ "\"#{@binary.path}\"", action ].concat(parameters).join(" ")
|
|
183
|
+
|
|
184
|
+
logger.info("Starting Terraform, action: #{action}")
|
|
185
|
+
|
|
186
|
+
puts("\n" + ('#' * 80) + "\n\n")
|
|
187
|
+
|
|
188
|
+
Dir.chdir(@code.path)
|
|
189
|
+
result = system(cmdline) || false
|
|
190
|
+
|
|
191
|
+
puts("\n" + ('#' * 80) + "\n\n")
|
|
192
|
+
|
|
193
|
+
return result
|
|
194
|
+
end
|
|
195
|
+
|
|
149
196
|
###############################################################################
|
|
150
197
|
|
|
151
198
|
def variable_files
|
|
@@ -174,27 +221,6 @@ module TerraformWrapper
|
|
|
174
221
|
return result
|
|
175
222
|
end
|
|
176
223
|
|
|
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
224
|
###############################################################################
|
|
199
225
|
|
|
200
226
|
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
|
|
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.3
|
|
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-06-09 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.15
|
|
111
112
|
signing_key:
|
|
112
113
|
specification_version: 4
|
|
113
114
|
summary: A ruby wrapper for managing Terraform binaries and remote state.
|