class Unsub::Main

Constants

KNIFE

Public Instance Methods

art() click to toggle source
# File lib/unsub/main.rb, line 40
def art
  puts "\n%s\n" % ART
end
go() click to toggle source
# File lib/unsub/main.rb, line 73
def go
  db = Daybreak::DB.new options.database

  aws = {
    ec2: Aws::EC2::Client.new,
    sqs: Aws::SQS::Client.new
  }

  services = {
    icinga: Service::Icinga.new(options.icinga_cmd, log),
    sensu: Service::Sensu.new(options.sensu_url, log),
    chef: Service::Chef.new(options.knife_file, log)
  }

  log.info service: 'main', event: 'hello', \
    db: db, aws: aws, services: services

  loop do
    response = aws[:sqs].receive_message queue_url: options.queue_url

    response.messages.each do |raw|
      receipt = raw.receipt_handle
      body    = JSON.parse raw.body
      message = JSON.parse body['Message']
      event   = Event.new message, db, aws, services

      success = case event.kind
      when :launch
        s1 = services[:icinga].enable_notifications event.host
        s2 = services[:chef].remove_tag event.host, 'terminated'
        s3 = services[:chef].add_tag event.host, 'launched'
        s1 && s2 && s3
      when :terminate
        s1 = services[:sensu].delete_client event.host
        s2 = services[:icinga].disable_notifications event.host
        s3 = services[:chef].remove_tag event.host, 'launched'
        s4 = services[:chef].add_tag event.host, 'terminated'
        db.delete! event.host[:id]
        s1 && s2 && s3 && s4
      end

      aws[:sqs].delete_message \
        queue_url: options.queue_url,
        receipt_handle: receipt

      log.info service: 'main', event: 'processed', \
        message: message, receipt: receipt, success: success
    end
  end
end
version() click to toggle source
# File lib/unsub/main.rb, line 34
def version
  puts VERSION
end