Class: Bosh::Director::Jobs::ExportRelease

Inherits:
BaseJob show all
Includes:
LockHelper
Defined in:
lib/bosh/director/jobs/export_release.rb

Instance Attribute Summary

Attributes inherited from BaseJob

#task_id

Class Method Summary collapse

Instance Method Summary collapse

Methods included from LockHelper

#with_compile_lock, #with_deployment_lock, #with_release_lock, #with_release_locks, #with_stemcell_lock

Methods inherited from BaseJob

#begin_stage, #event_log, #logger, perform, #result_file, #single_step_stage, #task_cancelled?, #task_checkpoint, #track_and_log

Constructor Details

#initialize(deployment_name, release_name, release_version, stemcell_os, stemcell_version, options = {}) ⇒ ExportRelease

Returns a new instance of ExportRelease.



18
19
20
21
22
23
24
# File 'lib/bosh/director/jobs/export_release.rb', line 18

def initialize(deployment_name, release_name, release_version, stemcell_os, stemcell_version, options = {})
  @deployment_name = deployment_name
  @release_name = release_name
  @release_version = release_version
  @stemcell_os = stemcell_os
  @stemcell_version = stemcell_version
end

Class Method Details

.job_typeObject



14
15
16
# File 'lib/bosh/director/jobs/export_release.rb', line 14

def self.job_type
  :export_release
end

Instance Method Details

#performvoid

This method returns an undefined value.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/bosh/director/jobs/export_release.rb', line 27

def perform
  logger.info("Exporting release: #{@release_name}/#{@release_version} for #{@stemcell_os}/#{@stemcell_version}")

  stemcell_manager = Bosh::Director::Api::StemcellManager.new
  @stemcell = stemcell_manager.find_by_os_and_version(@stemcell_os, @stemcell_version)

  logger.info "Will compile with stemcell: #{@stemcell.desc}"

  deployment_manager = Bosh::Director::Api::DeploymentManager.new
  @targeted_deployment = deployment_manager.find_by_name(@deployment_name)
  @deployment_manifest = Psych.load(@targeted_deployment.manifest)

  release_manager = Bosh::Director::Api::ReleaseManager.new
  release = release_manager.find_by_name(@release_name)
  @release_version_model = release_manager.find_version(release, @release_version)

  unless deployment_manifest_has_release?
    raise ReleaseNotMatchingManifest, "Release version `#{@release_name}/#{@release_version}' not found in deployment `#{@deployment_name}' manifest"
  end

  validate_release_packages

  lock_timeout = 15 * 60 # 15 minutes

  with_deployment_lock(@deployment_name, :timeout => lock_timeout) do
    with_release_lock(@release_name, :timeout => lock_timeout) do
      with_stemcell_lock(@stemcell.name, @stemcell.version, :timeout => lock_timeout) do

        planner = create_planner(stemcell_manager)
        package_compile_step = DeploymentPlan::Steps::PackageCompileStep.new(
            planner,
            Config.cloud, # CPI
            Config.logger,
            Config.event_log,
            self
        )
        package_compile_step.perform

        tarball_state = create_tarball
        result_file.write(tarball_state.to_json + "\n")

      end
    end
  end
  "Exported release: #{@release_name}/#{@release_version} for #{@stemcell_os}/#{@stemcell_version}"
end