1678 |
1678 |
return iallocator
|
1679 |
1679 |
|
1680 |
1680 |
|
|
1681 |
def _InstanceRunning(lu, instance):
|
|
1682 |
"""Return True if instance is running else False."""
|
|
1683 |
|
|
1684 |
remote_info = lu.rpc.call_instance_info(instance.primary_node,
|
|
1685 |
instance.name,
|
|
1686 |
instance.hypervisor)
|
|
1687 |
remote_info.Raise("Error checking node %s" % instance.primary_node)
|
|
1688 |
instance_running = bool(remote_info.payload)
|
|
1689 |
return instance_running
|
|
1690 |
|
|
1691 |
|
1681 |
1692 |
class LUClusterPostInit(LogicalUnit):
|
1682 |
1693 |
"""Logical unit for running hooks after cluster initialization.
|
1683 |
1694 |
|
... | ... | |
8726 |
8737 |
return idx, pci
|
8727 |
8738 |
# case of InstanceSetParams()
|
8728 |
8739 |
elif lu.instance.hotplug_info is not None:
|
8729 |
|
idx, pci = lu.cfg.GetPCIInfo(lu.instance.name, dev_type)
|
|
8740 |
idx, pci = lu.cfg.GetPCIInfo(lu.instance, dev_type)
|
8730 |
8741 |
lu.LogInfo("Choosing pci slot %d" % pci)
|
8731 |
8742 |
return idx, pci
|
8732 |
8743 |
|
... | ... | |
12819 |
12830 |
self.LogWarning("Failed to create volume %s (%s) on node '%s': %s",
|
12820 |
12831 |
disk.iv_name, disk, node, err)
|
12821 |
12832 |
|
12822 |
|
if self.op.hotplug and disk.pci:
|
|
12833 |
if self.op.hotplug and disk.pci and _InstanceRunning(self, self.instance):
|
12823 |
12834 |
self.LogInfo("Trying to hotplug device.")
|
12824 |
12835 |
_, device_info = _AssembleInstanceDisks(self, self.instance,
|
12825 |
12836 |
[disk], check=False)
|
... | ... | |
12854 |
12865 |
" without removing it with hotplug",
|
12855 |
12866 |
errors.ECODE_INVAL)
|
12856 |
12867 |
if self.op.hotplug and root.pci:
|
12857 |
|
self.LogInfo("Trying to hotplug device.")
|
12858 |
|
self.rpc.call_hot_del_disk(self.instance.primary_node,
|
12859 |
|
self.instance, root, idx)
|
12860 |
|
_ShutdownInstanceDisks(self, self.instance, [root])
|
12861 |
|
self.cfg.UpdatePCIInfo(self.instance.name, root.pci)
|
|
12868 |
if _InstanceRunning(self, self.instance):
|
|
12869 |
self.LogInfo("Trying to hotplug device.")
|
|
12870 |
self.rpc.call_hot_del_disk(self.instance.primary_node,
|
|
12871 |
self.instance, root, idx)
|
|
12872 |
_ShutdownInstanceDisks(self, self.instance, [root])
|
|
12873 |
self.cfg.UpdatePCIInfo(self.instance, root.pci)
|
12862 |
12874 |
|
12863 |
12875 |
(anno_disk,) = _AnnotateDiskParams(self.instance, [root], self.cfg)
|
12864 |
12876 |
for node, disk in anno_disk.ComputeNodeTree(self.instance.primary_node):
|
... | ... | |
12887 |
12899 |
# handle errors
|
12888 |
12900 |
# return changes
|
12889 |
12901 |
if self.op.hotplug:
|
12890 |
|
nic_idx, pci = _GetPCIInfo(self, 'nics')
|
12891 |
|
if pci is not None:
|
12892 |
|
nic.idx = nic_idx
|
12893 |
|
nic.pci = pci
|
|
12902 |
nic.idx, nic.pci = _GetPCIInfo(self, 'nics')
|
|
12903 |
if nic.pci is not None and _InstanceRunning(self, self.instance):
|
12894 |
12904 |
self.rpc.call_hot_add_nic(self.instance.primary_node,
|
12895 |
12905 |
self.instance, nic, idx)
|
12896 |
12906 |
desc = [
|
... | ... | |
12920 |
12930 |
|
12921 |
12931 |
#TODO: log warning in case hotplug is not possible
|
12922 |
12932 |
# handle errors
|
12923 |
|
if self.op.hotplug and nic.pci:
|
|
12933 |
if self.op.hotplug and nic.pci and _InstanceRunning(self, self.instance):
|
12924 |
12934 |
self.LogInfo("Trying to hotplug device.")
|
12925 |
12935 |
self.rpc.call_hot_del_nic(self.instance.primary_node,
|
12926 |
12936 |
self.instance, nic, idx)
|
... | ... | |
12936 |
12946 |
#TODO: log warning in case hotplug is not possible
|
12937 |
12947 |
# handle errors
|
12938 |
12948 |
if self.op.hotplug and nic.pci:
|
12939 |
|
self.LogInfo("Trying to hotplug device.")
|
12940 |
|
self.rpc.call_hot_del_nic(self.instance.primary_node,
|
12941 |
|
self.instance, nic, idx)
|
12942 |
|
self.cfg.UpdatePCIInfo(self.instance.name, nic.pci)
|
|
12949 |
if _InstanceRunning(self, self.instance):
|
|
12950 |
self.LogInfo("Trying to hotplug device.")
|
|
12951 |
self.rpc.call_hot_del_nic(self.instance.primary_node,
|
|
12952 |
self.instance, nic, idx)
|
|
12953 |
self.cfg.UpdatePCIInfo(self.instance, nic.pci)
|
12943 |
12954 |
|
12944 |
12955 |
|
12945 |
12956 |
def Exec(self, feedback_fn):
|