LGTM, thanks
On Mon, Apr 15, 2013 at 1:48 PM, Bernardo Dal Seno <bdals...@google.com>wrote: > Partial specs are filled with cluster defaults. > > Signed-off-by: Bernardo Dal Seno <bdals...@google.com> > --- > tools/cfgupgrade | 35 ++++++++++++++++++++++++++--------- > 1 file changed, 26 insertions(+), 9 deletions(-) > > diff --git a/tools/cfgupgrade b/tools/cfgupgrade > index eefabec..3b08701 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) > > > -- > 1.8.1.3 > >