1654 |
1654 |
_ErrorIf(test, self.EINSTANCEWRONGNODE, instance,
|
1655 |
1655 |
"instance should not run on node %s", node)
|
1656 |
1656 |
|
1657 |
|
def _VerifyOrphanVolumes(self, node_vol_should, node_image):
|
|
1657 |
def _VerifyOrphanVolumes(self, node_vol_should, node_image, reserved):
|
1658 |
1658 |
"""Verify if there are any unknown volumes in the cluster.
|
1659 |
1659 |
|
1660 |
1660 |
The .os, .swap and backup volumes are ignored. All other volumes are
|
1661 |
1661 |
reported as unknown.
|
1662 |
1662 |
|
|
1663 |
@type reserved: L{ganeti.utils.FieldSet}
|
|
1664 |
@param reserved: a FieldSet of reserved volume names
|
|
1665 |
|
1663 |
1666 |
"""
|
1664 |
1667 |
for node, n_img in node_image.items():
|
1665 |
1668 |
if n_img.offline or n_img.rpc_fail or n_img.lvm_fail:
|
1666 |
1669 |
# skip non-healthy nodes
|
1667 |
1670 |
continue
|
1668 |
1671 |
for volume in n_img.volumes:
|
1669 |
|
test = (node not in node_vol_should or
|
1670 |
|
volume not in node_vol_should[node])
|
|
1672 |
test = ((node not in node_vol_should or
|
|
1673 |
volume not in node_vol_should[node]) and
|
|
1674 |
not reserved.Matches(volume))
|
1671 |
1675 |
self._ErrorIf(test, self.ENODEORPHANLV, node,
|
1672 |
1676 |
"volume %s is unknown", volume)
|
1673 |
1677 |
|
... | ... | |
2232 |
2236 |
"instance lives on ghost node %s", node)
|
2233 |
2237 |
|
2234 |
2238 |
feedback_fn("* Verifying orphan volumes")
|
2235 |
|
self._VerifyOrphanVolumes(node_vol_should, node_image)
|
|
2239 |
reserved = utils.FieldSet(*cluster.reserved_lvs)
|
|
2240 |
self._VerifyOrphanVolumes(node_vol_should, node_image, reserved)
|
2236 |
2241 |
|
2237 |
2242 |
feedback_fn("* Verifying orphan instances")
|
2238 |
2243 |
self._VerifyOrphanInstances(instancelist, node_image)
|