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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bafe8ef5b2dd58357fd8ac1eb741deb4ace78e02d374f1711c727e5835731715
4
- data.tar.gz: 9899116a854e2ab82a4cfc6736f94321735593a7f03c6197715324415c8e5f30
3
+ metadata.gz: f79a8c4cca3d760d2dac3766055a31b94ce3d24785d946c37cf63c8976ef8000
4
+ data.tar.gz: ff9a1986b4473b7697439d3729f79dfffa18f22301436171f736ff238ee16394
5
5
  SHA512:
6
- metadata.gz: 48a9f108a1b0dc5d111486d3f093b08c8e0a5d40f9a3d70211f537a1623dcb86019c39144177e774ee22e224fd23030e473bf3a5dd3b501131c3e6691312d83b
7
- data.tar.gz: d0dd56c21bd7b6345913b3117aa1921118d9b60fc31cb8bcef72dc6556868e7aeff9497104bda31331ad3b30e7be02cf1c71814a3549b09a9bbdeedbbdfa2a8e
6
+ metadata.gz: 8e7271146e058d3166c7414710a85345fb3d5d26b5a5beaecdc36b416c6b65bf4197a0a6325cdeec04996e554f06c345fcee5878d23f0efd02b431261b047491
7
+ data.tar.gz: a097d6d1baf0373e7ed4ba14ef34d36ecf907b022c87da6ea747d2398d46dea65c3acf52a4d6dcc435b050debbf30e8d2ba288902d55219a44b18fabd459d667
@@ -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)
@@ -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
 
@@ -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(upgrade: false)
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("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?
46
+ logger.fatal("Failed to download Terraform modules.") unless run(action: "init", parameters: parameters)
58
47
 
59
- parameters = Array.new
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 = run(action: "init", parameters: parameters)
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 plan(destroy: false, file: nil)
89
- logger.fatal("Cannot Terraform plan before initialising backend!") unless initialised
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 not file.nil? and file.kind_of?(String) and not file.strip.empty? then
96
- logger.fatal("Failed to create plan directory: #{directory}") unless ::TerraformWrapper.create_directory(directory: File.dirname(file), purpose: "plan")
97
- parameters.append("-out=\"#{file}\"")
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
- parameters.append("-destroy") if destroy
79
+ logger.fatal("Lock file removal failed!") if File.file?(lockfile_path)
101
80
 
102
- logger.fatal("Terraform plan failed!") unless run(action: "plan", parameters: parameters)
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, :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.3"
8
8
 
9
9
  ###############################################################################
10
10
 
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.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-03-16 00:00:00.000000000 Z
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.3
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.