X-Git-Url: http://git.onelab.eu/?p=pyplnet.git;a=blobdiff_plain;f=plnet.py;h=5b0c667256a1a70c52b438f734d7ae086770411f;hp=9150a1875cdf5b5a6e6d34ba826cbfeef085c793;hb=bedc71c535f71f71f48ad6d7733ba6a10d714971;hpb=3605426e831d192b0d8b4540a9fda2c959e132e5 diff --git a/plnet.py b/plnet.py index 9150a18..5b0c667 100755 --- a/plnet.py +++ b/plnet.py @@ -5,12 +5,23 @@ import os import socket import time import tempfile +import errno import sioc import modprobe +global version +version = 4.3 + def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeManager"): + global version + sysconfig = "%s/etc/sysconfig/network-scripts" % root + try: + os.makedirs(sysconfig) + except OSError, e: + if e.errno != errno.EEXIST: + raise e # query running network interfaces devs = sioc.gifconf() @@ -56,6 +67,8 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa inter['BOOTPROTO'] = "static" inter['IPADDR'] = network['ip'] inter['NETMASK'] = network['netmask'] + inter['DNS1'] = network['dns1'] + inter['DNS2'] = network['dns2'] if network['is_primary']: gateway = network['gateway'] @@ -69,10 +82,25 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa if not network['is_primary']: inter['DHCLIENTARGS'] = "-R subnet-mask" - if len(network['interface_tag_ids']) > 0: + try: + plc.GetInterfaceTags() + version = 4.3 + except AttributeError: + version = 4.2 + + if version == 4.3: + interface_tag_ids = "interface_tag_ids" + interface_tag_id = "interface_tag_id" + else: + interface_tag_ids = "nodenetwork_setting_ids" + interface_tag_id = "nodenetwork_setting_id" + + if len(network[interface_tag_ids]) > 0: try: - settings = plc.GetInterfaceTags({'interface_tag_id': - network['interface_tag_ids']}) + if version == 4.3: + settings = plc.GetInterfaceTags({interface_tag_id:network[interface_tag_ids]}) + else: + settings = plc.GetNodeNetworkSettings({interface_tag_id:network[interface_tag_ids]}) except: logger.log("net:InitInterfaces FATAL: failed call GetInterfaceTags({'interface_tag_id':{%s})"% \ network['interface_tag_ids']) @@ -81,11 +109,15 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa for setting in settings: # to explicitly set interface name - settingname = setting['name'].upper() + name_key = "name" + if version == 4.3: + name_key = "tagname" + + settingname = setting[name_key].upper() if settingname in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER'): inter[settingname]=setting['value'] else: - logger.log("net:InitInterfaces WARNING: ignored setting named %s"%setting['name']) + logger.log("net:InitInterfaces WARNING: ignored setting named %s"%setting[name_key]) # support aliases to interfaces either by name or HWADDR if 'ALIAS' in inter: @@ -133,7 +165,7 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa m = modprobe.Modprobe() try: - m.input("%s/etc/modprobe.conf" % root, program) + m.input("%s/etc/modprobe.conf" % root) except: pass for (dev, inter) in interfaces.iteritems(): @@ -146,7 +178,7 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa options=" ".join(driver[1:]) if options <> '': m.optionsset(dev,options) - m.output("%s/etc/modprobe.conf" % root) + m.output("%s/etc/modprobe.conf" % root, program) # clean up after any ifcfg-$dev script that's no longer listed as # part of the NodeNetworks associated with this node @@ -187,7 +219,7 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa time.sleep(2) # Write network configuration file - networkconf = file("%s/etc/sysconfig/network", "w") + networkconf = file("%s/etc/sysconfig/network" % root, "w") networkconf.write("NETWORKING=yes\nHOSTNAME=%s\n" % hostname) if gateway is not None: networkconf.write("GATEWAY=%s\n" % gateway) @@ -201,12 +233,12 @@ def InitInterfaces(logger, plc, data, root="", files_only=False, program="NodeMa f.write("# Autogenerated by pyplnet... do not edit!\n") if 'DRIVER' in inter: f.write("# using %s driver for device %s\n" % (inter['DRIVER'],dev)) - f.write('DEVICE="%s"\n' % dev) + f.write('DEVICE=%s\n' % dev) # print the configuration values for (key, val) in inter.iteritems(): if key not in ('IFNAME','ALIAS','CFGOPTIONS','DRIVER'): - f.write('%s="%s"\n' % (key, val)) + f.write('%s=%s\n' % (key, val)) # print the configuration specific option values (if any) if 'CFGOPTIONS' in inter: @@ -317,7 +349,12 @@ if __name__ == "__main__": sys.exit(1) node = shell.GetNodes({'node_id': [int(args[0])]}) - networks = shell.GetInterfaces({'interface_id': node[0]['interface_ids']}) + try: + networks = shell.GetInterfaces({'interface_id': node[0]['interface_ids']}) + except AttributeError: + networks = shell.GetNodeNetworks({'nodenetwork_id':node[0]['nodenetwork_ids']}) + version = 4.2 + data = {'hostname': node[0]['hostname'], 'networks': networks} class logger: