from ganeti.block import base
from ganeti.block.drbd_info import DRBD8Info
from ganeti.block.drbd_info import DRBD83ShowInfo
+from ganeti.block.drbd_info import DRBD84ShowInfo
# Size of reads in _CanReadDevice
" usage: kernel is %s.%s, ganeti wants 8.x",
version["k_major"], version["k_minor"])
+ if version["k_minor"] <= 3:
+ self._show_info_cls = DRBD83ShowInfo
+ else:
+ self._show_info_cls = DRBD84ShowInfo
+
if (self._lhost is not None and self._lhost == self._rhost and
self._lport == self._rport):
raise ValueError("Invalid configuration data, same local/remote %s" %
return None
return result.stdout
+ def _GetShowInfo(self, minor):
+ return self._show_info_cls.GetDevInfo(self._GetShowData(minor))
+
def _MatchesLocal(self, info):
"""Test if our local config matches with an existing device.
minor, result.fail_reason, result.output)
def _CheckNetworkConfig():
- info = DRBD83ShowInfo.GetDevInfo(self._GetShowData(minor))
+ info = self._GetShowInfo(minor)
if not "local_addr" in info or not "remote_addr" in info:
raise utils.RetryAgain()
self._aminor)
if len(devices) != 2:
base.ThrowError("drbd%d: need two devices for AddChildren", self.minor)
- info = DRBD83ShowInfo.GetDevInfo(self._GetShowData(self.minor))
+ info = self._GetShowInfo(self.minor)
if "local_dev" in info:
base.ThrowError("drbd%d: already attached to a local disk", self.minor)
backend, meta = devices
base.ThrowError("drbd%d: can't attach to drbd8 during RemoveChildren",
self._aminor)
# early return if we don't actually have backing storage
- info = DRBD83ShowInfo.GetDevInfo(self._GetShowData(self.minor))
+ info = self._GetShowInfo(self.minor)
if "local_dev" not in info:
return
if len(self._children) != 2:
# pylint: disable=W0631
net_data = (self._lhost, self._lport, self._rhost, self._rport)
for minor in (self._aminor,):
- info = DRBD83ShowInfo.GetDevInfo(self._GetShowData(minor))
+ info = self._GetShowInfo(minor)
match_l = self._MatchesLocal(info)
match_r = self._MatchesNet(info)
# disk matches, but not attached to network, attach and recheck
self._AssembleNet(minor, net_data, constants.DRBD_NET_PROTOCOL,
hmac=constants.DRBD_HMAC_ALG, secret=self._secret)
- if self._MatchesNet(DRBD83ShowInfo.GetDevInfo(
- self._GetShowData(minor))):
+ if self._MatchesNet(self._GetShowInfo(minor)):
break
else:
base.ThrowError("drbd%d: network attach successful, but 'drbdsetup"
# no local disk, but network attached and it matches
self._AssembleLocal(minor, self._children[0].dev_path,
self._children[1].dev_path, self.size)
- if self._MatchesNet(DRBD83ShowInfo.GetDevInfo(
- self._GetShowData(minor))):
+ if self._MatchesNet(self._GetShowInfo(minor)):
break
else:
base.ThrowError("drbd%d: disk attach successful, but 'drbdsetup"
# None)
self._AssembleNet(minor, net_data, constants.DRBD_NET_PROTOCOL,
hmac=constants.DRBD_HMAC_ALG, secret=self._secret)
- if self._MatchesNet(DRBD83ShowInfo.GetDevInfo(
- self._GetShowData(minor))):
+ if self._MatchesNet(self._GetShowInfo(minor)):
break
else:
base.ThrowError("drbd%d: network attach successful, but 'drbdsetup"