summaryrefslogtreecommitdiffstats
path: root/tools/batchadd.py
diff options
context:
space:
mode:
authorKen Raffenetti <raffenet@mcs.anl.gov>2006-10-10 15:06:52 +0000
committerKen Raffenetti <raffenet@mcs.anl.gov>2006-10-10 15:06:52 +0000
commit63c1fd4b9076538d77137e159a4c07460dd635e2 (patch)
treea5283e497e5f12370bc08d5578d7a0f3a262670d /tools/batchadd.py
parent9c4c7093ffabcfc0f41c5da6f1d68ef134d5f747 (diff)
downloadbcfg2-63c1fd4b9076538d77137e159a4c07460dd635e2.tar.gz
bcfg2-63c1fd4b9076538d77137e159a4c07460dd635e2.tar.bz2
bcfg2-63c1fd4b9076538d77137e159a4c07460dd635e2.zip
added batch add script
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2424 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'tools/batchadd.py')
-rwxr-xr-xtools/batchadd.py148
1 files changed, 148 insertions, 0 deletions
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
+