mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-24 15:42:24 +00:00
introduce lxcapi_rename for renaming containers
lxcapi_rename implemented as a convenience function as lately I find myself in a need to rename a container due to a typo in its name. I could have started over but didn't want to spend more time (to installing extra packages and changing their configuration) on it. c->clone() followed by c->destroy() did the trick for me and I though it could be helpful to the other people, so here it is. Signed-off-by: S.Çağlar Onur <caglar@10ur.org> Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
parent
713893cdbc
commit
06e5650eab
@ -2596,6 +2596,38 @@ out:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool lxcapi_rename(struct lxc_container *c, const char *newname)
|
||||
{
|
||||
struct bdev *bdev;
|
||||
struct lxc_container *newc;
|
||||
int flags = LXC_CLONE_KEEPMACADDR | LXC_CLONE_COPYHOOKS;
|
||||
|
||||
if (!c || !c->name || !c->config_path)
|
||||
return false;
|
||||
|
||||
bdev = bdev_init(c->lxc_conf->rootfs.path, c->lxc_conf->rootfs.mount, NULL);
|
||||
if (!bdev) {
|
||||
ERROR("Failed to find original backing store type");
|
||||
return false;
|
||||
}
|
||||
|
||||
newc = lxcapi_clone(c, newname, c->config_path, flags, NULL, bdev->type, 0, NULL);
|
||||
bdev_put(bdev);
|
||||
if (!newc) {
|
||||
lxc_container_put(newc);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newc && lxcapi_is_defined(newc))
|
||||
lxc_container_put(newc);
|
||||
|
||||
if (!lxcapi_destroy(c)) {
|
||||
ERROR("Could not destroy existing container %s", c->name);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int lxcapi_attach(struct lxc_container *c, lxc_attach_exec_t exec_function, void *exec_payload, lxc_attach_options_t *options, pid_t *attached_process)
|
||||
{
|
||||
if (!c)
|
||||
@ -3139,6 +3171,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
|
||||
c->wait = lxcapi_wait;
|
||||
c->set_config_item = lxcapi_set_config_item;
|
||||
c->destroy = lxcapi_destroy;
|
||||
c->rename = lxcapi_rename;
|
||||
c->save_config = lxcapi_save_config;
|
||||
c->get_keys = lxcapi_get_keys;
|
||||
c->create = lxcapi_create;
|
||||
|
@ -325,6 +325,16 @@ struct lxc_container {
|
||||
bool (*createl)(struct lxc_container *c, const char *t, const char *bdevtype,
|
||||
struct bdev_specs *specs, int flags, ...);
|
||||
|
||||
/*!
|
||||
* \brief Rename a container
|
||||
*
|
||||
* \param c Container.
|
||||
* \param newname New name to be used for the container.
|
||||
*
|
||||
* \return \c true on success, else \c false.
|
||||
*/
|
||||
bool (*rename)(struct lxc_container *c, const char *newname);
|
||||
|
||||
/*!
|
||||
* \brief Request the container reboot by sending it \c SIGINT.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user