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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bafe8ef5b2dd58357fd8ac1eb741deb4ace78e02d374f1711c727e5835731715
4
- data.tar.gz: 9899116a854e2ab82a4cfc6736f94321735593a7f03c6197715324415c8e5f30
3
+ metadata.gz: '08695485310df49bc046b08b37f9ba0bb9deb239a385de56c001d0a7abe0ec46'
4
+ data.tar.gz: f017a24cd6e27dacbfd7ee9fd754dc6765599ed650830029f40574d8cc6738e4
5
5
  SHA512:
6
- metadata.gz: 48a9f108a1b0dc5d111486d3f093b08c8e0a5d40f9a3d70211f537a1623dcb86019c39144177e774ee22e224fd23030e473bf3a5dd3b501131c3e6691312d83b
7
- data.tar.gz: d0dd56c21bd7b6345913b3117aa1921118d9b60fc31cb8bcef72dc6556868e7aeff9497104bda31331ad3b30e7be02cf1c71814a3549b09a9bbdeedbbdfa2a8e
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 ? "jsonc" : "json"
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(upgrade: false)
42
+ def download
39
43
  parameters = Array.new
40
44
  parameters.append("-backend=false")
41
- parameters.append("-upgrade") if upgrade
42
45
 
43
- @downloaded = run(action: "init", parameters: parameters)
44
- logger.fatal("Failed to download Terraform modules.") unless @downloaded
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 import(address: nil, id: nil)
50
- logger.fatal("Cannot Terraform import before initialising backend!") unless initialised
53
+ def init(config:)
54
+ parameters = Array.new
55
+ parameters.append("-reconfigure")
51
56
 
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?
57
+ config.backend.hash.each do |key, value|
58
+ parameters.append("-backend-config=\"#{key}=#{value}\"")
59
+ end
55
60
 
56
- logger.fatal("Identification for infrastructure to import must be a string!") unless id.kind_of?(String)
57
- logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty?
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.concat(variable_files)
61
- parameters.concat(variable_strings)
82
+ parameters.append("-update")
83
+ logger.fatal("Failed to upgrade Terraform modules!") unless run(action: "get", parameters: parameters)
62
84
 
63
- parameters.append("'#{address}'")
64
- parameters.append("'#{id}'")
85
+ parameters = Array.new
86
+ parameters.append("lock")
65
87
 
66
- logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters)
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 init(config:)
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("-reconfigure")
101
+ parameters.append("-auto-approve")
74
102
 
75
- config.backend.hash.each do |key, value|
76
- parameters.append("-backend-config=\"#{key}=#{value}\"")
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
- config.auths.map(&:auth)
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 apply(file: nil)
108
- logger.fatal("Cannot Terraform apply before initialising backend!") unless initialised
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
- if not file.nil? and file.kind_of?(String) and not file.strip.empty? then
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 destroy
128
- logger.fatal("Cannot Terraform destroy before initialising backend!") unless initialised
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
- logger.fatal("Terraform destroy failed!") unless run(action: "destroy", parameters: parameters)
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
@@ -11,6 +11,7 @@ require_relative 'shared/binary'
11
11
  require_relative 'shared/code'
12
12
  require_relative 'shared/config'
13
13
  require_relative 'shared/latest'
14
+ require_relative 'shared/provider'
14
15
  require_relative 'shared/runner'
15
16
  require_relative 'shared/variables'
16
17
 
@@ -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, :clean] do |t, args|
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.download(upgrade: true)
42
+ runner.upgrade
43
43
  end
44
44
  end
45
45
 
@@ -4,7 +4,7 @@ module TerraformWrapper
4
4
 
5
5
  ###############################################################################
6
6
 
7
- VERSION = "1.2.0"
7
+ VERSION = "1.2.6"
8
8
 
9
9
  ###############################################################################
10
10
 
@@ -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
- binary = TerraformWrapper::Shared::Binary.new(options: binary_options)
47
- code = TerraformWrapper::Shared::Code.new(options: code_options)
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.0
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-03-16 00:00:00.000000000 Z
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.3
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.