-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
69 lines (49 loc) · 1.88 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from flask import Flask, redirect, render_template, request
import requests
import yaml
config_yaml = yaml.load(file("traffic-cop.yaml"))
app = Flask(__name__)
session_info = {
'customer_name': config_yaml['user']['org'],
'user_name': config_yaml['user']['name'],
'password': config_yaml['user']['password'],
}
headers = {'content-type': 'application/json'}
host = 'https://api.dynect.net/REST'
def get_session():
return requests.post(host + '/Session/', params=session_info,
headers=headers).json()['data']['token']
def get_load_balancers(domain):
formatted = {}
for balancer in requests.get(host + '/GSLB/' + domain,
headers=headers).json()['data']:
formatted[domain] = balancer.split('/')[4].split('.')[:-2]
return formatted
def get_load_members(zone, fqdn):
lookup = host + '/LoadBalancePoolEntry/' + zone + '/' + fqdn + '?detail=Y'
return requests.get(lookup, headers=headers).json()['data']
def get_gslb_members(zone, fqdn):
lookup = host + '/GSLBRegionPoolEntry/' + zone + '/' + fqdn \
+ 'global?detail=Y'
return requests.get(lookup, headers=headers).json()['data']
@app.route('/login')
def login():
headers['Auth-Token'] = get_session()
return redirect('trafficcop')
@app.route('/logout')
def logout():
requests.delete(host + '/Session/', headers=headers)
headers['Auth-Token'] = ''
return 'Logged out'
@app.route('/trafficcop')
def trafficcop():
no_dots = []
for zone in config_yaml['domains']:
no_dots.append(zone.split('.')[0])
return render_template('trafficcop.html', zones=no_dots)
@app.route('/trafficcop/<zone>', methods=['GET', 'POST'])
def balance(zone):
load_balancers = get_load_balancers(zone + '.com')
return render_template('zone.html', load_balancers=load_balancers)
if __name__ == '__main__':
app.run(debug=True)