Revision e94fc80c

b/tools/cfgupgrade
102 102
  return False
103 103

  
104 104

  
105
def UpgradeIPolicy(ipolicy):
105
def _FillIPolicySpecs(default_ipolicy, ipolicy):
106
  if "minmax" in ipolicy:
107
    for (key, spec) in ipolicy["minmax"].items():
108
      for (par, val) in default_ipolicy["minmax"][key].items():
109
        if par not in spec:
110
          spec[par] = val
111

  
112

  
113
def UpgradeIPolicy(ipolicy, default_ipolicy, isgroup):
106 114
  minmax_keys = ["min", "max"]
107 115
  if any((k in ipolicy) for k in minmax_keys):
108 116
    minmax = {}
109
    ipolicy["minmax"] = minmax
110 117
    for key in minmax_keys:
111 118
      if key in ipolicy:
112
        minmax[key] = ipolicy[key]
119
        if ipolicy[key]:
120
          minmax[key] = ipolicy[key]
113 121
        del ipolicy[key]
114
      else:
115
        minmax[key] = {}
122
    if minmax:
123
      ipolicy["minmax"] = minmax
124
  if isgroup and "std" in ipolicy:
125
    del ipolicy["std"]
126
  _FillIPolicySpecs(default_ipolicy, ipolicy)
116 127

  
117 128

  
118 129
def UpgradeNetworks(config_data):
......
125 136
  cluster = config_data.get("cluster", None)
126 137
  if cluster is None:
127 138
    raise Error("Cannot find cluster")
128
  ipolicy = cluster.get("ipolicy", None)
139
  ipolicy = cluster.setdefault("ipolicy", None)
129 140
  if ipolicy:
130
    UpgradeIPolicy(ipolicy)
141
    UpgradeIPolicy(ipolicy, constants.IPOLICY_DEFAULTS, False)
131 142

  
132 143

  
133 144
def UpgradeGroups(config_data):
145
  cl_ipolicy = config_data["cluster"].get("ipolicy")
134 146
  for group in config_data["nodegroups"].values():
135 147
    networks = group.get("networks", None)
136 148
    if not networks:
137 149
      group["networks"] = {}
138 150
    ipolicy = group.get("ipolicy", None)
139 151
    if ipolicy:
140
      UpgradeIPolicy(ipolicy)
152
      if cl_ipolicy is None:
153
        raise Error("A group defines an instance policy but there is no"
154
                    " instance policy at cluster level")
155
      UpgradeIPolicy(ipolicy, cl_ipolicy, True)
141 156

  
142 157

  
143 158
def UpgradeInstances(config_data):
......
258 273
    for key in minmax_keys:
259 274
      spec = minmax.get(key, {})
260 275
      ipolicy[key] = spec
276
    if "std" not in ipolicy:
277
      ipolicy["std"] = {}
261 278

  
262 279

  
263 280
def DowngradeGroups(config_data):
264 281
  for group in config_data["nodegroups"].values():
265 282
    ipolicy = group.get("ipolicy", None)
266
    if ipolicy:
283
    if ipolicy is not None:
267 284
      DowngradeIPolicy(ipolicy)
268 285

  
269 286

  

Also available in: Unified diff