Class: Unsub::Main

Inherits:
Mjolnir show all
Defined in:
lib/unsub/main.rb

Constant Summary collapse

KNIFE =
[
  File.join(ENV['HOME'], '.chef', 'knife.rb'),
  File.join('/etc', 'chef', 'knife.rb'),
  ENV['KNIFE']
].select { |f| f && File.exists?(f) }.shift

Constants inherited from Mjolnir

Unsub::Mjolnir::COMMON_OPTIONS

Instance Method Summary collapse

Methods inherited from Mjolnir

include_common_options

Instance Method Details

#artObject



40
41
42
# File 'lib/unsub/main.rb', line 40

def art
  puts "\n%s\n" % ART
end

#goObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# 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

#versionObject



34
35
36
# File 'lib/unsub/main.rb', line 34

def version
  puts VERSION
end