class Bosh::Cli::Command::Release::ExportRelease

Public Instance Methods

export(release, stemcell) click to toggle source
# File lib/cli/commands/release/export_release.rb, line 12
def export(release, stemcell)
  auth_required
  deployment_required
  manifest = Bosh::Cli::Manifest.new(deployment, director)
  manifest.load

  release = Bosh::Cli::NameVersionPair.parse(release)
  stemcell = Bosh::Cli::NameVersionPair.parse(stemcell)
  stemcell_os = stemcell.name

  client = Bosh::Cli::Client::ExportReleaseClient.new(director)
  status, task_id = client.export(manifest.name, release.name, release.version, stemcell_os, stemcell.version)

  if status != :done
    task_report(status, task_id)
    return
  end

  task_result_file = director.get_task_result_log(task_id)
  task_result = JSON.parse(task_result_file)
  tarball_blobstore_id = task_result['blobstore_id']
  tarball_sha1 = task_result['sha1']

  tarball_file_name = "release-#{release.name}-#{release.version}-on-#{stemcell_os}-stemcell-#{stemcell.version}.tgz"
  tarball_file_path = File.join(Dir.pwd, tarball_file_name)

  nl
  progress_renderer.start(tarball_file_name, "downloading...")
  tmpfile = director.download_resource(tarball_blobstore_id)

  FileUtils.move(tmpfile, tarball_file_path)
  progress_renderer.finish(tarball_file_name, "downloaded")

  if file_checksum(tarball_file_path) != tarball_sha1
    err("Checksum mismatch for downloaded blob `#{tarball_file_path}'")
  end

  task_report(status, task_id, "Exported release `#{release.name.make_green}/#{release.version.make_green}` for `#{stemcell_os.make_green}/#{stemcell.version.make_green}`")
end
file_checksum(path) click to toggle source

Returns file SHA1 checksum @param [String] path File path

# File lib/cli/commands/release/export_release.rb, line 54
def file_checksum(path)
  Digest::SHA1.file(path).hexdigest
end