X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/f2def43abca8c7e2b80577309698668e7227ff98..cd098c41522469e462efeb1e157a8718ff7b7809:/lib/rpc.py?ds=sidebyside diff --git a/lib/rpc.py b/lib/rpc.py index 12791fe..e4bb938 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -217,7 +217,7 @@ class Client: """Call nodes and return results. @rtype: list - @returns: List of RPC results + @return: List of RPC results """ assert _http_manager, "RPC module not intialized" @@ -260,7 +260,7 @@ class RpcRunner(object): self._cfg = cfg self.port = utils.GetNodeDaemonPort() - def _InstDict(self, instance): + def _InstDict(self, instance, hvp=None, bep=None): """Convert the given instance to a dict. This is done via the instance's ToDict() method and additionally @@ -268,6 +268,10 @@ class RpcRunner(object): @type instance: L{objects.Instance} @param instance: an Instance object + @type hvp: dict or None + @param hvp: a dictionary with overriden hypervisor parameters + @type bep: dict or None + @param bep: a dictionary with overriden backend parameters @rtype: dict @return: the instance dict, with the hvparams filled with the cluster defaults @@ -276,7 +280,11 @@ class RpcRunner(object): idict = instance.ToDict() cluster = self._cfg.GetClusterInfo() idict["hvparams"] = cluster.FillHV(instance) + if hvp is not None: + idict["hvparams"].update(hvp) idict["beparams"] = cluster.FillBE(instance) + if bep is not None: + idict["beparams"].update(bep) return idict def _ConnectList(self, client, node_list, call): @@ -425,14 +433,14 @@ class RpcRunner(object): """ return self._SingleNodeCall(node, "bridges_exist", [bridges_list]) - def call_instance_start(self, node, instance, extra_args): + def call_instance_start(self, node, instance, hvp, bep): """Starts an instance. This is a single-node call. """ - return self._SingleNodeCall(node, "instance_start", - [self._InstDict(instance), extra_args]) + idict = self._InstDict(instance, hvp=hvp, bep=bep) + return self._SingleNodeCall(node, "instance_start", [idict]) def call_instance_shutdown(self, node, instance): """Stops an instance. @@ -515,24 +523,23 @@ class RpcRunner(object): return self._SingleNodeCall(node, "instance_migrate", [self._InstDict(instance), target, live]) - def call_instance_reboot(self, node, instance, reboot_type, extra_args): + def call_instance_reboot(self, node, instance, reboot_type): """Reboots an instance. This is a single-node call. """ return self._SingleNodeCall(node, "instance_reboot", - [self._InstDict(instance), reboot_type, - extra_args]) + [self._InstDict(instance), reboot_type]) - def call_instance_os_add(self, node, inst): + def call_instance_os_add(self, node, inst, reinstall): """Installs an OS on the given instance. This is a single-node call. """ return self._SingleNodeCall(node, "instance_os_add", - [self._InstDict(inst)]) + [self._InstDict(inst), reinstall]) def call_instance_run_rename(self, node, inst, old_name): """Run the OS rename script for an instance. @@ -1023,6 +1030,16 @@ class RpcRunner(object): """ return self._SingleNodeCall(node, "node_demote_from_mc", []) + + def call_node_powercycle(self, node, hypervisor): + """Tries to powercycle a node. + + This is a single-node call. + + """ + return self._SingleNodeCall(node, "node_powercycle", [hypervisor]) + + def call_test_delay(self, node_list, duration): """Sleep for a fixed time on given node(s). @@ -1118,6 +1135,6 @@ class RpcRunner(object): """ cluster = self._cfg.GetClusterInfo() - hv_full = cluster.FillDict(cluster.hvparams.get(hvname, {}), hvparams) + hv_full = objects.FillDict(cluster.hvparams.get(hvname, {}), hvparams) return self._MultiNodeCall(node_list, "hypervisor_validate_params", [hvname, hv_full])