class Bosh::Cli::Command::Maintenance
Constants
- RELEASES_TO_KEEP
- STEMCELLS_TO_KEEP
Public Instance Methods
cleanup()
click to toggle source
# File lib/cli/commands/maintenance.rb, line 11 def cleanup target_required auth_required show_current_state remove_all = !!options[:all] num_releases_to_keep = remove_all ? 0 : RELEASES_TO_KEEP num_stemcells_to_keep = remove_all ? 0 : STEMCELLS_TO_KEEP begin director.cleanup({'remove_all' => remove_all}) rescue Bosh::Cli::ResourceNotFound # old directors won't have `cleanup` endpoint, therefore use legacy endpoints nl cleanup_stemcells(num_stemcells_to_keep) nl cleanup_releases(num_releases_to_keep) end nl say('Cleanup complete'.make_green) end
Private Instance Methods
cleanup_releases(n_to_keep)
click to toggle source
# File lib/cli/commands/maintenance.rb, line 65 def cleanup_releases(n_to_keep) delete_list = [] say('Deleting old release versions') director.list_releases.each do |release| name = release['name'] versions = release['release_versions'].map { |release_version| release_version['version'] } currently_deployed = release['release_versions'] .select { |release_version| release_version['currently_deployed'] } .map { |release_version| release_version['version'] } version_tuples = versions.map do |v| { provided: v, parsed: Bosh::Common::Version::ReleaseVersion.parse(v) } end versions = version_tuples.sort_by { |v| v[:parsed] }.map { |v| v[:provided] } trim_array(versions, n_to_keep).each do |version| delete_list << [name, version] unless currently_deployed.include?(version) end end delete_list.each do |name, version| desc = "#{name}/#{version}" perform(desc) do director.delete_release(name, :force => false, :version => version, :quiet => true) end end say(' none found'.make_yellow) if delete_list.size == 0 end
cleanup_stemcells(n_to_keep)
click to toggle source
# File lib/cli/commands/maintenance.rb, line 36 def cleanup_stemcells(n_to_keep) stemcells_by_name = director.list_stemcells.inject({}) do |h, stemcell| h[stemcell['name']] ||= [] h[stemcell['name']] << stemcell h end delete_list = [] say('Deleting old stemcells') stemcells_by_name.each_pair do |_, stemcells| stemcells.reject! { |stemcell| !stemcell['deployments'].empty? } sorted_stemcells = stemcells.sort do |sc1, sc2| Bosh::Common::Version::StemcellVersion.parse(sc1['version']) <=> Bosh::Common::Version::StemcellVersion.parse(sc2['version']) end delete_list.concat(trim_array(sorted_stemcells, n_to_keep)) end delete_list.each do |stemcell| name, version = stemcell['name'], stemcell['version'] desc = "#{name}/#{version}" perform(desc) do director.delete_stemcell(name, version, :quiet => true) end end say(' none found'.make_yellow) if delete_list.size == 0 end
perform(desc) { || ... }
click to toggle source
# File lib/cli/commands/maintenance.rb, line 110 def perform(desc) say(" #{desc.make_yellow.ljust(40)}", '') say(' IN PROGRESS...'.make_yellow, '') status, task_id = yield responses = { :done => 'DELETED'.make_green, :non_trackable => 'CANNOT TRACK'.make_red, :track_timeout => 'TIMED OUT'.make_red, :error => 'ERROR'.make_red, } refresh(" #{desc.make_yellow.ljust(50)}#{responses[status]}\n") if status == :error result = director.get_task_result(task_id) say(" #{result.to_s.make_red}") end status == :done end
refresh(message)
click to toggle source
# File lib/cli/commands/maintenance.rb, line 104 def refresh(message) say("\r", '') say(' ' * 80, '') say("\r#{message}", '') end
trim_array(array, n_to_keep)
click to toggle source
# File lib/cli/commands/maintenance.rb, line 100 def trim_array(array, n_to_keep) n_to_keep > 0 ? array[0...(-n_to_keep)] : array end