Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/terraform/state.rb')
-rw-r--r--app/models/terraform/state.rb24
1 files changed, 21 insertions, 3 deletions
diff --git a/app/models/terraform/state.rb b/app/models/terraform/state.rb
index c50b9da1310..419fffcb666 100644
--- a/app/models/terraform/state.rb
+++ b/app/models/terraform/state.rb
@@ -5,27 +5,34 @@ module Terraform
include UsageStatistics
include FileStoreMounter
- DEFAULT = '{"version":1}'.freeze
HEX_REGEXP = %r{\A\h+\z}.freeze
UUID_LENGTH = 32
belongs_to :project
belongs_to :locked_by_user, class_name: 'User'
+ has_many :versions, class_name: 'Terraform::StateVersion', foreign_key: :terraform_state_id
+ has_one :latest_version, -> { ordered_by_version_desc }, class_name: 'Terraform::StateVersion', foreign_key: :terraform_state_id
+
+ scope :versioning_not_enabled, -> { where(versioning_enabled: false) }
+
validates :project_id, presence: true
validates :uuid, presence: true, uniqueness: true, length: { is: UUID_LENGTH },
format: { with: HEX_REGEXP, message: 'only allows hex characters' }
default_value_for(:uuid, allows_nil: false) { SecureRandom.hex(UUID_LENGTH / 2) }
+ default_value_for(:versioning_enabled, true)
mount_file_store_uploader StateUploader
- default_value_for(:file) { CarrierWaveStringFile.new(DEFAULT) }
-
def file_store
super || StateUploader.default_store
end
+ def latest_file
+ versioning_enabled ? latest_version&.file : file
+ end
+
def local?
file_store == ObjectStorage::Store::LOCAL
end
@@ -33,6 +40,17 @@ module Terraform
def locked?
self.lock_xid.present?
end
+
+ def update_file!(data, version:)
+ if versioning_enabled?
+ new_version = versions.build(version: version)
+ new_version.assign_attributes(created_by_user: locked_by_user, file: data)
+ new_version.save!
+ else
+ self.file = data
+ save!
+ end
+ end
end
end