diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-10-14 03:13:00 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-10-14 03:13:00 +0300 |
commit | 4253839e72aebd5a71684a13d5a40d70cb34e593 (patch) | |
tree | cf94f7c0051eb7bbfeed2e62fe9bef63b685adb7 | |
parent | 44b7be0657daf7b07c480ee9212a25e045624686 (diff) | |
download | eclat-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-- | TODO | 6 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/eclat.1 | 5 | ||||
-rw-r--r-- | etc/Makefile.am | 3 | ||||
-rw-r--r-- | etc/create-snapshot.fln | 21 | ||||
-rw-r--r-- | etc/delete-snapshot.fln | 22 | ||||
-rw-r--r-- | etc/describe-snapshots.fln | 29 | ||||
m--------- | grecs | 0 | ||||
-rw-r--r-- | lib/forlan.c | 36 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/cresnap.c | 62 | ||||
-rw-r--r-- | src/delsnap.c | 40 | ||||
-rw-r--r-- | src/dscrsnap-cl.opt | 61 | ||||
-rw-r--r-- | src/dscrsnap.c | 52 | ||||
-rw-r--r-- | src/eclat.c | 8 | ||||
-rw-r--r-- | src/eclat.h | 3 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/create-snapshot.at | 33 | ||||
-rw-r--r-- | tests/testsuite.at | 1 |
19 files changed, 383 insertions, 6 deletions
@@ -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]) |