summaryrefslogtreecommitdiffabout
path: root/src/chvol.c
Side-by-side diff
Diffstat (limited to 'src/chvol.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/chvol.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/chvol.c b/src/chvol.c
new file mode 100644
index 0000000..f1246c9
--- a/dev/null
+++ b/src/chvol.c
@@ -0,0 +1,86 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012-2018 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"
+
+// eclat modvol VOLID [iops=V] [size=S] [type=V]
+
+char const *params[] = {
+ "iops",
+ "Iops",
+ "size",
+ "Size",
+ "type",
+ "VolumeType"
+};
+
+static char const *
+getparam(char const *p, size_t len)
+{
+ int i;
+
+ for (i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
+ if (len == strlen(params[i])
+ && memcmp(params[i], p, len) == 0) {
+ if (i % 2 == 0)
+ i++;
+ return params[i];
+ }
+ }
+ return NULL;
+}
+
+int
+eclat_modify_volume(eclat_command_env_t *env, int argc, char **argv)
+{
+ int i;
+ struct ec2_request *q = env->request;
+
+ generic_proginfo->args_doc = "VOL-ID [iops=V] [size=S] [type=V]";
+ generic_parse_options(env->cmd,
+ "modify volume parameters",
+ argc, argv, &i);
+ argv += i;
+ argc -= i;
+
+ if (argc == 0)
+ die(EX_USAGE, "wrong number of arguments");
+
+ translate_ids(1, argv, MAP_VOLUME);
+ eclat_request_add_param(q, "VolumeId", argv[0]);
+ for (i = 1; i < argc; i++) {
+ size_t len;
+ char const *param;
+ char const *value;
+
+ len = strcspn(argv[i], "=");
+ param = getparam(argv[i], len);
+ if (!param)
+ die(EX_USAGE, "unrecognized parameter: %s", argv[i]);
+ if (argv[i][len]) {
+ value = argv[i] + len + 1;
+ } else {
+ i++;
+ if (i == argc)
+ die(EX_USAGE, "missing value for %s",
+ argv[i-1]);
+ value = argv[i];
+ }
+ eclat_request_add_param(q, param, value);
+ }
+ return 0;
+}
+

Return to:

Send suggestions and report system problems to the System administrator.