From e94fc80c4a887fb38f2abdcefa517befaef6633c Mon Sep 17 00:00:00 2001 From: Bernardo Dal Seno <bdalseno@google.com> Date: Mon, 8 Apr 2013 20:42:59 +0200 Subject: [PATCH] cfgupgrade: Limit specs in ipolicy are always complete Partial specs are filled with cluster defaults. Signed-off-by: Bernardo Dal Seno <bdalseno@google.com> Reviewed-by: Helga Velroyen <helgav@google.com> --- tools/cfgupgrade | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/tools/cfgupgrade b/tools/cfgupgrade index eefabec5f..3b08701ee 100755 --- a/tools/cfgupgrade +++ b/tools/cfgupgrade @@ -102,17 +102,28 @@ def CheckHostname(path): return False -def UpgradeIPolicy(ipolicy): +def _FillIPolicySpecs(default_ipolicy, ipolicy): + if "minmax" in ipolicy: + for (key, spec) in ipolicy["minmax"].items(): + for (par, val) in default_ipolicy["minmax"][key].items(): + if par not in spec: + spec[par] = val + + +def UpgradeIPolicy(ipolicy, default_ipolicy, isgroup): minmax_keys = ["min", "max"] if any((k in ipolicy) for k in minmax_keys): minmax = {} - ipolicy["minmax"] = minmax for key in minmax_keys: if key in ipolicy: - minmax[key] = ipolicy[key] + if ipolicy[key]: + minmax[key] = ipolicy[key] del ipolicy[key] - else: - minmax[key] = {} + if minmax: + ipolicy["minmax"] = minmax + if isgroup and "std" in ipolicy: + del ipolicy["std"] + _FillIPolicySpecs(default_ipolicy, ipolicy) def UpgradeNetworks(config_data): @@ -125,19 +136,23 @@ def UpgradeCluster(config_data): cluster = config_data.get("cluster", None) if cluster is None: raise Error("Cannot find cluster") - ipolicy = cluster.get("ipolicy", None) + ipolicy = cluster.setdefault("ipolicy", None) if ipolicy: - UpgradeIPolicy(ipolicy) + UpgradeIPolicy(ipolicy, constants.IPOLICY_DEFAULTS, False) def UpgradeGroups(config_data): + cl_ipolicy = config_data["cluster"].get("ipolicy") for group in config_data["nodegroups"].values(): networks = group.get("networks", None) if not networks: group["networks"] = {} ipolicy = group.get("ipolicy", None) if ipolicy: - UpgradeIPolicy(ipolicy) + if cl_ipolicy is None: + raise Error("A group defines an instance policy but there is no" + " instance policy at cluster level") + UpgradeIPolicy(ipolicy, cl_ipolicy, True) def UpgradeInstances(config_data): @@ -258,12 +273,14 @@ def DowngradeIPolicy(ipolicy): for key in minmax_keys: spec = minmax.get(key, {}) ipolicy[key] = spec + if "std" not in ipolicy: + ipolicy["std"] = {} def DowngradeGroups(config_data): for group in config_data["nodegroups"].values(): ipolicy = group.get("ipolicy", None) - if ipolicy: + if ipolicy is not None: DowngradeIPolicy(ipolicy) -- GitLab