mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-07-19 04:49:19 +00:00
This script needs: - a list of domains managed by GANDI LiveDNS - a list of IP addresses of clusters (like in tags/*/ips.txt) It will replace the current configuration for these domains so that they point to the clusters. The apex of each domain and a wildcard entry will have round-robin records pointing to all the nodes of the cluster. In addition, there will be records node[1234...] pointing to each individual node.
50 lines
1.2 KiB
Python
Executable File
50 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import os
|
|
import requests
|
|
import yaml
|
|
|
|
# configurable stuff
|
|
domains_file = "../../plentydomains/domains.txt"
|
|
config_file = os.path.join(
|
|
os.environ["HOME"], ".config/gandi/config.yaml")
|
|
tag = "test"
|
|
apiurl = "https://dns.api.gandi.net/api/v5/domains"
|
|
|
|
# inferred stuff
|
|
domains = open(domains_file).read().split()
|
|
apikey = yaml.safe_load(open(config_file))["apirest"]["key"]
|
|
ips = open(f"tags/{tag}/ips.txt").read().split()
|
|
settings_file = f"tags/{tag}/settings.yaml"
|
|
clustersize = yaml.safe_load(open(settings_file))["clustersize"]
|
|
|
|
# now do the fucking work
|
|
while domains and ips:
|
|
domain = domains[0]
|
|
domains = domains[1:]
|
|
cluster = ips[:clustersize]
|
|
ips = ips[clustersize:]
|
|
print(f"{domain} => {cluster}")
|
|
zone = ""
|
|
node = 0
|
|
for ip in cluster:
|
|
node += 1
|
|
zone += f"@ 300 IN A {ip}\n"
|
|
zone += f"* 300 IN A {ip}\n"
|
|
zone += f"node{node} 300 IN A {ip}\n"
|
|
r = requests.put(
|
|
f"{apiurl}/{domain}/records",
|
|
headers={"x-api-key": apikey},
|
|
data=zone)
|
|
print(r.text)
|
|
|
|
#r = requests.get(
|
|
# f"{apiurl}/{domain}/records",
|
|
# headers={"x-api-key": apikey},
|
|
# )
|
|
|
|
if domains:
|
|
print(f"Good, we have {len(domains)} domains left.")
|
|
|
|
if ips:
|
|
print(f"Crap, we have {len(ips)} IP addresses left.")
|