Authored by chunhua.zhang

no message

... ... @@ -53,4 +53,4 @@ zookeeper:
- 10.66.4.9
# for test
test_only: 127.0.0.1
\ No newline at end of file
db_test_only: 127.0.0.1
\ No newline at end of file
... ...
... ... @@ -51,4 +51,4 @@ zookeeper:
- 10.66.202.2
# for test
test_only: 127.0.0.1
\ No newline at end of file
db_test_only: 127.0.0.1
... ...
... ... @@ -228,4 +228,4 @@ search-mars IN A 10.66.251.4
now.redis IN A 10.66.251.11
;this is only for test
test.only IN A {{ test_only}}
\ No newline at end of file
db.test.only IN A {{ db_test_only}}
\ No newline at end of file
... ...
# -*- coding: utf8 -*-
import requests
from requests.auth import HTTPBasicAuth
import json
# dingding
DING = "https://oapi.dingtalk.com/robot/send?access_token=31cf1a526c98862b7945e561c5a0d857a069350dbee0e807074b83b39fa1e1af"
ansible_url = "https://ansible.yohops.com/api/v2"
ansible_user = "chunhua.zhang"
ansible_password = "Zch@2019"
def main_handler(event, context):
return_str = "OK"
if event['queryStringParameters']['method'] != 'master_fail_over' :
return_str = "Method Not Supported"
elif event['queryStringParameters']['auth'] != 'yohomysqlfailover123456887':
return_str = "Auth Failed"
else:
fail_master = event['queryStringParameters']['failmaster']
new_master = event['queryStringParameters']['newmaster']
return_str = "TEST ... Mysql Failover Proccess Successfully!"
ansible_tower_process(new_master, fail_master)
alert_to_dingding(new_master, fail_master)
return { "isBase64Encoded": False, "statusCode": 200, "headers": {} , "body": "%s" %return_str }
def ansible_tower_process(newmaster, failmaster):
## az1, az2, az3
for inventory in [6, 5, 4]:
extra_var = {}
r = requests.get(ansible_url + "/inventories/%i" %inventory, auth=(ansible_user, ansible_password))
inventory_vars = json.loads( r.json()['variables'])
for key in inventory_vars:
# only proccess variable's name starts with db and variable's value equals [failmaster]
if key.startswith("db") and inventory_vars[key] == failmaster:
extra_var[key] = newmaster
if not extra_var:
print("can not find any variables in all inventory files starts with db and value is %s" %failmaster)
return
# update dns
extra_var['confirmation'] = 'DNS'
dns_payload = {}
dns_payload['inventory'] = inventory
dns_payload['extra_vars'] = json.dumps(extra_var)
print("start to update dns for inventory: %i , params is: %s" %(inventory, dns_payload))
#r_dns = requests.post(ansible_url + "/api/v2/job_templates/36/launch", json = dns_payload)
def alert_to_dingding(newmaster, failmaster):
# send text dingding message. see:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257&articleId=105735&docType=1
ding_req = {}
ding_req["msgtype"]="markdown"
ding_req["markdown"] = {}
ding_req["markdown"]['title']="Mysql Failover"
ding_req["markdown"]["text"]= "### Mysql Master Failover. Fail Master: %s , New Master: %s" % (failmaster, newmaster)
r = requests.post(url = DING, json = ding_req)
print("Send DingDing message result:%s, request: %s " %(r, ding_req))
return("SUCCESS")
\ No newline at end of file
... ...