[lxc-devel] [PATCH] introduce snapshot_destroy
S.Çağlar Onur
caglar at 10ur.org
Sat Oct 19 04:49:20 UTC 2013
Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
---
src/lxc/lxccontainer.c | 33 +++++++++++++++++++++++++++++++++
src/lxc/lxccontainer.h | 7 +++++++
2 files changed, 40 insertions(+)
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index c46adf3..c8ecef3 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -2614,6 +2614,38 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, char *snapname, cha
return b;
}
+static bool lxcapi_snapshot_destroy(struct lxc_container *c, char *snapname)
+{
+ int ret;
+ char clonelxcpath[MAXPATHLEN];
+ struct lxc_container *snap = NULL;
+
+ if (!c || !c->name || !c->config_path)
+ return false;
+
+ ret = snprintf(clonelxcpath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
+ if (ret < 0 || ret >= MAXPATHLEN)
+ goto err;
+
+ snap = lxc_container_new(snapname, clonelxcpath);
+ if (!snap || !lxcapi_is_defined(snap)) {
+ ERROR("Could not find snapshot %s", snapname);
+ goto err;
+ }
+
+ if (!lxcapi_destroy(snap)) {
+ ERROR("Could not destroy snapshot %s", snapname);
+ goto err;
+ }
+ lxc_container_put(snap);
+
+ return true;
+err:
+ if (snap)
+ lxc_container_put(snap);
+ return false;
+}
+
static bool lxcapi_may_control(struct lxc_container *c)
{
return lxc_try_cmd(c->name, c->config_path) == 0;
@@ -2738,6 +2770,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
c->snapshot = lxcapi_snapshot;
c->snapshot_list = lxcapi_snapshot_list;
c->snapshot_restore = lxcapi_snapshot_restore;
+ c->snapshot_destroy = lxcapi_snapshot_destroy;
c->may_control = lxcapi_may_control;
/* we'll allow the caller to update these later */
diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
index b7dc1a4..762e1b0 100644
--- a/src/lxc/lxccontainer.h
+++ b/src/lxc/lxccontainer.h
@@ -225,6 +225,13 @@ struct lxc_container {
bool (*snapshot_restore)(struct lxc_container *c, char *snapname, char *newname);
/*
+ * snapshot_destroy() will destroy the given snapshot of c
+ *
+ * Returns true on success, false on failure.
+ */
+ bool (*snapshot_destroy)(struct lxc_container *c, char *snapname);
+
+ /*
* Return false if there is a control socket for the container monitor,
* and the caller may not access it. Return true otherwise.
*/
--
1.8.1.2
More information about the lxc-devel
mailing list