Remove reading of some keys from NM via dbus, count on ifcfg file contents (written by stage 1, ks, or nm-c-e). This should also ensure support for ipv6 in stage2 using nm-c-e. Remove available() method - it is useless - HWADDR is read from ifcfg file, description is set in constructor, and Network class will be kept up-to-date (e.g. after configuring with nm-c-e) by explicit call to added update() method. readIfcfgContets became useless, we can use (now ifcfg-backed) NetworkDevices' method loadIfcfgFile instead. Hunk starting with if len(available_devices) > 0: is a noop, probably some leftover - removing. --- iw/advanced_storage.py | 2 +- network.py | 159 ++++++++++------------------------------------ textw/add_drive_text.py | 2 +- textw/netconfig_text.py | 4 +- textw/partition_text.py | 1 + 5 files changed, 40 insertions(+), 128 deletions(-) diff --git a/iw/advanced_storage.py b/iw/advanced_storage.py index d3d4360..c03b3ab 100644 --- a/iw/advanced_storage.py +++ b/iw/advanced_storage.py @@ -43,7 +43,7 @@ def addFcoeDrive(anaconda): store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) combo.set_model(store) - netdevs = anaconda.network.available() + netdevs = anaconda.network.netdevices keys = netdevs.keys() keys.sort() selected_interface = None diff --git a/network.py b/network.py index 20a21b2..14af8c8 100644 --- a/network.py +++ b/network.py @@ -315,145 +315,56 @@ class NetworkDevice(IfcfgFile): class Network: + def __init__(self): + + self.hostname = socket.gethostname() + self.overrideDHCPhostname = False + self.update() + + def update(self): + self.netdevices = {} self.ksdevice = None self.domains = [] - self.hostname = socket.gethostname() - self.overrideDHCPhostname = False # populate self.netdevices devhash = isys.getDeviceProperties(dev=None) - for dev in devhash.keys(): - self.netdevices[dev] = NetworkDevice(dev) - ifcfg_contents = self.readIfcfgContents(dev) - - # if NM_CONTROLLED is set to yes, we read in settings from - # NetworkManager first, then fill in the gaps with the data - # from the ifcfg file - useNetworkManager = False - if ifcfg_contents.has_key('NM_CONTROLLED') and \ - not ifcfg_contents['NM_CONTROLLED'].lower() == 'no': - useNetworkManager = True - - # this interface is managed by NetworkManager, so read from - # NetworkManager first - if useNetworkManager: - props = devhash[dev] - - if isys.isDeviceDHCP(dev): - self.netdevices[dev].set(('BOOTPROTO', 'dhcp')) - else: - self.netdevices[dev].unset('BOOTPROTO') - bus = dbus.SystemBus() - config_path = props.Get(isys.NM_MANAGER_IFACE, 'Ip4Config') - config = bus.get_object(isys.NM_SERVICE, config_path) - config_props = dbus.Interface(config, isys.DBUS_PROPS_IFACE) - - # addresses (3-element list: ipaddr, netmask, gateway) - addrs = config_props.Get(isys.NM_MANAGER_IFACE, 'Addresses')[0] - try: - tmp = struct.pack('I', addrs[0]) - ipaddr = socket.inet_ntop(socket.AF_INET, tmp) - self.netdevices[dev].set(('IPADDR', ipaddr)) - except: - pass - - try: - tmp = struct.pack('I', addrs[1]) - netmask = socket.inet_ntop(socket.AF_INET, tmp) - self.netdevices[dev].set(('NETMASK', netmask)) - except: - pass - - try: - tmp = struct.pack('I', addrs[2]) - gateway = socket.inet_ntop(socket.AF_INET, tmp) - self.netdevices[dev].set(('GATEWAY', gateway)) - except: - pass - - self.hostname = socket.gethostname() - - # read in remaining settings from ifcfg file - for key in ifcfg_contents.keys(): - if key == 'GATEWAY': - self.netdevices[dev].set((key, ifcfg_contents[key])) - elif key == 'DOMAIN': - self.domains.append(ifcfg_contents[key]) - elif key == 'HOSTNAME': - self.hostname = ifcfg_contents[key] - elif self.netdevices[dev].get(key) == '': - self.netdevices[dev].set((key, ifcfg_contents[key])) - - # now initialize remaining devices - # XXX we just throw return away, the method initialize a - # object member so we dont need to - available_devices = self.available() - - if len(available_devices) > 0: - # set first device to start up onboot - oneactive = 0 - for dev in available_devices.keys(): - try: - if available_devices[dev].get("ONBOOT") == "yes": - oneactive = 1 - break - except: - continue + for iface in devhash.keys(): + device = NetworkDevice(netscriptsDir, iface, logfile=ifcfgLogFile) + device.loadIfcfgFile() + device.log("===== Network.update\n") - def readIfcfgContents(self, dev): - ifcfg = "/etc/sysconfig/network-scripts/ifcfg-%s" % (dev,) - contents = {} + if device.get('DOMAIN'): + self.domains.append(device.get('DOMAIN')) + # TODORV - the last iface in loop wins, might be ok, + # not worthy of special juggling + if device.get('HOSTNAME'): + self.hostname = device.get('HOSTNAME') - try: - f = open(ifcfg, "r") - lines = f.readlines() - f.close() + device.description = isys.getNetDevDesc(iface) - for line in lines: - line = line.strip() - if line.startswith('#') or line == '': - continue + self.netdevices[iface] = device - var = string.splitfields(line, '=', 1) - if len(var) == 2: - var[1] = var[1].replace('"', '') - contents[var[0]] = string.strip(var[1]) - except: - return {} - - return contents - - def getDevice(self, device): - return self.netdevices[device] - - def available(self): - ksdevice = None - if flags.cmdline.has_key('ksdevice'): - ksdevice = flags.cmdline['ksdevice'] - - for dev in isys.getDeviceProperties().keys(): - if not self.netdevices.has_key(dev): - self.netdevices[dev] = NetworkDevice(dev) - - hwaddr = isys.getMacAddress(dev) - self.netdevices[dev].set(('HWADDR', hwaddr)) - self.netdevices[dev].set(('DESC', isys.getNetDevDesc(dev))) + ksdevice = flags.cmdline.get('ksdevice', None) + if ksdevice: + for dev in self.netdevices: + if ksdevice == 'link' and isys.getLinkStatus(dev): + self.ksdevice = dev + break + elif ksdevice == dev: + self.ksdevice = dev + break + elif ':' in ksdevice: + if ksdevice.upper() == self.netdevices[dev].get('HWADDR'): + self.ksdevice = dev + break - if not ksdevice: - continue - if ksdevice == 'link' and isys.getLinkStatus(dev): - self.ksdevice = dev - elif ksdevice == dev: - self.ksdevice = dev - elif ksdevice.find(':') != -1: - if ksdevice.upper() == hwaddr: - self.ksdevice = dev - return self.netdevices + def getDevice(self, device): + return self.netdevices[device] def getKSDevice(self): if self.ksdevice is None: diff --git a/textw/add_drive_text.py b/textw/add_drive_text.py index 0fbd86c..663d45d 100644 --- a/textw/add_drive_text.py +++ b/textw/add_drive_text.py @@ -78,7 +78,7 @@ class addDriveDialog(object): return INSTALL_OK def addFcoeDriveDialog(self, screen): - netdevs = self.anaconda.network.available() + netdevs = self.anaconda.network.netdevices devs = netdevs.keys() devs.sort() diff --git a/textw/netconfig_text.py b/textw/netconfig_text.py index 4cea192..fb37429 100644 --- a/textw/netconfig_text.py +++ b/textw/netconfig_text.py @@ -96,7 +96,7 @@ class NetworkConfiguratorText: self.interfaceList = CheckboxTree(height=3, scroll=1) - netdevs = self.anaconda.network.available() + netdevs = self.anaconda.network.netdevices devs = netdevs.keys() devs.sort() ksdevice = self.anaconda.network.getKSDevice() @@ -178,7 +178,7 @@ class NetworkConfiguratorText: #self._ipv6Toggled() self._dhcpToggled() - netdevs = self.anaconda.network.available() + netdevs = self.anaconda.network.netdevices while True: result = grid.run() diff --git a/textw/partition_text.py b/textw/partition_text.py index 193ff21..c9cac6f 100644 --- a/textw/partition_text.py +++ b/textw/partition_text.py @@ -160,3 +160,4 @@ class PartitionTypeWindow: return INSTALL_OK + -- 1.6.0.6 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list