cloudfoundry-community/bosh-cloudstack-cpi

View on GitHub
bosh_cli/lib/cli/commands/snapshot.rb

Summary

Maintainability
A
1 hr
Test Coverage
# Copyright (c) 2009-2013 VMware, Inc.

module Bosh::Cli::Command
  class Snapshot < Base
    usage 'snapshots'
    desc 'List all snapshots'
    def list(job = nil, index = nil)
      auth_required

      deployment_name = prepare_deployment_manifest['name']
      say("Deployment `#{deployment_name.make_green}'")

      snapshots = director.list_snapshots(deployment_name, job, index)

      sorted = snapshots.sort do |a, b|
        s = a['job'].to_s <=> b['job'].to_s
        s = a['index'].to_i <=> b['index'].to_i if s == 0
        s = a['created_at'].to_s <=> b['created_at'].to_s if s == 0
        s
      end

      snapshots_table = table do |t|
        t.headings = ['Job/index', 'Snapshot CID', 'Created at', 'Clean']

        sorted.each do |snapshot|
          job = "#{snapshot['job'] || 'unknown'}/#{snapshot['index'] || 'unknown'}"
          t << [job, snapshot['snapshot_cid'], snapshot['created_at'], snapshot['clean']]
        end
      end

      nl
      say(snapshots_table)
      nl
      say('Snapshots total: %d' % snapshots.size)
    end

    usage 'take snapshot'
    desc 'Takes a snapshot'
    def take(job = nil, index = nil)
      auth_required

      deployment_name = prepare_deployment_manifest['name']
      say("Deployment `#{deployment_name.make_green}'")

      unless job && index
        unless confirmed?("Are you sure you want to take a snapshot of all deployment `#{deployment_name}'?")
          say('Canceled taking snapshot'.make_green)
          return
        end
      end

      status, task_id = director.take_snapshot(deployment_name, job, index)

      task_report(status, task_id, 'Snapshot taken')
    end

    usage 'delete snapshot'
    desc 'Deletes a snapshot'
    def delete(snapshot_cid)
      auth_required

      deployment_name = prepare_deployment_manifest['name']
      say("Deployment `#{deployment_name.make_green}'")

      unless confirmed?("Are you sure you want to delete snapshot `#{snapshot_cid}'?")
        say('Canceled deleting snapshot'.make_green)
        return
      end

      status, task_id = director.delete_snapshot(deployment_name, snapshot_cid)

      task_report(status, task_id, "Deleted Snapshot `#{snapshot_cid}'")
    end

    usage 'delete snapshots'
    desc 'Deletes all snapshots of a deployment'
    def delete_all
      auth_required

      deployment_name = prepare_deployment_manifest['name']
      say("Deployment `#{deployment_name.make_green}'")

      unless confirmed?("Are you sure you want to delete all snapshots of deployment `#{deployment_name}'?")
        say('Canceled deleting snapshots'.make_green)
        return
      end

      status, task_id = director.delete_all_snapshots(deployment_name)

      task_report(status, task_id, "Deleted all snapshots of deployment `#{deployment_name}'")
    end
  end
end