diff --git a/lib/backend.py b/lib/backend.py index bc961042e2efef11fa5f0188cf69b1df237376da..9c3f094ee258a02fa896f9968c70362e8f7fdbaa 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -61,6 +61,7 @@ from ganeti import serializer from ganeti import netutils from ganeti import runtime from ganeti import mcpu +from ganeti import compat _BOOT_ID_PATH = "/proc/sys/kernel/random/boot_id" @@ -259,7 +260,8 @@ def RunLocalHooks(hook_opcode, hooks_path, env_builder_fn): @param hooks_path: path of the hooks @type env_builder_fn: function @param env_builder_fn: function that returns a dictionary containing the - environment variables for the hooks. + environment variables for the hooks. Will get all the parameters of the + decorated function. @raise RPCFail: in case of pre-hook failure """ @@ -268,11 +270,13 @@ def RunLocalHooks(hook_opcode, hooks_path, env_builder_fn): _, myself = ssconf.GetMasterAndMyself() nodes = ([myself], [myself]) # these hooks run locally + env_fn = compat.partial(env_builder_fn, *args, **kwargs) + cfg = _GetConfig() hr = HooksRunner() hm = mcpu.HooksMaster(hook_opcode, hooks_path, nodes, hr.RunLocalHooks, - None, env_builder_fn, logging.warning, - cfg.GetClusterName(), cfg.GetMasterNode()) + None, env_fn, logging.warning, cfg.GetClusterName(), + cfg.GetMasterNode()) hm.RunPhase(constants.HOOKS_PHASE_PRE) result = fn(*args, **kwargs) @@ -283,17 +287,19 @@ def RunLocalHooks(hook_opcode, hooks_path, env_builder_fn): return decorator -def _BuildMasterIpEnv(): +def _BuildMasterIpEnv(master_params): """Builds environment variables for master IP hooks. + @type master_params: L{objects.MasterNetworkParameters} + @param master_params: network parameters of the master + """ - master_netdev, master_ip, _, family, master_netmask = GetMasterInfo() - version = str(netutils.IPAddress.GetVersionFromAddressFamily(family)) + ver = netutils.IPAddress.GetVersionFromAddressFamily(master_params.ip_family) env = { - "MASTER_NETDEV": master_netdev, - "MASTER_IP": master_ip, - "MASTER_NETMASK": master_netmask, - "CLUSTER_IP_VERSION": version, + "MASTER_NETDEV": master_params.netdev, + "MASTER_IP": master_params.ip, + "MASTER_NETMASK": master_params.netmask, + "CLUSTER_IP_VERSION": str(ver), } return env