Class: Bosh::Director::DeploymentPlan::DeploymentRepo

Inherits:
Object
  • Object
show all
Defined in:
lib/bosh/director/deployment_plan/deployment_repo.rb

Instance Method Summary collapse

Instance Method Details

#find_or_create_by_name(name) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/bosh/director/deployment_plan/deployment_repo.rb', line 5

def find_or_create_by_name(name)
  deployment = Models::Deployment.find(name: name)
  return deployment if deployment

  canonical_name = Canonicalizer.canonicalize(name)
  transactor = Transactor.new
  transactor.retryable_transaction(Models::Deployment.db) do
    Models::Deployment.each do |other|
      if Canonicalizer.canonicalize(other.name) == canonical_name
        raise DeploymentCanonicalNameTaken,
          "Invalid deployment name `#{name}', canonical name already taken (`#{canonical_name}')"
      end
    end
    Models::Deployment.create(name: name)
  end
end