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

Reply via email to