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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/deckard/monitoring.rb', line 81
def self.failover(elastic_ip, primary_instance_id, secondary_instance_id, priority, schedule, failover, region)
if failover
begin
subject = "ALERT :: #{elastic_ip} attempting failover!"
body = "#{region} : #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id} attempting failover!"
log = subject + " " + body
Deckard::Util.alert(priority, subject, body, log, schedule, "http://#{elastic_ip}")
Deckard::Stats.alert(priority, "unknown", "http://#{elastic_ip}", "failover")
instance_id = Deckard::Ec2.get_association(region, elastic_ip)
if Deckard::Ec2.disassociate_address(region, elastic_ip)
Deckard::Log.info("ALERT :: Disassociated #{elastic_ip}")
else
Deckard::Log.info("ALERT :: Could not disassociate #{elastic_ip}")
Deckard::Util.alert(priority, "ALERT :: Could not disassociate #{elastic_ip}", "ALERT :: Could not disassoci
ate #{elastic_ip} - #{region}", log, schedule, "http://#{elastic_ip}")
end
if instance_id == primary_instance_id
if Deckard::Ec2.associate_address(region, secondary_instance_id, elastic_ip)
info = "ALERT :: associated #{elastic_ip} to #{secondary_instance_id}"
Deckard::Log.info("ALERT :: associated #{elastic_ip} to #{secondary_instance_id}")
subject = "ALERT :: Failover Complete for #{elastic_ip} #{secondary_instance_id}"
body = "VERIFY THINGS ARE WORKING! #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}"
Deckard::Util.alert(priority, subject, body, subject, schedule, "http://#{elastic_ip}")
else
info = "ALERT :: Could not associate #{elastic_ip}"
Deckard::Log.info(info)
Deckard::Util.alert(priority, info, info, log, schedule, "http://#{elastic_ip}")
end
elsif instance_id == secondary_instance_id
if Deckard::Ec2.associate_address(region, primary_instance_id, elastic_ip)
info = "ALERT :: associated #{elastic_ip} to #{secondary_instance_id}"
Deckard::Log.info("ALERT :: associated #{elastic_ip} to #{secondary_instance_id}")
subject = "ALERT :: Failover Complete for #{elastic_ip} #{secondary_instance_id}"
body = "VERIFY THINGS ARE WORKING! #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}"
Deckard::Util.alert(priority, subject, body, subject, schedule, "http://#{elastic_ip}")
else
info = "ALERT :: Could not associate #{elastic_ip}"
Deckard::Log.info(info)
Deckard::Util.alert(priority, info, info, log, schedule, "http://#{elastic_ip}")
end
else
error = "ALERT :: Could not a failover #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}!!"
log = "ALERT :: Could not a failover #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}!! Due to instance_id != primary and secondary"
Deckard::Util.alert(priority, error, error, log, schedule, "http://#{elastic_ip}")
end
rescue Exception => e
error = "ALERT :: Could not a failover #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}!!"
log = "ALERT :: Could not a failover #{elastic_ip} => #{primary_instance_id} / #{secondary_instance_id}!!"
Deckard::Log.error(e)
Deckard::Util.alert(priority, error, error, log, schedule, "http://#{elastic_ip}")
end
else
Deckard::Log.info("ALERT :: not failing over due to failover=false")
end
end
|