mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import argparse
 | 
						|
import configparser
 | 
						|
import os
 | 
						|
 | 
						|
import digitalocean
 | 
						|
 | 
						|
 | 
						|
def get_config() -> configparser.ConfigParser:
 | 
						|
    config = configparser.ConfigParser()
 | 
						|
    config.read(os.path.join(os.path.dirname(os.path.abspath(__file__)), "conf.ini"))
 | 
						|
    return config
 | 
						|
 | 
						|
 | 
						|
parser = argparse.ArgumentParser(description="Clean up old A / AAAA records in zulipdev.org")
 | 
						|
parser.add_argument("--force", action="store_true")
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    config = get_config()
 | 
						|
    api_token = config["digitalocean"]["api_token"]
 | 
						|
 | 
						|
    seen_ips = set()
 | 
						|
    if not args.force:
 | 
						|
        print("WOULD DELETE:")
 | 
						|
 | 
						|
    manager = digitalocean.Manager(token=api_token)
 | 
						|
    my_droplets = manager.get_all_droplets()
 | 
						|
    for droplet in my_droplets:
 | 
						|
        seen_ips.add(droplet.ip_address)
 | 
						|
        if droplet.ipv6:
 | 
						|
            seen_ips.update(net["ip_address"] for net in droplet.networks["v6"])
 | 
						|
 | 
						|
    domain = digitalocean.Domain(token=api_token, name="zulipdev.org")
 | 
						|
    domain.load()
 | 
						|
    records = domain.get_records()
 | 
						|
 | 
						|
    for record in sorted(records, key=lambda e: ".".join(reversed(e.name.split(".")))):
 | 
						|
        if record.type not in ("AAAA", "A"):
 | 
						|
            continue
 | 
						|
        elif record.data in seen_ips:
 | 
						|
            continue
 | 
						|
        else:
 | 
						|
            print(f"{record.type} {record.name} = {record.data}")
 | 
						|
            if args.force:
 | 
						|
                record.destroy()
 | 
						|
 | 
						|
    if not args.force:
 | 
						|
        print("Re-run with --force to delete")
 |