From 63c1fd4b9076538d77137e159a4c07460dd635e2 Mon Sep 17 00:00:00 2001 From: Ken Raffenetti Date: Tue, 10 Oct 2006 15:06:52 +0000 Subject: added batch add script git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2424 ce84e21b-d406-0410-9b95-82705330c041 --- tools/batchadd.py | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100755 tools/batchadd.py (limited to 'tools/batchadd.py') diff --git a/tools/batchadd.py b/tools/batchadd.py new file mode 100755 index 000000000..728c5780d --- /dev/null +++ b/tools/batchadd.py @@ -0,0 +1,148 @@ +#!/usr/bin/python + +import sys, os +from datetime import date +os.environ['DJANGO_SETTINGS_MODULE'] = 'Hostbase.settings' +from Hostbase.hostbase.models import * +from Hostbase.settings import DEFAULT_MX, PRIORITY + +host_attribs = ['hostname', 'whatami', 'netgroup', 'security_class', 'support', + 'csi', 'printq', 'dhcp', 'outbound_smtp', 'primary_user', + 'administrator', 'location', 'expiration_date', 'comments'] + +def checkformat(values): + filelist = [] + for pair in values: + filelist.append(pair[0]) + + lines = len(filelist) + + while True: + if filelist and not filelist[0:14] == host_attribs: + # figure out what to do here + return 0 + sys.exit() + elif not filelist: + return 1 + else: + filelist = filelist[14:] + while True: + if filelist and filelist[0] == 'mac_addr': + filelist.pop(0) + if filelist and filelist[0] == 'hdwr_type': + filelist.pop(0) + while filelist and filelist[0] == 'ip_addr': + filelist.pop(0) + while filelist and filelist[0] == 'cname': + filelist.pop(0) + + if (filelist and filelist[0] == 'hostname') or not filelist: + break + +# argument handling for batchadd +try: + fd = open(sys.argv[1], 'r') +except (IndexError, IOError): + print "\nUsage: batchadd.py filename\n" + sys.exit() + +lines = fd.readlines() +info = [] +for line in lines: + if not line.lstrip(' ')[0] == '#' and not line == '\n': + info.append(line.split("->")) + +for x in range(0,len(info)): + if len(info[x]) > 1: + info[x][0] = info[x][0].strip() + info[x][1] = info[x][1].strip() + else: + print "Error: file format" + +if info[0][0] == 'mx' and info[1][0] == 'priority': + mx, created = MX.objects.get_or_create(mx=info[0][1], priority=info[1][1]) + try: + info.pop(0) + info.pop(0) + except: + print "Error: file format" + sys.exit() +else: + mx, created = MX.objects.get_or_create(mx=DEFAULT_MX, priority=PRIORITY) +if created: + mx.save() + +if not checkformat(info): + print "Error: file format" + sys.exit() + +while True: + blank = Host() + for attrib in host_attribs: + try: + pair = info.pop(0) + except: + sys.exit() + if pair[0] == 'dhcp' or pair[0] == 'outbound_smtp': + if pair[1] == 'y': + blank.__dict__[pair[0]] = 1 + else: + blank.__dict__[pair[0]] = 0 + elif pair[0] == 'expiration_date': + (year, month, day) = pair[1].split("-") + blank.expiration_date = date(int(year), int(month), int(day)) + elif pair[0] in host_attribs: + blank.__dict__[pair[0]] = pair[1] + + try: + host = Host.objects.get(hostname=blank.hostname) + print "Error: %s already exists in hostbase" % blank.hostname + sys.exit() + except: + pass + # do something here + blank.status = 'active' + blank.save() + newhostname = blank.hostname.split(".")[0] + newdomain = blank.hostname.split(".", 1)[1] + while True: + try: + info[0] + except: + sys.exit() + if info[0][0] == 'mac_addr': + pair = info.pop(0) + try: + Interface.get(mac_addr=pair[1]) + print "Error: %s already exists" % inter.mac_addr + sys.exit() + except: + inter = Interface.objects.create(host=blank, mac_addr=pair[1], hdwr_type='eth') + inter.save() + elif info[0][0] == 'hdwr_type': + pair = info.pop(0) + inter.hdwr_type = pair[1] + inter.save() + elif info[0][0] == 'ip_addr': + pair = info.pop(0) + ip = IP.objects.create(interface=inter, ip_addr=pair[1], num=1) + hostnamenode = Name(ip=ip, name=blank.hostname, dns_view='global', only=False) + hostnamenode.save() + namenode = Name(ip=ip, name=".".join([newhostname + "-" + inter.hdwr_type, + newdomain]), + dns_view="global", only=False) + namenode.save() + subnetnode = Name(ip=ip, name=newhostname + "-" + + ip.ip_addr.split(".")[2] + "." + + newdomain, dns_view="global", only=False) + subnetnode.save() + hostnamenode.mxs.add(mx) + namenode.mxs.add(mx) + subnetnode.mxs.add(mx) + elif info[0][0] == 'cname': + pair = info.pop(0) + cname = CName.objects.create(name=hostnamenode, cname=pair[1]) + cname.save() + else: + break + -- cgit v1.2.3-1-g7c22