Re: [PATCH rhel6-branch] Set NM_CONTROLLED=no iscsi for storage devices only on system (#598070)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Radek,

Looks good, but we still want to set NM_CONTROLLED=no before invoking
nm-c-e for FCoE devices, iow for devices where there is a storage device
storageDev for which the following is true:

isinstance(storageDev, storage.devices.NetworkStorageDevice) and \
storageDev.nic == self.iface

As we don't want NM / nm-c-e touching those (this should not cause
NM to bring them down like with interfaces used for IP traffic, as
NM is not controlling them to begin with).

Regards,

Hans



On 06/01/2010 10:46 AM, Radek Vykydal wrote:
Not in anaconda environment - that can bring down device used
to get packages.
---
  instdata.py   |    4 +++-
  network.py    |   40 ++++++++++++++++++++++++++--------------
  yuminstall.py |    2 +-
  3 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/instdata.py b/instdata.py
index c23cec9..aefad18 100644
--- a/instdata.py
+++ b/instdata.py
@@ -149,8 +149,10 @@ class InstallData:
          except RuntimeError, msg:
                  log.error("Error running %s: %s", args, msg)

-        self.network.write(anaconda=self.anaconda)
+        self.network.write()
          self.network.copyConfigToPath(instPath=self.anaconda.rootPath)
+        self.network.disableNMForStorageDevices(self.anaconda,
+                                                instPath=self.anaconda.rootPath)
          self.firewall.write (self.anaconda.rootPath)
          self.security.write (self.anaconda.rootPath)
          self.desktop.write(self.anaconda.rootPath)
diff --git a/network.py b/network.py
index 8b0d109..02f1ff2 100644
--- a/network.py
+++ b/network.py
@@ -307,6 +307,17 @@ class NetworkDevice(IfcfgFile):
          lf.close()
          f.close()

+    def isStorageDevice(self, anaconda):
+        import storage
+        rootdev = anaconda.id.storage.rootDevice
+        # FIXME: use d.host_address to only add "NM_CONTROLLED=no"
+        # for interfaces actually used enroute to the device
+        for d in anaconda.id.storage.devices:
+            if isinstance(d, storage.devices.NetworkStorageDevice) and\
+               (rootdev.dependsOn(d) or d.nic == self.iface):
+                return True
+        return False
+

  class Network:

@@ -540,7 +551,21 @@ class Network:
          self._copyFileToPath("/etc/udev/rules.d/70-persistent-net.rules",
                               instPath, overwrite=flags.livecdInstall)

-    def write(self, anaconda=None):
+    def disableNMForStorageDevices(self, anaconda, instPath=''):
+        for devName, device in self.netdevices.items():
+            if device.isStorageDevice(anaconda):
+                dev = NetworkDevice(instPath + netscriptsDir, devName)
+                if os.access(dev.path, os.R_OK):
+                    dev.loadIfcfgFile()
+                    dev.set(('NM_CONTROLLED', 'no'))
+                    dev.writeIfcfgFile()
+                    log.info("network device %s used by storage will not be "
+                             "controlled by NM" % device.path)
+                else:
+                    log.warning("disableNMForStorageDevices: %s file not found" %
+                                device.path)
+
+    def write(self):

          devices = self.netdevices.values()

@@ -557,19 +582,6 @@ class Network:
                  self.overrideDHCPhostname):
                  dev.set(('DHCP_HOSTNAME', self.hostname))

-            # tell NetworkManager not to touch any interfaces used during
-            # installation when / is on a network backed device.
-            if anaconda is not None:
-                import storage
-                rootdev = anaconda.id.storage.rootDevice
-                # FIXME: use d.host_address to only add "NM_CONTROLLED=no"
-                # for interfaces actually used enroute to the device
-                for d in anaconda.id.storage.devices:
-                    if isinstance(d, storage.devices.NetworkStorageDevice) and\
-                       (rootdev.dependsOn(d) or d.nic == device):
-                        dev.set(('NM_CONTROLLED', 'no'))
-                        break
-
              dev.writeIfcfgFile()

              # XXX: is this necessary with NetworkManager?
diff --git a/yuminstall.py b/yuminstall.py
index 8c1aab0..68bf681 100644
--- a/yuminstall.py
+++ b/yuminstall.py
@@ -1643,7 +1643,7 @@ debuglevel=10
              if os.access("/etc/modprobe.d/anaconda.conf", os.R_OK):
                  shutil.copyfile("/etc/modprobe.d/anaconda.conf",
                                  anaconda.rootPath + "/etc/modprobe.d/anaconda.conf")
-            anaconda.id.network.write(anaconda=anaconda)
+            anaconda.id.network.write()
              anaconda.id.network.copyConfigToPath(instPath=anaconda.rootPath)
              anaconda.id.storage.write(anaconda.rootPath)
              if not anaconda.id.isHeadless:

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux