class Bosh::Director::Jobs::Helpers::ReleaseVersionDeleter
Public Class Methods
new(release_deleter, package_deleter, template_deleter, logger, event_log)
click to toggle source
# File lib/bosh/director/jobs/helpers/release_version_deleter.rb, line 5 def initialize(release_deleter, package_deleter, template_deleter, logger, event_log) @release_deleter = release_deleter @package_deleter = package_deleter @template_deleter = template_deleter @logger = logger @event_log = event_log end
Public Instance Methods
delete(release_version, release, force)
click to toggle source
# File lib/bosh/director/jobs/helpers/release_version_deleter.rb, line 13 def delete(release_version, release, force) @logger.info('Checking for any deployments still using ' + 'this particular release version') deployments = release_version.deployments unless deployments.empty? names = deployments.map { |d| d.name }.join(', ') raise Bosh::Director::ReleaseVersionInUse, "ReleaseVersion '#{release.name}/#{release_version.version}' is still in use by: #{names}" end delete_release_version(release_version, force) end
Private Instance Methods
delete_release_version(release_version, force)
click to toggle source
# File lib/bosh/director/jobs/helpers/release_version_deleter.rb, line 30 def delete_release_version(release_version, force) errors = [] release = release_version.release packages_to_keep = [] packages_to_delete = [] templates_to_keep = [] templates_to_delete = [] # We don't delete packages inside this loop b/c Sequel will also delete # them from packages collection we're iterating on which will lead to # skipping some packages release_version.packages.each do |package| if package.release_versions == [release_version] packages_to_delete << package else packages_to_keep << package end end release_version.templates.each do |template| if template.release_versions == [release_version] templates_to_delete << template else templates_to_keep << template end end stage = @event_log.begin_stage('Deleting packages', packages_to_delete.count) packages_to_delete.each do |package| track_and_log(stage, "#{package.name}/#{package.version}") do @logger.info("Package #{package.name}/#{package.version} " + 'is only used by this release version ' + 'and will be deleted') errors += @package_deleter.delete(package, force) end end packages_to_keep.each do |package| @logger.info("Keeping package #{package.name}/#{package.version} " + 'as it is used by other release versions') package.remove_release_version(release_version) end stage = @event_log.begin_stage('Deleting jobs', templates_to_delete.count) templates_to_delete.each do |template| track_and_log(stage, "#{template.name}/#{template.version}") do @logger.info("Template #{template.name}/#{template.version} " + 'is only used by this release version ' + 'and will be deleted') errors += @template_deleter.delete(template, force) end end templates_to_keep.each do |template| @logger.info('Keeping job ' + "#{template.name}/#{template.version} as it is used " + 'by other release versions') template.remove_release_version(release_version) end @logger.info('Remove all deployments in release version') release_version.remove_all_deployments if errors.empty? || force release_version.destroy end if release.versions.empty? errors += @release_deleter.delete(release, force) end errors end
track_and_log(stage, task) { || ... }
click to toggle source
# File lib/bosh/director/jobs/helpers/release_version_deleter.rb, line 107 def track_and_log(stage, task) stage.advance_and_track(task) do @logger.info(task) yield end end