Class: Bosh::Director::DeploymentPlan::ReleaseVersion

Inherits:
Object
  • Object
show all
Includes:
ValidationHelper
Defined in:
lib/bosh/director/deployment_plan/release_version.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ValidationHelper

#safe_property

Constructor Details

#initialize(deployment_model, spec) ⇒ ReleaseVersion

Returns a new instance of ReleaseVersion.

Parameters:

  • deployment_plan (DeploymentPlan)

    Deployment plan

  • spec (Hash)

    Raw release spec from the deployment manifest



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 16

def initialize(deployment_model, spec)
  @deployment_model = deployment_model

  @name = safe_property(spec, 'name', :class => String)
  @version = safe_property(spec, 'version', :class => String)

  @model = nil
  @templates = {}

  @logger = Config.logger
  @manager = Api::ReleaseManager.new
end

Instance Attribute Details

#modelModels::ReleaseVersion (readonly)

Returns Release version model.

Returns:



11
12
13
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 11

def model
  @model
end

#nameString (readonly)

Returns Release name.

Returns:

  • (String)

    Release name



7
8
9
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 7

def name
  @name
end

#versionString (readonly)

Returns Release version.

Returns:

  • (String)

    Release version



9
10
11
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 9

def version
  @version
end

Instance Method Details

#bind_modelvoid

This method returns an undefined value.

Looks up release version in database and binds it to the deployment



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 31

def bind_model
  if @deployment_model.nil?
    raise DirectorError, 'Deployment not bound in the deployment plan'
  end

  release = @manager.find_by_name(@name)
  @model = @manager.find_version(release, @version)
  @logger.debug("Found release '#{@name}/#{@version}'")

  unless @deployment_model.release_versions.include?(@model)
    @logger.debug("Binding release '#{@name}/#{@version}' " +
                  "to deployment '#{@deployment_model.name}'")
    @deployment_model.add_release_version(@model)
  end
end

#bind_templatesvoid

This method returns an undefined value.

Looks up package and template models in DB and binds them to this release spec



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 50

def bind_templates
  # ReleaseVersion model needs to be known so we can look up its
  # templates
  if @model.nil?
    raise DirectorError, 'ReleaseVersion model not bound in release spec'
  end

  # By now job specs from the deployment manifest should
  # have been parsed, so we can assume @templates contains
  # the list of templates that need to be bound
  @templates.each_value do |template|
    @logger.debug("Binding template '#{template.name}'")
    template.bind_models
    @logger.debug("Bound template '#{template.name}'")
  end
end

#get_or_create_template(name) ⇒ Object

Adds template to a list of templates used by this release for the current deployment

Parameters:

  • options (String)

    Template name



97
98
99
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 97

def get_or_create_template(name)
  @templates[name] ||= Template.new(self, name)
end

#get_package_model_by_name(name) ⇒ Models::Package

Looks up up package model by package name

Parameters:

  • name (String)

    Package name

Returns:



90
91
92
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 90

def get_package_model_by_name(name)
  @model.package_by_name(name)
end

#get_template_model_by_name(name) ⇒ Models::Template

Looks up up template model by template name

Parameters:

  • name (String)

    Template name

Returns:



78
79
80
81
82
83
84
85
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 78

def get_template_model_by_name(name)
  @all_templates ||= @model.templates.inject({}) do |hash, template|
    hash[template.name] = template
    hash
  end

  @all_templates[name]
end

#specHash

Returns Hash representation.

Returns:

  • (Hash)

    Hash representation



68
69
70
71
72
73
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 68

def spec
  {
    'name' => @name,
    'version' => @version
  }
end

#template(name) ⇒ DeploymentPlan::Template

Returns Template with given name used by this release (if any).

Parameters:

  • name (String)

    Template name

Returns:



104
105
106
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 104

def template(name)
  @templates[name]
end

#templatesArray<DeploymentPlan::Template>

Returns a list of job templates that need to be included into this release. Note that this is not just a list of all templates existing in the release but rather a list of templates for jobs that are included into current deployment plan.

Returns:



113
114
115
# File 'lib/bosh/director/deployment_plan/release_version.rb', line 113

def templates
  @templates.values
end