Revision 31624382 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
552 | 552 |
raise errors.OpPrereqError(msg, errors.ECODE_INVAL) |
553 | 553 |
|
554 | 554 |
|
555 |
def _CheckInstanceDown(lu, instance, reason): |
|
556 |
"""Ensure that an instance is not running.""" |
|
557 |
if instance.admin_up: |
|
558 |
raise errors.OpPrereqError("Instance %s is marked to be up, %s" % |
|
559 |
(instance.name, reason), errors.ECODE_STATE) |
|
560 |
|
|
561 |
pnode = instance.primary_node |
|
562 |
ins_l = lu.rpc.call_instance_list([pnode], [instance.hypervisor])[pnode] |
|
563 |
ins_l.Raise("Can't contact node %s for instance information" % pnode, |
|
564 |
prereq=True, ecode=errors.ECODE_ENVIRON) |
|
565 |
|
|
566 |
if instance.name in ins_l.payload: |
|
567 |
raise errors.OpPrereqError("Instance %s is running, %s" % |
|
568 |
(instance.name, reason), errors.ECODE_STATE) |
|
569 |
|
|
570 |
|
|
555 | 571 |
def _ExpandItemName(fn, name, kind): |
556 | 572 |
"""Expand an item name. |
557 | 573 |
|
... | ... | |
3730 | 3746 |
_ShutdownInstanceDisks. |
3731 | 3747 |
|
3732 | 3748 |
""" |
3733 |
pnode = instance.primary_node |
|
3734 |
ins_l = lu.rpc.call_instance_list([pnode], [instance.hypervisor])[pnode] |
|
3735 |
ins_l.Raise("Can't contact node %s" % pnode) |
|
3736 |
|
|
3737 |
if instance.name in ins_l.payload: |
|
3738 |
raise errors.OpExecError("Instance is running, can't shutdown" |
|
3739 |
" block devices.") |
|
3740 |
|
|
3749 |
_CheckInstanceDown(lu, instance, "cannot shutdown disks") |
|
3741 | 3750 |
_ShutdownInstanceDisks(lu, instance) |
3742 | 3751 |
|
3743 | 3752 |
|
... | ... | |
4123 | 4132 |
raise errors.OpPrereqError("Instance '%s' has no disks" % |
4124 | 4133 |
self.op.instance_name, |
4125 | 4134 |
errors.ECODE_INVAL) |
4126 |
if instance.admin_up: |
|
4127 |
raise errors.OpPrereqError("Instance '%s' is marked to be up" % |
|
4128 |
self.op.instance_name, |
|
4129 |
errors.ECODE_STATE) |
|
4130 |
remote_info = self.rpc.call_instance_info(instance.primary_node, |
|
4131 |
instance.name, |
|
4132 |
instance.hypervisor) |
|
4133 |
remote_info.Raise("Error checking node %s" % instance.primary_node, |
|
4134 |
prereq=True, ecode=errors.ECODE_ENVIRON) |
|
4135 |
if remote_info.payload: |
|
4136 |
raise errors.OpPrereqError("Instance '%s' is running on the node %s" % |
|
4137 |
(self.op.instance_name, |
|
4138 |
instance.primary_node), |
|
4139 |
errors.ECODE_STATE) |
|
4135 |
_CheckInstanceDown(self, instance, "cannot reinstall") |
|
4140 | 4136 |
|
4141 | 4137 |
self.op.os_type = getattr(self.op, "os_type", None) |
4142 | 4138 |
self.op.force_variant = getattr(self.op, "force_variant", False) |
... | ... | |
4223 | 4219 |
if instance.disk_template == constants.DT_DISKLESS: |
4224 | 4220 |
raise errors.OpPrereqError("Instance '%s' has no disks" % |
4225 | 4221 |
self.op.instance_name, errors.ECODE_INVAL) |
4226 |
if instance.admin_up: |
|
4227 |
raise errors.OpPrereqError("Instance '%s' is marked to be up" % |
|
4228 |
self.op.instance_name, errors.ECODE_STATE) |
|
4229 |
remote_info = self.rpc.call_instance_info(instance.primary_node, |
|
4230 |
instance.name, |
|
4231 |
instance.hypervisor) |
|
4232 |
remote_info.Raise("Error checking node %s" % instance.primary_node, |
|
4233 |
prereq=True, ecode=errors.ECODE_ENVIRON) |
|
4234 |
if remote_info.payload: |
|
4235 |
raise errors.OpPrereqError("Instance '%s' is running on the node %s" % |
|
4236 |
(self.op.instance_name, |
|
4237 |
instance.primary_node), errors.ECODE_STATE) |
|
4222 |
_CheckInstanceDown(self, instance, "cannot recreate disks") |
|
4238 | 4223 |
|
4239 | 4224 |
if not self.op.disks: |
4240 | 4225 |
self.op.disks = range(len(instance.disks)) |
... | ... | |
4289 | 4274 |
instance = self.cfg.GetInstanceInfo(self.op.instance_name) |
4290 | 4275 |
assert instance is not None |
4291 | 4276 |
_CheckNodeOnline(self, instance.primary_node) |
4292 |
|
|
4293 |
if instance.admin_up: |
|
4294 |
raise errors.OpPrereqError("Instance '%s' is marked to be up" % |
|
4295 |
self.op.instance_name, errors.ECODE_STATE) |
|
4296 |
remote_info = self.rpc.call_instance_info(instance.primary_node, |
|
4297 |
instance.name, |
|
4298 |
instance.hypervisor) |
|
4299 |
remote_info.Raise("Error checking node %s" % instance.primary_node, |
|
4300 |
prereq=True, ecode=errors.ECODE_ENVIRON) |
|
4301 |
if remote_info.payload: |
|
4302 |
raise errors.OpPrereqError("Instance '%s' is running on the node %s" % |
|
4303 |
(self.op.instance_name, |
|
4304 |
instance.primary_node), errors.ECODE_STATE) |
|
4277 |
_CheckInstanceDown(self, instance, "cannot rename") |
|
4305 | 4278 |
self.instance = instance |
4306 | 4279 |
|
4307 | 4280 |
# new name verification |
... | ... | |
8137 | 8110 |
if disk_op == constants.DDM_REMOVE: |
8138 | 8111 |
if len(instance.disks) == 1: |
8139 | 8112 |
raise errors.OpPrereqError("Cannot remove the last disk of" |
8140 |
" an instance", |
|
8141 |
errors.ECODE_INVAL) |
|
8142 |
ins_l = self.rpc.call_instance_list([pnode], [instance.hypervisor]) |
|
8143 |
ins_l = ins_l[pnode] |
|
8144 |
msg = ins_l.fail_msg |
|
8145 |
if msg: |
|
8146 |
raise errors.OpPrereqError("Can't contact node %s: %s" % |
|
8147 |
(pnode, msg), errors.ECODE_ENVIRON) |
|
8148 |
if instance.name in ins_l.payload: |
|
8149 |
raise errors.OpPrereqError("Instance is running, can't remove" |
|
8150 |
" disks.", errors.ECODE_STATE) |
|
8113 |
" an instance", errors.ECODE_INVAL) |
|
8114 |
_CheckInstanceDown(self, instance, "cannot remove disks") |
|
8151 | 8115 |
|
8152 | 8116 |
if (disk_op == constants.DDM_ADD and |
8153 | 8117 |
len(instance.nics) >= constants.MAX_DISKS): |
Also available in: Unified diff