aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-06-24 09:58:10 +0100
committerChristopher Baines <mail@cbaines.net>2018-06-24 09:58:10 +0100
commit2530d1abf4cbfd8ae0743b42c6ced5b44bd453ce (patch)
treef6b8260c0c278137f81f70d426c21f26110e480e /app
parentf5024ad542f221e13882cc0c01985625e45f0f7c (diff)
downloadgovuk-mini-environment-admin-2530d1abf4cbfd8ae0743b42c6ced5b44bd453ce.tar
govuk-mini-environment-admin-2530d1abf4cbfd8ae0743b42c6ced5b44bd453ce.tar.gz
Add locking around all Terraform actions
To prevent them conflicting. Terraform itself has a locking mechanism, which isn't being used, but this should be sufficient.
Diffstat (limited to 'app')
-rw-r--r--app/models/backends/terraform_aws/backend_methods.rb12
-rw-r--r--app/models/backends/terraform_aws/mini_environment_methods.rb12
-rw-r--r--app/models/backends/terraform_libvirt/backend_methods.rb12
-rw-r--r--app/models/backends/terraform_libvirt/mini_environment_methods.rb12
4 files changed, 32 insertions, 16 deletions
diff --git a/app/models/backends/terraform_aws/backend_methods.rb b/app/models/backends/terraform_aws/backend_methods.rb
index 52875e6..7489325 100644
--- a/app/models/backends/terraform_aws/backend_methods.rb
+++ b/app/models/backends/terraform_aws/backend_methods.rb
@@ -84,10 +84,14 @@ module Backends::TerraformAws::BackendMethods
end
def within_backend_terraform_working_directory(&block)
- TerraformWorkingDirectory.new(
- terraform_state_id,
- 'terraform/aws/backend'
- ).within_working_directory(&block)
+ with_advisory_lock(
+ "aws_backend_terraform_working_directory/#{id}"
+ ) do
+ TerraformWorkingDirectory.new(
+ terraform_state_id,
+ 'terraform/aws/backend'
+ ).within_working_directory(&block)
+ end
end
def available_data_snapshots
diff --git a/app/models/backends/terraform_aws/mini_environment_methods.rb b/app/models/backends/terraform_aws/mini_environment_methods.rb
index 6049829..1885af7 100644
--- a/app/models/backends/terraform_aws/mini_environment_methods.rb
+++ b/app/models/backends/terraform_aws/mini_environment_methods.rb
@@ -89,10 +89,14 @@ module Backends::TerraformAws::MiniEnvironmentMethods
end
def within_terraform_working_directory(mini_environment, &block)
- TerraformWorkingDirectory.new(
- mini_environment_state_id(mini_environment),
- 'terraform/aws/mini_environment'
- ).within_working_directory(&block)
+ with_advisory_lock(
+ "aws_mini_environment_terraform_working_directory/#{mini_environment.id}"
+ ) do
+ TerraformWorkingDirectory.new(
+ mini_environment_state_id(mini_environment),
+ 'terraform/aws/mini_environment'
+ ).within_working_directory(&block)
+ end
end
def mini_environment_state_id(mini_environment)
diff --git a/app/models/backends/terraform_libvirt/backend_methods.rb b/app/models/backends/terraform_libvirt/backend_methods.rb
index 00ac432..06b89e4 100644
--- a/app/models/backends/terraform_libvirt/backend_methods.rb
+++ b/app/models/backends/terraform_libvirt/backend_methods.rb
@@ -55,10 +55,14 @@ module Backends::TerraformLibvirt::BackendMethods
end
def within_backend_terraform_working_directory(&block)
- TerraformWorkingDirectory.new(
- terraform_state_id,
- 'terraform/libvirt/backend'
- ).within_working_directory(&block)
+ with_advisory_lock(
+ "libvirt_backend_terraform_working_directory/#{id}"
+ ) do
+ TerraformWorkingDirectory.new(
+ terraform_state_id,
+ 'terraform/libvirt/backend'
+ ).within_working_directory(&block)
+ end
end
def backend_terraform_states
diff --git a/app/models/backends/terraform_libvirt/mini_environment_methods.rb b/app/models/backends/terraform_libvirt/mini_environment_methods.rb
index 4ed8835..64781df 100644
--- a/app/models/backends/terraform_libvirt/mini_environment_methods.rb
+++ b/app/models/backends/terraform_libvirt/mini_environment_methods.rb
@@ -78,10 +78,14 @@ module Backends::TerraformLibvirt::MiniEnvironmentMethods
end
def within_terraform_working_directory(mini_environment, &block)
- TerraformWorkingDirectory.new(
- mini_environment_state_id(mini_environment),
- 'terraform/libvirt/mini_environment'
- ).within_working_directory(&block)
+ with_advisory_lock(
+ "libvirt_mini_environment_terraform_working_directory/#{mini_environment.id}"
+ ) do
+ TerraformWorkingDirectory.new(
+ mini_environment_state_id(mini_environment),
+ 'terraform/libvirt/mini_environment'
+ ).within_working_directory(&block)
+ end
end
def mini_environment_state_id(mini_environment)