Revision 0f7f32d9
b/lib/bdev.py | ||
---|---|---|
908 | 908 |
return True |
909 | 909 |
|
910 | 910 |
|
911 |
class BaseDRBD(BlockDev): |
|
912 |
"""Base DRBD class. |
|
911 | 913 |
|
912 |
class DRBDev(BlockDev): |
|
914 |
This class contains a few bits of common functionality between the |
|
915 |
0.7 and 8.x versions of DRBD. |
|
916 |
|
|
917 |
""" |
|
918 |
_VERSION_RE = re.compile(r"^version: (\d+)\.(\d+)\.(\d+)" |
|
919 |
r" \(api:(\d+)/proto:(\d+)\)") |
|
920 |
_DRBD_KVER = 0 |
|
921 |
|
|
922 |
@staticmethod |
|
923 |
def _GetProcData(): |
|
924 |
"""Return data from /proc/drbd. |
|
925 |
|
|
926 |
""" |
|
927 |
stat = open("/proc/drbd", "r") |
|
928 |
try: |
|
929 |
data = stat.read().splitlines() |
|
930 |
finally: |
|
931 |
stat.close() |
|
932 |
if not data: |
|
933 |
raise errors.BlockDeviceError("Can't read any data from /proc/drbd") |
|
934 |
return data |
|
935 |
|
|
936 |
@classmethod |
|
937 |
def _GetVersion(cls): |
|
938 |
"""Return the DRBD version. |
|
939 |
|
|
940 |
This will return a list [k_major, k_minor, k_point, api, proto]. |
|
941 |
|
|
942 |
""" |
|
943 |
proc_data = cls._GetProcData() |
|
944 |
first_line = proc_data[0].strip() |
|
945 |
version = cls._VERSION_RE.match(first_line) |
|
946 |
if not version: |
|
947 |
raise errors.BlockDeviceError("Can't parse DRBD version from '%s'" % |
|
948 |
first_line) |
|
949 |
return [int(val) for val in version.groups()] |
|
950 |
|
|
951 |
|
|
952 |
class DRBDev(BaseDRBD): |
|
913 | 953 |
"""DRBD block device. |
914 | 954 |
|
915 | 955 |
This implements the local host part of the DRBD device, i.e. it |
... | ... | |
930 | 970 |
def __init__(self, unique_id, children): |
931 | 971 |
super(DRBDev, self).__init__(unique_id, children) |
932 | 972 |
self.major = self._DRBD_MAJOR |
973 |
[kmaj, kmin, kfix, api, proto] = self._GetVersion() |
|
974 |
if kmaj != 0 and kmin != 7: |
|
975 |
raise errors.BlockDeviceError("Mismatch in DRBD kernel version and" |
|
976 |
" requested ganeti usage: kernel is" |
|
977 |
" %s.%s, ganeti wants 0.7" % (kmaj, kmin)) |
|
978 |
|
|
933 | 979 |
if len(children) != 2: |
934 | 980 |
raise ValueError("Invalid configuration data %s" % str(children)) |
935 | 981 |
if not isinstance(unique_id, (tuple, list)) or len(unique_id) != 4: |
... | ... | |
944 | 990 |
""" |
945 | 991 |
return "/dev/drbd%d" % minor |
946 | 992 |
|
947 |
@staticmethod |
|
948 |
def _GetProcData(): |
|
949 |
"""Return data from /proc/drbd. |
|
950 |
|
|
951 |
""" |
|
952 |
stat = open("/proc/drbd", "r") |
|
953 |
data = stat.read().splitlines() |
|
954 |
stat.close() |
|
955 |
return data |
|
956 |
|
|
957 |
|
|
958 | 993 |
@classmethod |
959 | 994 |
def _GetUsedDevs(cls): |
960 | 995 |
"""Compute the list of used DRBD devices. |
Also available in: Unified diff