]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
introduce snapshot_destroy
authorS.Çağlar Onur <caglar@10ur.org>
Sat, 19 Oct 2013 04:49:20 +0000 (00:49 -0400)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Sat, 19 Oct 2013 14:49:19 +0000 (09:49 -0500)
Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxccontainer.c
src/lxc/lxccontainer.h

index c46adf38c37683bc1781cd06c4e88b10e8113099..c8ecef3b2dc57ff10279a6ad50eb25d61ed31934 100644 (file)
@@ -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 */
index b7dc1a47f81fab2be3c76a60179b4fcf5e4875e9..762e1b0352fc9865eeb5dcc43e17cdaddf81e8e5 100644 (file)
@@ -224,6 +224,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.