class Bosh::Director::JobRenderer

Public Class Methods

create() click to toggle source
# File lib/bosh/director/job_renderer.rb, line 6
def self.create
  new(App.instance.blobstores.blobstore, Config.logger)
end
new(blobstore, logger) click to toggle source
# File lib/bosh/director/job_renderer.rb, line 10
def initialize(blobstore, logger)
  @blobstore = blobstore
  @logger = logger
end

Public Instance Methods

render_job_instance(instance_plan) click to toggle source
# File lib/bosh/director/job_renderer.rb, line 19
def render_job_instance(instance_plan)
  instance = instance_plan.instance

  if instance_plan.templates.empty?
    @logger.debug("Skipping rendering templates for '#{instance}', no templates")
    return
  end

  @logger.debug("Rendering templates for instance #{instance}")

  job_template_loader = Core::Templates::JobTemplateLoader.new(@logger)

  instance_renderer = Core::Templates::JobInstanceRenderer.new(instance_plan.templates, job_template_loader)
  rendered_job_instance = instance_renderer.render(instance_plan.spec.as_template_spec)

  configuration_hash = rendered_job_instance.configuration_hash

  archive_model = instance.model.latest_rendered_templates_archive

  if archive_model && archive_model.content_sha1 == configuration_hash
    unless @blobstore.exists?(archive_model.blobstore_id)
      # If rendered template file in blobstore crashed, we re-upload it and update database with new blobstore_id
      rendered_templates_archive = rendered_job_instance.persist(@blobstore)
      archive_model.update({:blobstore_id => rendered_templates_archive.blobstore_id, :sha1 => rendered_templates_archive.sha1})
    end
    rendered_templates_archive = Core::Templates::RenderedTemplatesArchive.new(
      archive_model.blobstore_id,
      archive_model.sha1,
    )
  else
    rendered_templates_archive = rendered_job_instance.persist(@blobstore)
    instance.model.add_rendered_templates_archive(
      blobstore_id: rendered_templates_archive.blobstore_id,
      sha1: rendered_templates_archive.sha1,
      content_sha1: configuration_hash,
      created_at: Time.now,
    )
  end

  instance.configuration_hash = configuration_hash
  instance.template_hashes    = rendered_job_instance.template_hashes
  instance.rendered_templates_archive = rendered_templates_archive
end
render_job_instances(instance_plans) click to toggle source
# File lib/bosh/director/job_renderer.rb, line 15
def render_job_instances(instance_plans)
  instance_plans.each { |instance_plan| render_job_instance(instance_plan) }
end