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
|