class PcfPause::Pause

Constants

TARGET_JOBS

Attributes

logger[R]

Public Class Methods

new(logger = Logger.new(STDOUT)) click to toggle source
# File lib/pcf_pause/pause.rb, line 23
def initialize(logger = Logger.new(STDOUT))
  @logger = logger
end

Public Instance Methods

connect_to_bosh(password, url, username) click to toggle source
# File lib/pcf_pause/pause.rb, line 76
def connect_to_bosh(password, url, username)
  logger.info("Connecting to OpsMan at #{url}")
  ops_man = PcfPause::OpsManInfo.new(url, username, password)

  manifest = ops_man.get_director_manifest
  uaa_secret = manifest['jobs'][0]['properties']['uaa']['clients']['ops_manager']['secret']
  director_ip = manifest['jobs'][0]['properties']['director']['address']

  product_id = ops_man.get_product_id 'cf'
  bosh_vms_value = ops_man.get_vm_names product_id
  bosh_command = "BOSH_CLIENT=ops_manager BOSH_CLIENT_SECRET=#{uaa_secret} BUNDLE_GEMFILE=/home/tempest-web/tempest/web/vendor/bosh/Gemfile bundle exec bosh -n --ca-cert /var/tempest/workspaces/default/root_ca_certificate -d /var/tempest/workspaces/default/deployments/#{product_id}.yml -t #{director_ip}"
  return bosh_command, bosh_vms_value
end
exec_ssh(ssh, command) click to toggle source
# File lib/pcf_pause/pause.rb, line 102
def exec_ssh(ssh, command)
  logger.debug 'SSH: executing command'
  ssh.exec!(command) do |ch, stream, data|
    puts data
    ch.on_request "exit-status" do |ch, data|
      exit_status = data.read_long
      raise "process terminated with exit status: #{exit_status}" if exit_status != 0
    end
  end
end
get_job_sequence(bosh_vms_value) click to toggle source
# File lib/pcf_pause/pause.rb, line 34
def get_job_sequence(bosh_vms_value)
  bosh_vms_value.select do |vm_name|
    TARGET_JOBS.any? { |job| vm_name.start_with?(job) }
  end
end
smoke_tests(url, username, password, key_path='') click to toggle source
# File lib/pcf_pause/pause.rb, line 40
def smoke_tests(url, username, password, key_path='')
  bosh_command, bosh_vms_value = connect_to_bosh(password, url, username)

  Net::SSH.start(URI.parse(url).host, 'ubuntu', keys: [key_path]) do |ssh|
    exec_ssh ssh, "#{bosh_command} #{smoke_tests_command}"
  end
  logger.info 'Smoke tests have finished'
end
smoke_tests_command() click to toggle source
# File lib/pcf_pause/pause.rb, line 98
def smoke_tests_command
  "run errand smoke-tests"
end
start(url, username, password, key_path='') click to toggle source
# File lib/pcf_pause/pause.rb, line 49
def start(url, username, password, key_path='')
  bosh_command, bosh_vms_value = connect_to_bosh(password, url, username)

  logger.info("Preparing to start instances")

  Net::SSH.start(URI.parse(url).host, 'ubuntu', keys: [key_path]) do |ssh|
    exec_ssh ssh, "#{bosh_command} #{start_command}"
    logger.info "Started"
  end
  logger.info 'All instances started'
end
start_command() click to toggle source
# File lib/pcf_pause/pause.rb, line 90
def start_command
  "start --force"
end
stop(url, username, password, key_path='') click to toggle source
# File lib/pcf_pause/pause.rb, line 61
def stop(url, username, password, key_path='')
  bosh_command, bosh_vms_value = connect_to_bosh(password, url, username)

  stop_sequence = get_job_sequence(bosh_vms_value).reverse

  logger.info("Preparing to stop instances #{stop_sequence.join(', ')}")
  Net::SSH.start(URI.parse(url).host, 'ubuntu', keys: [key_path]) do |ssh|
    stop_sequence.each do |job_name|
      exec_ssh ssh, "#{bosh_command} #{stop_command(job_name)}"
      logger.info "Stopped #{job_name}"
    end
  end
  logger.info 'All instances stopped'
end
stop_command(job_name) click to toggle source
# File lib/pcf_pause/pause.rb, line 94
def stop_command(job_name)
  "stop #{job_name} --hard"
end