From: S.Çağlar Onur Date: Sat, 19 Oct 2013 04:49:20 +0000 (-0400) Subject: introduce snapshot_destroy X-Git-Tag: lxc-1.0.0.alpha3~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=771d96b3807ed090a5dd341302d6317acdfb16ca;p=thirdparty%2Flxc.git introduce snapshot_destroy Signed-off-by: S.Çağlar Onur Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index c46adf38c..c8ecef3b2 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 b7dc1a47f..762e1b035 100644 --- a/src/lxc/lxccontainer.h +++ b/src/lxc/lxccontainer.h @@ -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.