[Kimchi-devel] [PATCH] Issue 292 Logical Storage Pool Returning "extended" Partitions as Possible Pool

zhshzhou at linux.vnet.ibm.com zhshzhou at linux.vnet.ibm.com
Tue Mar 11 05:06:20 UTC 2014


From: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>

Extended partition is a container of logical partitions. Kimchi should
skip extended partition regardless of it contains logical partitions or
not. This patch uses pyparted to check if a partition is a extended
partition and skip if it is.

Signed-off-by: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
---
 contrib/DEBIAN/control.in     |  1 +
 contrib/kimchi.spec.fedora.in |  1 +
 contrib/kimchi.spec.suse.in   |  1 +
 docs/README.md                |  6 +++---
 src/kimchi/disks.py           | 19 +++++++++++++++++--
 5 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in
index 1b03fc7..c2b2a40 100644
--- a/contrib/DEBIAN/control.in
+++ b/contrib/DEBIAN/control.in
@@ -15,6 +15,7 @@ Depends: python-cherrypy3 (>= 3.2.0),
          python-libxml2,
          qemu-kvm,
          python-pam,
+         python-parted,
          python-psutil (>= 0.6.0),
          python-ethtool,
          sosreport,
diff --git a/contrib/kimchi.spec.fedora.in b/contrib/kimchi.spec.fedora.in
index 149c3a7..bf80104 100644
--- a/contrib/kimchi.spec.fedora.in
+++ b/contrib/kimchi.spec.fedora.in
@@ -20,6 +20,7 @@ Requires:	m2crypto
 Requires:	python-imaging
 Requires:	libxml2-python
 Requires:	PyPAM
+Requires:	pyparted
 Requires:	python-psutil >= 0.6.0
 Requires:	python-jsonschema >= 1.3.0
 Requires:	python-ethtool
diff --git a/contrib/kimchi.spec.suse.in b/contrib/kimchi.spec.suse.in
index beddada..cba0899 100644
--- a/contrib/kimchi.spec.suse.in
+++ b/contrib/kimchi.spec.suse.in
@@ -16,6 +16,7 @@ Requires:	python-imaging
 Requires:	python-M2Crypto
 Requires:	python-libxml2
 Requires:	python-pam
+Requires:	python-parted
 Requires:	python-psutil >= 0.6.0
 Requires:	python-jsonschema >= 1.3.0
 Requires:	python-ethtool
diff --git a/docs/README.md b/docs/README.md
index 5721878..4be0e53 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -53,7 +53,7 @@ Install Dependencies
                         PyPAM m2crypto python-jsonschema rpm-build \
                         qemu-kvm python-psutil python-ethtool sos \
                         python-ipaddr python-lxml nfs-utils \
-                        iscsi-initiator-utils libxslt
+                        iscsi-initiator-utils libxslt pyparted
      # If using RHEL6, install the following additional packages:
      $ sudo yum install python-unittest2 python-ordereddict
      # Restart libvirt to allow configuration changes to take effect
@@ -75,7 +75,7 @@ for more information on how to configure your system to access this repository.
                            python-pam python-m2crypto python-jsonschema \
                            qemu-kvm libtool python-psutil python-ethtool \
                            sosreport python-ipaddr python-lxml nfs-common \
-                           open-iscsi lvm2 xsltproc
+                           open-iscsi lvm2 xsltproc python-parted
 
     Packages version requirement:
         python-jsonschema >= 1.3.0
@@ -89,7 +89,7 @@ for more information on how to configure your system to access this repository.
                           python-pam python-M2Crypto python-jsonschema \
                           rpm-build kvm python-psutil python-ethtool \
                           python-ipaddr python-lxml nfs-client open-iscsi \
-                          libxslt-tools python-xml
+                          libxslt-tools python-xml python-parted
 
     Packages version requirement:
         python-psutil >= 0.6.0
diff --git a/src/kimchi/disks.py b/src/kimchi/disks.py
index 8389922..cada869 100644
--- a/src/kimchi/disks.py
+++ b/src/kimchi/disks.py
@@ -20,6 +20,9 @@
 import re
 import subprocess
 
+from parted import Device as PDevice
+from parted import Disk as PDisk
+
 from kimchi.exception import OperationFailed
 from kimchi.utils import kimchi_log
 
@@ -78,6 +81,17 @@ def _is_dev_leaf(devNodePath):
     return childrenCount == 0
 
 
+def _is_dev_extended_partition(devType, devNodePath):
+    if devType != 'part':
+        return False
+    diskPath = devNodePath.rstrip('0123456789')
+    device = PDevice(diskPath)
+    disk = PDisk(device)
+    if disk.getExtendedPartition().path == devNodePath:
+        return True
+    return False
+
+
 def _parse_lsblk_output(output, keys):
     # output is on format key="value",
     # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
@@ -122,12 +136,13 @@ def get_partitions_names():
         # Only list unmounted and unformated and leaf and (partition or disk)
         # leaf means a partition, a disk has no partition, or a disk not held
         # by any multipath device. Physical volume belongs to no volume group
-        # is also listed.
+        # is also listed. Extended partitions should not be listed.
         if not (dev['type'] in ['part', 'disk'] and
                 dev['fstype'] in ['', 'LVM2_member'] and
                 dev['mountpoint'] == "" and
                 _get_vgname(devNodePath) == "" and
-                _is_dev_leaf(devNodePath)):
+                _is_dev_leaf(devNodePath) and
+                not _is_dev_extended_partition(dev['type'], devNodePath)):
             continue
 
         names.add(name)
-- 
1.8.5.3




More information about the Kimchi-devel mailing list