Quoting Stéphane Graber ([email protected]): > On Thu, Jan 16, 2014 at 01:09:58PM -0600, Serge Hallyn wrote: > > Quoting Stéphane Graber ([email protected]): > > > 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 <[email protected]> > > > --- > > > 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().
Hm, ok. I wonder if there is a better way, but in any case Acked-by: Serge E. Hallyn <[email protected]> _______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
