vagrant-terraform 0.1.11 → 0.1.12

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: dacbe62294c85a5ec69042adae409df5b1ec31dad1ed5f1700c172931ff5a98b
4
- data.tar.gz: 6b3eb82e39e8eb7c791f2c3ca9c3aff71074a2446fa8dae5cba7389271695d2e
3
+ metadata.gz: 5e305adfd79a1c56e8812dd068a5b2502a34236603ba57e1285597459d3e6387
4
+ data.tar.gz: db6c7c8e2235700b96fe3b548265b40fcb1624259e22f2efa036aabd293e6208
5
5
  SHA512:
6
- metadata.gz: 58b44ccfbb6005bbfd22fb548fcaef0f1357e7f984435d2c598eafe06bae935a62e2731c60e5e2e150771cd12f716cd272855b844c9532022724162b4a2409e5
7
- data.tar.gz: 38278548028309af518e1f323eb420dc422915a1aa52ffeaa512a3dd3f7b03db54b9c2d5026e69fffe3526c3cdd2a04e387fc601eee646c77e9edb79be3288c1
6
+ metadata.gz: fa6c9c6524467a8adf146fb8e41110df58d877e9f02de05252cfa776a6d37e0189b32c0ee1c1e342e4841155344791ffe28af32ea45f24625eb9491d663a364a
7
+ data.tar.gz: 246a8498c3cfa9ff61cf48fe713ccc1f838fe774858021c7194d5699d96dec3890b6aaf727ac8ffe27b361a1efef0b15937fa059ab336d0c4205a34f5016580f
@@ -172,6 +172,8 @@ END
172
172
 
173
173
  File.write(terraform_main_file, main_tf)
174
174
 
175
+ # Avoid downloading the provider every time even when it's in the cache
176
+ ENV['TF_PLUGIN_CACHE_MAY_BREAK_DEPENDENCY_LOCK_FILE'] = "1"
175
177
  retryable(on: Errors::TerraformError, tries: 100, sleep: 1) do
176
178
  begin
177
179
  terraform_execute(env, 'terraform init')
@@ -191,7 +193,33 @@ END
191
193
 
192
194
  retryable(on: Errors::TerraformError, tries: 10, sleep: 1) do
193
195
  begin
194
- terraform_execute(env, "terraform apply -auto-approve")
196
+ lockfile = '.vagrant/terraform/lock'
197
+ max_retries = 300
198
+ retry_delay = 2
199
+
200
+ File.open(lockfile, 'w') do |file|
201
+ retries = 0
202
+
203
+ # VM creation can't be done in parallel because multiple VMs might get the same ID
204
+ # Get a lock before creating VM with 'terraform apply'
205
+ until file.flock(File::LOCK_EX | File::LOCK_NB)
206
+ if retries >= max_retries
207
+ raise Errors::CreateVMError,
208
+ :error_message => "Failed to acquire lock after #{max_retries} attempts. Exiting."
209
+ end
210
+
211
+ @logger.debug("Lock is currently held. Retrying in #{retry_delay} seconds...")
212
+ retries += 1
213
+ sleep(retry_delay)
214
+ end
215
+
216
+ begin
217
+ terraform_execute(env, "terraform apply -auto-approve")
218
+ ensure
219
+ file.flock(File::LOCK_UN)
220
+ end
221
+ end
222
+
195
223
  rescue Errors::TerraformError => e
196
224
  # ==> vm_one: terraform stderr: ╷
197
225
  # ==> vm_one: │ Error: can't lock file '/var/lock/qemu-server/lock-100.conf' - got timeout
@@ -233,12 +261,18 @@ END
233
261
  raise e
234
262
  end
235
263
 
236
- # Creation failed. Terraform error message was 'clone failed: unable to create image: qemu-img: /mnt/pve/qnap-nfs/images/105/vm-105-cloudinit.qcow2: Could not create '/mnt/pve/qnap-nfs/images/105/vm-105-cloudinit.qcow2': No such file or directory'
237
- if e.message.gsub(ansi_escape_regex, '') =~ /.*unable to create image .* No such file or directory/
264
+ # Terraform error message was "clone failed: unable to create image: qemu-img: /mnt/pve/qnap-nfs/images/105/vm-105-cloudinit.qcow2: Could not create '/mnt/pve/qnap-nfs/images/105/vm-105-cloudinit.qcow2': No such file or directory"
265
+ if e.message.gsub(ansi_escape_regex, '') =~ /.*unable to create image: .* No such file or directory/
238
266
  env[:ui].info("Clone failed, retrying. Error was: #{e.message}")
239
267
  raise e
240
268
  end
241
269
 
270
+ # Terraform error message was 'Request cancelled'
271
+ if e.message.gsub(ansi_escape_regex, '').include?("Request cancelled")
272
+ env[:ui].info("Proxmox error: Request cancelled")
273
+ raise e
274
+ end
275
+
242
276
  if e.message.gsub(ansi_escape_regex, '') =~ /.*Error: [0-9 ]*unable to create VM [0-9]*: config file already exists/
243
277
  env[:ui].info("Proxmox ID conflict, retrying")
244
278
  raise e
@@ -22,6 +22,7 @@ module VagrantPlugins
22
22
  # dir_name = env[:root_path].basename.to_s.dup.gsub(/[^-a-z0-9_]/i, "")
23
23
  begin
24
24
  Dir.mkdir(File.dirname(terraform_dir)) unless File.exist?(File.dirname(terraform_dir))
25
+ FileUtils.touch("#{File.dirname(terraform_dir)}/lock")
25
26
  rescue => e
26
27
  retry if e.message =~ /File exists/
27
28
  env[:ui].error("terraform init failed: #{e.message}")
@@ -1,6 +1,6 @@
1
1
  module VagrantPlugins
2
2
  module TerraformProvider
3
- VERSION = '0.1.11'
3
+ VERSION = '0.1.12'
4
4
  end
5
5
  end
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mika Båtsman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-24 00:00:00.000000000 Z
11
+ date: 2025-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: filesize