diff --git a/src/hostinfo.py b/src/hostinfo.py index aa7408d608f2db465925cef5a772b89e0b0d1720..9045522fa0b8a64e787dc44840cd10decaedbda5 100755 --- a/src/hostinfo.py +++ b/src/hostinfo.py @@ -192,6 +192,9 @@ if __name__ == '__main__': optParser.add_option("--named", action="store", metavar="DIR", help="Generate DIR/named.conf and DIR/named/*") + optParser.add_option("--next_server", + action="store", metavar="HOST", + help="Use HOST as DHCP next-server") optParser.add_option("--pretty", action="store_true", default=False, help="pretty-print XML tree") @@ -232,7 +235,9 @@ if __name__ == '__main__': kickstart = os.path.abspath(options.kickstart) else: kickstart = None - file[name] = hostinfo.dhcpd.conf(tree, host, kickstart) + pass + file[name] = hostinfo.dhcpd.conf(tree, host, kickstart, + next_server=options.next_server) if options.ifconfig: for (f, c) in hostinfo.ifconfig.generate(tree, host): diff --git a/src/hostinfo/dhcpd.py b/src/hostinfo/dhcpd.py index 88f1cd8286522bb4cfca5f7d7ac3ad836c4aae9e..5c0726aba179daa57f04aabe5e43b2c530a411db 100755 --- a/src/hostinfo/dhcpd.py +++ b/src/hostinfo/dhcpd.py @@ -46,7 +46,8 @@ class "AppleNBI-ppc" { """ % (dhcphost, dhcphost) -def conf(tree, dhcphost, kickstart): +def conf(tree, dhcphost, kickstart, next_server=None): + print next_server # # A. Get interfaces to serve # @@ -83,13 +84,16 @@ def conf(tree, dhcphost, kickstart): vlan.append(ip.address[0]) result += emit_network(tree, dhcphost, address, kickstart, - i.ethernet[0]) + i.ethernet[0], next_server=next_server) for v in vlan: - result += emit_network(tree, dhcphost, [ v ], kickstart) + result += emit_network(tree, dhcphost, [ v ], kickstart, + None, next_server=next_server) return result -def emit_network(tree, dhcphost, addr, kickstart, ethernet=None): +def emit_network(tree, dhcphost, addr, kickstart, ethernet=None, + next_server=None): + print next_server result = "" network = {} for n in tree._subnet_: @@ -104,16 +108,22 @@ def emit_network(tree, dhcphost, addr, kickstart, ethernet=None): # Multiple networks served on this interface result += 'shared-network "MAC(%s)" {\n\n' % ethernet for n in network.values(): - for l in emit_subnet(tree, n, dhcphost, kickstart).split("\n"): + for l in emit_subnet(tree, n, dhcphost, kickstart, + next_server=next_server).split("\n"): result += " %s\n" % l result += "}\n" else: - result += emit_subnet(tree, network.values()[0], dhcphost, kickstart) + result += emit_subnet(tree, network.values()[0], dhcphost, kickstart, + next_server=next_server) return result -def emit_subnet(tree, n, dhcphost, kickstart): +def emit_subnet(tree, n, dhcphost, kickstart, next_server=None): result = "" + print next_server,dhcphost + if next_server == None: + next_server = dhcphost + pass netmask = aton(n.netmask[0]) subnet = aton(n.network[0]) & netmask static = {} @@ -188,7 +198,7 @@ def emit_subnet(tree, n, dhcphost, kickstart): raise Exception("--kickstart needed for %s" % i.name[0:]) kf = i._kickstart_[0].file[0] result += " server-name \"%s\";\n" % dhcphost - result += " next-server %s;\n" % dhcphost + result += " next-server %s;\n" % next_server result += " if substring(option vendor-class-identifier, " result += "0, 20) = \n" result += " \"PXEClient:Arch:00000\" {\n"