terraform-wrapper 1.2.0 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
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.