I forgot to recursively remove the physical_id from the whole disk
structure, so I'd like to include the following interdiff:
diff --git a/tools/cfgupgrade b/tools/cfgupgrade
index b280185..648d732 100755
--- a/tools/cfgupgrade
+++ b/tools/cfgupgrade
@@ -173,6 +173,14 @@ def GetExclusiveStorageValue(config_data):
return ret
+def RemovePhysicalId(disk):
+ if "children" in disk:
+ for d in disk["children"]:
+ RemovePhysicalId(d)
+ if "physical_id" in disk:
+ del disk["physical_id"]
+
+
def UpgradeInstances(config_data):
network2uuid = dict((n["name"], n["uuid"])
for n in config_data["networks"].values())
@@ -194,8 +202,7 @@ def UpgradeInstances(config_data):
raise Error("Instance '%s' doesn't have a disks entry?!" % instance)
disks = iobj["disks"]
for idx, dobj in enumerate(disks):
- if "physical_id" in dobj:
- del dobj["physical_id"]
+ RemovePhysicalId(dobj)
expected = "disk/%s" % idx
current = dobj.get("iv_name", "")
Thanks,
Thomas
On Mon, Sep 23, 2013 at 2:36 PM, Jose A. Lopes <[email protected]> wrote:
> On Fri, Sep 20, 2013 at 07:41:06PM +0200, Thomas Thrainer wrote:
> > The physical_id field is no longer supported in disk objects, so remove
> > it during upgrades.
> >
> > Signed-off-by: Thomas Thrainer <[email protected]>
> > ---
> > test/py/cfgupgrade_unittest.py | 6 ++++++
> > tools/cfgupgrade | 3 +++
> > 2 files changed, 9 insertions(+)
> >
> > diff --git a/test/py/cfgupgrade_unittest.py
> b/test/py/cfgupgrade_unittest.py
> > index 47ebd9d..09b16c4 100755
> > --- a/test/py/cfgupgrade_unittest.py
> > +++ b/test/py/cfgupgrade_unittest.py
> > @@ -392,6 +392,12 @@ class TestCfgupgrade(unittest.TestCase):
> > _RunUpgrade(self.tmpdir, False, True, downgrade=True)
> > oldconf = self._LoadTestDataConfig(oldconfname)
> > newconf = self._LoadConfig()
> > +
> > + # downgrade from 2.10 to 2.9 does not add physical_id to disks,
> which is ok
> > + for inst in oldconf["instances"].values():
> > + for disk in inst["disks"]:
> > + del disk["physical_id"]
> > +
> > self.assertEqual(oldconf, newconf)
> >
> > def testDowngradeFullConfigBackwardFrom_2_7(self):
> > diff --git a/tools/cfgupgrade b/tools/cfgupgrade
> > index 0054d20..b280185 100755
> > --- a/tools/cfgupgrade
> > +++ b/tools/cfgupgrade
> > @@ -194,6 +194,9 @@ def UpgradeInstances(config_data):
> > raise Error("Instance '%s' doesn't have a disks entry?!" %
> instance)
> > disks = iobj["disks"]
> > for idx, dobj in enumerate(disks):
> > + if "physical_id" in dobj:
> > + del dobj["physical_id"]
> > +
> > expected = "disk/%s" % idx
> > current = dobj.get("iv_name", "")
> > if current != expected:
> > --
> > 1.8.4
> >
>
> LGTM.
>
> Thanks,
> Jose
>
> --
> Jose Antonio Lopes
> Ganeti Engineering
> Google Germany GmbH
> Dienerstr. 12, 80331, München
>
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Graham Law, Christine Elizabeth Flores
> Steuernummer: 48/725/00206
> Umsatzsteueridentifikationsnummer: DE813741370
>
--
Thomas Thrainer | Software Engineer | [email protected] |
Google Germany GmbH
Dienerstr. 12
80331 München
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores