aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2012-10-14 03:13:00 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2012-10-14 03:13:00 +0300
commit4253839e72aebd5a71684a13d5a40d70cb34e593 (patch)
treecf94f7c0051eb7bbfeed2e62fe9bef63b685adb7
parent44b7be0657daf7b07c480ee9212a25e045624686 (diff)
downloadeclat-4253839e72aebd5a71684a13d5a40d70cb34e593.tar.gz
eclat-4253839e72aebd5a71684a13d5a40d70cb34e593.tar.bz2
Implement snapshot-management commands.
* TODO: Update. * configure.ac: Update. * doc/eclat.1: Update. * etc/create-snapshot.fln: New file. * etc/delete-snapshot.fln: New file. * etc/describe-snapshots.fln: New file. * etc/Makefile.am: Add new files. * lib/forlan.c (eval_func): Set return type according to that of the called function. (empty,timestamp): New built-in functions. * src/Makefile.am: Add new files. * src/cresnap.c: New file. * src/delsnap.c: New file. * src/dscrsnap-cl.opt: New file. * src/dscrsnap.c: New file. * src/eclat.c: Register new commands. * src/eclat.h: Add new prototypes. * tests/create-snapshot.at: New file. * tests/Makefile.am: Add new file. * tests/testsuite.at: Likewise.
-rw-r--r--TODO6
-rw-r--r--configure.ac2
-rw-r--r--doc/eclat.15
-rw-r--r--etc/Makefile.am3
-rw-r--r--etc/create-snapshot.fln21
-rw-r--r--etc/delete-snapshot.fln22
-rw-r--r--etc/describe-snapshots.fln29
m---------grecs0
-rw-r--r--lib/forlan.c36
-rw-r--r--src/Makefile.am4
-rw-r--r--src/cresnap.c62
-rw-r--r--src/delsnap.c40
-rw-r--r--src/dscrsnap-cl.opt61
-rw-r--r--src/dscrsnap.c52
-rw-r--r--src/eclat.c8
-rw-r--r--src/eclat.h3
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/create-snapshot.at33
-rw-r--r--tests/testsuite.at1
19 files changed, 383 insertions, 6 deletions
diff --git a/TODO b/TODO
index 05f1ef2..7900e66 100644
--- a/TODO
+++ b/TODO
@@ -39,7 +39,7 @@ CreateReservedInstancesListing CRERSRVDINSTSLST [ ] [ ]
CreateRoute CREROUT [ ] [ ]
CreateRouteTable CREROUTTAB [ ] [ ]
CreateSecurityGroup CRESECGRP [ ] [ ]
-CreateSnapshot CRESNAP [ ] [ ]
+CreateSnapshot CRESNAP [X] [ ]
CreateSpotDatafeedSubscription CRESPOTDFSSCR [ ] [ ]
CreateSubnet CRESUB [ ] [ ]
CreateTags CRETAGS [X] [ ]
@@ -59,7 +59,7 @@ DeletePlacementGroup DELPLCGRP [ ] [ ]
DeleteRoute DELROUT [ ] [ ]
DeleteRouteTable DELROUTTAB [ ] [ ]
DeleteSecurityGroup DELSECGRP [ ] [ ]
-DeleteSnapshot DELSNAP [ ] [ ]
+DeleteSnapshot DELSNAP [X] [ ]
DeleteSpotDatafeedSubscription DELSPOTDFSSCR [ ] [ ]
DeleteSubnet DELSUB [ ] [ ]
DeleteTags DELTAGS [X] [ ]
@@ -94,7 +94,7 @@ DescribeReservedInstancesOfferings DSCRRSRVDINSTSOFRS [ ] [ ]
DescribeRouteTables DSCRROUTTABS [ ] [ ]
DescribeSecurityGroups DSCRSECGRPS [X] [ ]
DescribeSnapshotAttribute DSCRSNAPATTR [ ] [ ]
-DescribeSnapshots DSCRSNAPS [ ] [ ]
+DescribeSnapshots DSCRSNAPS [X] [ ]
DescribeSpotDatafeedSubscription DSCRSPOTDFSSCR [ ] [ ]
DescribeSpotInstanceRequests DSCRSPOTINSTREQS [ ] [ ]
DescribeSpotPriceHistory DSCRSPOTPRICHIST [ ] [ ]
diff --git a/configure.ac b/configure.ac
index 4cdaa05..233905b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@
AC_PREREQ(2.63)
AC_INIT([eclat], 0.1, [bug-eclat@gnu.org.ua],,
- [http://www.gnu.org/software/eclat])
+ [http://www.gnu.org.ua/software/eclat])
AC_CONFIG_SRCDIR([src/eclat.h])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADER([config.h])
diff --git a/doc/eclat.1 b/doc/eclat.1
index d2af06f..59818cc 100644
--- a/doc/eclat.1
+++ b/doc/eclat.1
@@ -13,7 +13,7 @@
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with Eclat. If not, see <http://www.gnu.org/licenses/>.
-.TH ECLAT 1 "October 11, 2012" "ECLAT" "Eclat User Reference"
+.TH ECLAT 1 "October 14, 2012" "ECLAT" "Eclat User Reference"
.SH NAME
eclat \- EC2 Command Line Administrator Tool
.SH SYNOPSIS
@@ -210,12 +210,15 @@ To get a help on a particular command, refer to \fBeclat-\fIcommand\fR
commands are implemented:
.BR associate-address ,
.BR create-tags ,
+.BR create-snapshot ,
.BR delete-tags ,
+.BR delete-snapshot,
.BR describe-addresses ,
.BR describe-instance-attribute ,
.BR describe-instance-status ,
.BR describe-instances ,
.BR describe-security-groups ,
+.BR describe-snapshots ,
.BR describe-tags ,
.BR describe-volumes ,
.BR disassociate-address ,
diff --git a/etc/Makefile.am b/etc/Makefile.am
index 3ccb0f4..bf58e88 100644
--- a/etc/Makefile.am
+++ b/etc/Makefile.am
@@ -18,13 +18,16 @@ noinst_PROGRAMS = flncat
FLNFILES=\
associate-address.fln\
+ create-snapshot.fln\
create-tags.fln\
+ delete-snapshot.fln\
delete-tags.fln\
describe-addresses.fln\
describe-instance-attribute.fln\
describe-instance-status.fln\
describe-instances.fln\
describe-security-groups.fln\
+ describe-snapshots.fln\
describe-tags.fln\
describe-volumes.fln\
disassociate-address.fln\
diff --git a/etc/create-snapshot.fln b/etc/create-snapshot.fln
new file mode 100644
index 0000000..4fa2594
--- /dev/null
+++ b/etc/create-snapshot.fln
@@ -0,0 +1,21 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+if (.CreateSnapshotResponse) {
+ let resp = .CreateSnapshotResponse;
+ print(resp.snapshotId,"\t",resp.volumeId," ",resp.volumeSize,"\t",
+ resp.status,"\t",resp.progress,"\t",resp.startTime,"\n");
+}
diff --git a/etc/delete-snapshot.fln b/etc/delete-snapshot.fln
new file mode 100644
index 0000000..5c627e1
--- /dev/null
+++ b/etc/delete-snapshot.fln
@@ -0,0 +1,22 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+if (.DeleteSnapshotResponse.return) {
+ if (!.DeleteSnapshotResponse.return[true]) {
+ error("Return: ",.DeleteSnapshotResponse.return,"\n");
+ exit(1);
+ }
+}
diff --git a/etc/describe-snapshots.fln b/etc/describe-snapshots.fln
new file mode 100644
index 0000000..1e49924
--- /dev/null
+++ b/etc/describe-snapshots.fln
@@ -0,0 +1,29 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+if (.DescribeSnapshotsResponse.snapshotSet) {
+ for (var in last.item) {
+ print(var.snapshotId,"\t",var.volumeId," ",var.volumeSize,"\t",
+ var.status,"\t",var.progress,"\t",var.startTime);
+ if (var.description)
+ print("\t", var.description);
+ print("\n");
+ if (!empty(var.tagSet)) {
+ for (tag in var.tagSet.item)
+ print("\t", tag.key,"=",tag.value,"\n");
+ }
+ }
+}
diff --git a/grecs b/grecs
-Subproject 740068b42c4097515a0c531209cc6b49c445342
+Subproject bef65e80588f71b1fe5247869e6cab20d334aa6
diff --git a/lib/forlan.c b/lib/forlan.c
index e86189b..6b10cd7 100644
--- a/lib/forlan.c
+++ b/lib/forlan.c
@@ -18,6 +18,8 @@
#include <string.h>
#include <setjmp.h>
#include <ctype.h>
+#include <sysexits.h>
+#include <time.h>
#include "grecs.h"
#include "forlan.h"
@@ -414,6 +416,7 @@ eval_func(forlan_eval_env_t env, union forlan_node *node)
node->func.fp->func(env, vlist);
grecs_list_free(vlist);
+ env->retval.type = node->func.fp->rettype;
if (env->retval.type == forlan_value_node)
env->last = env->retval.v.node;
}
@@ -881,6 +884,13 @@ func_sort(forlan_eval_env_t env, struct grecs_list *list)
}
static void
+func_empty(forlan_eval_env_t env, struct grecs_list *list)
+{
+ struct forlan_value *val = list->head->data;
+ env->retval.v.num = !(val->v.node && val->v.node->down);
+}
+
+static void
func_decode(forlan_eval_env_t env, struct grecs_list *list)
{
struct forlan_value *val = list->head->data;
@@ -924,6 +934,30 @@ func_exit(forlan_eval_env_t env, struct grecs_list *list)
longjmp(env->stop_buf, 1);
}
+static void
+func_timestamp(forlan_eval_env_t env, struct grecs_list *list)
+{
+ struct forlan_value *val = list->head->data;
+ char *input = val->v.string;
+ struct tm tm;
+ char *buf = NULL;
+ size_t size = 0;
+ time_t t;
+
+ /* 2012-06-21T10:36:48.000Z */
+ memset(&tm, 0, sizeof(tm));
+ if (sscanf(val->v.string, "%d-%2d-%2dT%2d:%2d:%2d.",
+ &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
+ &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6)
+ die(EX_DATAERR, "invalid timestamp: %s", val->v.string);
+ tm.tm_year -= 1900;
+ tm.tm_mon--;
+ t = mktime(&tm);
+ grecs_asprintf(&buf, &size, "%lu", (unsigned long)t);
+ env->retval.v.string = buf;
+}
+
+
static struct forlan_function functab[] = {
{ "dump", forlan_value_void, "n", 1, 1, func_dump },
{ "print", forlan_value_void, "", 1, -1, func_print },
@@ -932,6 +966,8 @@ static struct forlan_function functab[] = {
{ "sort", forlan_value_void, "n", 1, 1, func_sort },
{ "decode", forlan_value_literal, "s", 1, 1, func_decode },
{ "exit", forlan_value_void, "s", 1, 1, func_exit },
+ { "empty", forlan_value_boolean, "n", 1, 1, func_empty },
+ { "timestamp", forlan_value_literal, "s", 1, 1, func_timestamp },
{ NULL }
};
diff --git a/src/Makefile.am b/src/Makefile.am
index c7672e5..9f0407e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -22,8 +22,11 @@ eclat_SOURCES=\
cmdline.h\
config.c\
cretags.c\
+ cresnap.c\
+ delsnap.c\
disassaddr.c\
dscraddrs.c\
+ dscrsnap.c\
dscrtags.c\
dscrinstattr.c\
dscrinsts.c\
@@ -52,6 +55,7 @@ OPTFILES=\
dscraddrs-cl.opt\
dscrinststat-cl.opt\
dscrsecgrps-cl.opt\
+ dscrsnap-cl.opt\
generic-cl.opt
eclat_SOURCES += $(OPTFILES:.opt=.h)
diff --git a/src/cresnap.c b/src/cresnap.c
new file mode 100644
index 0000000..04065fd
--- /dev/null
+++ b/src/cresnap.c
@@ -0,0 +1,62 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "eclat.h"
+
+int
+eclat_create_snapshot(CURL *curl, int argc, char **argv)
+{
+ int i, rc;
+ struct ec2_query *q;
+ struct grecs_txtacc *acc = NULL;
+ const char *descr = NULL;
+
+ generic_proginfo->args_doc = "VOL-ID [DESCR]";
+ generic_proginfo->docstring = "create a snapshot of an Amazon EBS volume";
+ generic_parse_options("eclat create-snapshot",
+ "create a snapshot of an Amazon EBS volume",
+ argc, argv, &i);
+ argc -= i;
+ argv += i;
+ if (argc < 1)
+ die(EX_USAGE, "not enough arguments");
+ translate_ids(1, argv, "VolumeId");
+ if (argc == 2)
+ descr = argv[1];
+ else if (argc > 2) {
+ acc = grecs_txtacc_create();
+ for (i = 1; i < argc; i++) {
+ if (i > 1)
+ grecs_txtacc_grow_char(acc, ' ');
+ grecs_txtacc_grow(acc, argv[i], strlen(argv[i]));
+ }
+ grecs_txtacc_grow_char(acc, 0);
+ descr = grecs_txtacc_finish(acc, 0);
+ }
+
+ q = eclat_query_create(use_ssl ? EC2_QF_HTTPS : 0, endpoint, "/");
+ eclat_query_add_param(q, "Action", "CreateSnapshot");
+ eclat_query_add_param(q, "VolumeId", argv[0]);
+ if (descr)
+ eclat_query_add_param(q, "Description", descr);
+ rc = eclat_send_query(curl, q);
+ if (acc)
+ grecs_txtacc_free(acc);
+ return rc;
+}
+
+
+
diff --git a/src/delsnap.c b/src/delsnap.c
new file mode 100644
index 0000000..d596566
--- /dev/null
+++ b/src/delsnap.c
@@ -0,0 +1,40 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "eclat.h"
+
+int
+eclat_delete_snapshot(CURL *curl, int argc, char **argv)
+{
+ int i;
+ struct ec2_query *q;
+
+ generic_proginfo->args_doc = "SNAP-ID";
+ generic_parse_options("eclat delete-snapshot",
+ "delete a EC2 volume snapshot",
+ argc, argv, &i);
+ argc -= i;
+ argv += i;
+ if (argc != 1)
+ die(EX_USAGE, "bad number of arguments");
+ translate_ids(argc, argv, "SnapshotId");
+ q = eclat_query_create(use_ssl ? EC2_QF_HTTPS : 0, endpoint, "/");
+ eclat_query_add_param(q, "Action", "DeleteSnapshot");
+ eclat_query_add_param(q, "SnapshotId", argv[0]);
+ return eclat_send_query(curl, q);
+}
+
+
diff --git a/src/dscrsnap-cl.opt b/src/dscrsnap-cl.opt
new file mode 100644
index 0000000..7372daf
--- /dev/null
+++ b/src/dscrsnap-cl.opt
@@ -0,0 +1,61 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+struct grecs_list *parmlist;
+
+struct param {
+ char *name;
+ unsigned idx;
+ char *value;
+};
+
+static unsigned owner_idx = 1, rstby_idx = 1;
+
+OPTIONS_BEGIN("eclat describe-snapshots",
+ [<describe EC2 snapshots>],
+ [<[SNAP-ID...] [TAG[=VALUE...]]>],
+ [<gnu>],
+ [<nousage>],
+ [<noversion>])
+
+OPTION(owner,u,[<ID>],
+ [<return the snapshots owned by the specified owner>])
+BEGIN
+ struct param *p = grecs_malloc(sizeof(*p));
+ p->name = "Owner";
+ p->idx = owner_idx++;
+ p->value = optarg;
+ grecs_list_append(parmlist, p);
+END
+
+OPTION(restorable-by,r,[<ID>],
+ [<returns snapshots that can be restored by thid ID>])
+BEGIN
+ struct param *p = grecs_malloc(sizeof(*p));
+ p->name = "RestorableBy";
+ p->idx = rstby_idx++;
+ p->value = optarg;
+ grecs_list_append(parmlist, p);
+END
+
+OPTIONS_END
+
+static void
+parse_options(int argc, char *argv[], int *index)
+{
+ parmlist = grecs_list_create();
+ GETOPT(argc, argv, *index, exit(EX_USAGE))
+}
diff --git a/src/dscrsnap.c b/src/dscrsnap.c
new file mode 100644
index 0000000..52c0264
--- /dev/null
+++ b/src/dscrsnap.c
@@ -0,0 +1,52 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "eclat.h"
+#include "dscrsnap-cl.h"
+
+int
+eclat_describe_snapshots(CURL *curl, int argc, char **argv)
+{
+ int i;
+ struct ec2_query *q;
+ struct grecs_list_entry *ep;
+ char *buf = NULL;
+ size_t size = 0;
+
+ parse_options(argc, argv, &i);
+ argc -= i;
+ argv += i;
+ translate_ids(argc, argv, "SnapshotId");
+
+ q = describe_query_create(curl, "DescribeSnapshots", argc, argv,
+ "SnapshotId");
+
+ if (parmlist) {
+ for (ep = parmlist->head; ep; ep = ep->next) {
+ struct param *param = ep->data;
+ grecs_asprintf(&buf, &size, "%s.%u",
+ param->name, param->idx);
+ eclat_query_add_param(q, buf, param->value);
+ }
+ }
+ grecs_list_free(parmlist);
+
+ return eclat_send_query(curl, q);
+}
+
+
+
+
diff --git a/src/eclat.c b/src/eclat.c
index ed9e3ae..e3c3f76 100644
--- a/src/eclat.c
+++ b/src/eclat.c
@@ -228,7 +228,13 @@ struct command cmdtab[] = {
{ "get-console-output", "GetConsoleOutput",
eclat_get_console_output },
{ "describe-security-groups", "DescribeSecurityGroups",
- eclat_describe_security_groups }
+ eclat_describe_security_groups },
+ { "create-snapshot", "CreateSnapshot",
+ eclat_create_snapshot },
+ { "describe-snapshots", "DescribeSnapshots",
+ eclat_describe_snapshots },
+ { "delete-snapshot", "DeleteSnapshot",
+ eclat_delete_snapshot }
};
size_t cmdcnt = sizeof(cmdtab) / sizeof(cmdtab[0]);
diff --git a/src/eclat.h b/src/eclat.h
index bf98828..5ddd39a 100644
--- a/src/eclat.h
+++ b/src/eclat.h
@@ -74,6 +74,9 @@ int eclat_describe_instance_attribute(CURL *curl, int argc, char **argv);
int eclat_create_tags(CURL *curl, int argc, char **argv);
int eclat_delete_tags(CURL *curl, int argc, char **argv);
int eclat_describe_security_groups(CURL *curl, int argc, char **argv);
+int eclat_create_snapshot(CURL *curl, int argc, char **argv);
+int eclat_describe_snapshots(CURL *curl, int argc, char **argv);
+int eclat_delete_snapshot(CURL *curl, int argc, char **argv);
char *region_to_endpoint(const char *region);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0f3f44d..9d0de89 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -41,6 +41,7 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
TESTSUITE_AT = \
associate-address.at\
+ create-snapshot.at\
decode.at\
describe-addresses.at\
describe-instance-attribute.at\
diff --git a/tests/create-snapshot.at b/tests/create-snapshot.at
new file mode 100644
index 0000000..ea913dc
--- /dev/null
+++ b/tests/create-snapshot.at
@@ -0,0 +1,33 @@
+# This file is part of Eclat -*- Autotest -*-
+# Copyright (C) 2012 Sergey Poznyakoff
+#
+# Eclat is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# Eclat is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Eclat. If not, see <http://www.gnu.org/licenses/>.
+
+ECLAT_TEST_FORMAT([CreateSnapshot],
+[CreateSnapshot],
+[create-snapshot.fln],
+[<CreateSnapshotResponse xmlns="http://ec2.amazonaws.com/doc/2012-08-15/">
+ <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
+ <snapshotId>snap-78a54011</snapshotId>
+ <volumeId>vol-4d826724</volumeId>
+ <status>pending</status>
+ <startTime>2008-05-07T12:51:50.000Z</startTime>
+ <progress>60%</progress>
+ <ownerId>111122223333</ownerId>
+ <volumeSize>10</volumeSize>
+ <description>Daily Backup</description>
+</CreateSnapshotResponse>
+],
+[snap-78a54011 vol-4d826724 10 pending 60% 2008-05-07T12:51:50.000Z
+])
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 91a18c6..8a7d8ab 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -56,6 +56,7 @@ m4_include([tagshairy.at])
AT_BANNER([Default formats])
m4_include([associate-address.at])
+m4_include([create-snapshot.at])
m4_include([describe-addresses.at])
m4_include([describe-instance-attribute.at])
m4_include([describe-instance-status.at])

Return to:

Send suggestions and report system problems to the System administrator.