[lxc-devel] [PATCH] python3: binding update

Stéphane Graber stgraber at ubuntu.com
Thu Jan 16 19:49:07 UTC 2014


On Thu, Jan 16, 2014 at 01:09:58PM -0600, Serge Hallyn wrote:
> Quoting Stéphane Graber (stgraber at ubuntu.com):
> > This adds rename(new_name) to the binding as well as two new const,
> > LXC_CLONE_KEEPBDEVTYPE and LXC_CLONE_MAYBE_SNAPSHOT.
> > 
> > Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
> > ---
> >  src/python-lxc/lxc.c           | 25 +++++++++++++++++++++++++
> >  src/python-lxc/lxc/__init__.py | 14 ++++++++++++++
> >  2 files changed, 39 insertions(+)
> > 
> > diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
> > index 4381ab8..33b3e41 100644
> > --- a/src/python-lxc/lxc.c
> > +++ b/src/python-lxc/lxc.c
> > @@ -1038,6 +1038,23 @@ Container_reboot(Container *self, PyObject *args, PyObject *kwds)
> >  }
> >  
> >  static PyObject *
> > +Container_rename(Container *self, PyObject *args, PyObject *kwds)
> > +{
> > +    char *new_name = NULL;
> > +    static char *kwlist[] = {"new_name", NULL};
> > +
> > +    if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|", kwlist,
> > +                                      &new_name))
> > +        return NULL;
> > +
> > +    if (self->container->rename(self->container, new_name)) {
> > +        Py_RETURN_TRUE;
> > +    }
> > +
> > +    Py_RETURN_FALSE;
> > +}
> > +
> > +static PyObject *
> >  Container_remove_device_node(Container *self, PyObject *args, PyObject *kwds)
> >  {
> >      static char *kwlist[] = {"src_path", "dest_path", NULL};
> > @@ -1529,6 +1546,12 @@ static PyMethodDef Container_methods[] = {
> >       "\n"
> >       "Ask the container to reboot."
> >      },
> > +    {"rename", (PyCFunction)Container_rename,
> > +     METH_VARARGS|METH_KEYWORDS,
> > +     "rename(new_name) -> boolean\n"
> > +     "\n"
> > +     "Rename the container."
> > +    },
> >      {"remove_device_node", (PyCFunction)Container_remove_device_node,
> >       METH_VARARGS|METH_KEYWORDS,
> >       "remove_device_node(src_path, dest_path) -> boolean\n"
> > @@ -1740,8 +1763,10 @@ PyInit__lxc(void)
> >      PYLXC_EXPORT_CONST(LXC_ATTACH_SET_PERSONALITY);
> >  
> >      /* clone: clone flags */
> > +    PYLXC_EXPORT_CONST(LXC_CLONE_KEEPBDEVTYPE);
> >      PYLXC_EXPORT_CONST(LXC_CLONE_KEEPMACADDR);
> >      PYLXC_EXPORT_CONST(LXC_CLONE_KEEPNAME);
> > +    PYLXC_EXPORT_CONST(LXC_CLONE_MAYBE_SNAPSHOT);
> >      PYLXC_EXPORT_CONST(LXC_CLONE_SNAPSHOT);
> >  
> >      /* create: create flags */
> > diff --git a/src/python-lxc/lxc/__init__.py b/src/python-lxc/lxc/__init__.py
> > index 0ca3e54..fa74297 100644
> > --- a/src/python-lxc/lxc/__init__.py
> > +++ b/src/python-lxc/lxc/__init__.py
> > @@ -327,6 +327,18 @@ class Container(_lxc.Container):
> >  
> >          return ips
> >  
> > +    def rename(self, new_name):
> > +        """
> > +            Rename the container.
> > +            On success, returns the new Container object.
> > +            On failure, returns False.
> > +        """
> > +
> > +        if _lxc.Container.rename(self, new_name):
> > +            return Container(new_name)
> 
> Does this work?  Will python automatically set self to new_name?

No, it won't alter self, it'll return you a new Container object.

So you should do something like:
 container = lxc.Container("p1")
 new_container = container.rename("p2")

 if new_container:
     container = new_container

I originally tried to do "self = Container(new_name)" and while it
doesn't fail, it doesn't alter self either and I didn't want to resort
to even more magic :)

The behavior I implemented also happens to be identical to that of clone().

> 
> > +
> > +        return False
> > +
> >      def set_config_item(self, key, value):
> >          """
> >              Set a config key to a provided value.
> > @@ -454,8 +466,10 @@ LXC_ATTACH_REMOUNT_PROC_SYS = _lxc.LXC_ATTACH_REMOUNT_PROC_SYS
> >  LXC_ATTACH_SET_PERSONALITY = _lxc.LXC_ATTACH_SET_PERSONALITY
> >  
> >  # clone: clone flags
> > +LXC_CLONE_KEEPBDEVTYPE = _lxc.LXC_CLONE_KEEPBDEVTYPE
> >  LXC_CLONE_KEEPMACADDR = _lxc.LXC_CLONE_KEEPMACADDR
> >  LXC_CLONE_KEEPNAME = _lxc.LXC_CLONE_KEEPNAME
> > +LXC_CLONE_MAYBE_SNAPSHOT = _lxc.LXC_CLONE_MAYBE_SNAPSHOT
> >  LXC_CLONE_SNAPSHOT = _lxc.LXC_CLONE_SNAPSHOT
> >  
> >  # create: create flags
> > -- 
> > 1.8.5.2
> > 
> > _______________________________________________
> > lxc-devel mailing list
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140116/331b9a12/attachment-0001.pgp>


More information about the lxc-devel mailing list