[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