diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2015-11-19 00:17:50 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2015-11-19 00:17:50 +0200 |
commit | 1473a4487450b8c82f1774845dc8dbe94d5b61e1 (patch) | |
tree | f1e3d7624381ce6a50d577563cdd56f7b19c287c /src | |
parent | ed8a63afa3482a2036fd134e056a446a408b6357 (diff) | |
download | eclat-1473a4487450b8c82f1774845dc8dbe94d5b61e1.tar.gz eclat-1473a4487450b8c82f1774845dc8dbe94d5b61e1.tar.bz2 |
Implement subnet commands
New commands: mksubnet, rmsubnet, lssubnet, setsubnetattr.
* TODO: Update.
* lib/libeclat.h (EC2_API_VERSION): Update.
* src/Makefile.am: Add subnet.c.
* src/subnet.c: New file.
* src/eclat.c (cmdtab): Register new commands.
* src/eclat.h: Add new prototypes.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/eclat.c | 10 | ||||
-rw-r--r-- | src/eclat.h | 8 | ||||
-rw-r--r-- | src/subnet.c | 137 | ||||
-rw-r--r-- | src/vpcattr.c | 2 |
5 files changed, 157 insertions, 2 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index d46ad42..eb20de1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -68,6 +68,7 @@ eclat_SOURCES=\ sg.h\ setaattr.c\ startstop.c\ + subnet.c\ util.c\ vpcattr.c @@ -101,6 +102,7 @@ OPTFILES=\ mkimg-cl.opt\ mkinst-cl.opt\ mksg-cl.opt\ + mksubnet-cl.opt\ mktags-cl.opt\ mkvol-cl.opt\ mkvpc-cl.opt\ diff --git a/src/eclat.c b/src/eclat.c index faba64a..ae3b326 100644 --- a/src/eclat.c +++ b/src/eclat.c @@ -183,7 +183,15 @@ struct eclat_command cmdtab[] = { { "atigw", "attach-internet-gateway", "AttachInternetGateway", eclat_attach_internet_gateway, CMD_MOD }, { "deigw", "detach-internet-gateway", "DetachInternetGateway", - eclat_detach_internet_gateway, CMD_MOD|CMD_DESTR }, + eclat_detach_internet_gateway, CMD_MOD|CMD_DESTR }, + { "mksubnet", "create-subnet", "CreateSubnet", + eclat_create_subnet, CMD_MOD }, + { "lssubnet", "describe-subnets", "DescribeSubnets", + eclat_describe_subnets }, + { "setsubnetattr", "modify-subnet-attribute", "ModifySubnetAttribute", + eclat_modify_subnet_attribute, CMD_MOD }, + { "rmsubnet", "delete-subnet", "DeleteSubnet", + eclat_delete_subnet, CMD_MOD|CMD_DESTR }, }; size_t cmdcnt = sizeof(cmdtab) / sizeof(cmdtab[0]); diff --git a/src/eclat.h b/src/eclat.h index 6897c15..c81558d 100644 --- a/src/eclat.h +++ b/src/eclat.h @@ -179,6 +179,14 @@ int eclat_attach_internet_gateway(eclat_command_env_t *env, int eclat_detach_internet_gateway(eclat_command_env_t *env, int argc, char **argv); +int eclat_create_subnet(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_subnets(eclat_command_env_t *env, + int argc, char **argv); +int eclat_modify_subnet_attribute(eclat_command_env_t *env, + int argc, char **argv); +int eclat_delete_subnet(eclat_command_env_t *env, int argc, char **argv); + + int eclat_create_security_group(eclat_command_env_t *env, int argc, char **argv); int eclat_delete_security_group(eclat_command_env_t *env, diff --git a/src/subnet.c b/src/subnet.c new file mode 100644 index 0000000..2e56c79 --- /dev/null +++ b/src/subnet.c @@ -0,0 +1,137 @@ +/* This file is part of Eclat. + Copyright (C) 2012-2015 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 "mksubnet-cl.h" + +int +eclat_create_subnet(eclat_command_env_t *env, int argc, char **argv) +{ + int i; + struct ec2_request *q = env->request; + + mksubnet_parse_options(env, argc, argv, &i); + argc -= i; + argv += i; + if (argc != 2) + die(EX_USAGE, "wrong number of arguments"); + + eclat_request_add_param(q, "CidrBlock", argv[0]); + eclat_request_add_param(q, "VpcId", argv[1]); + if (zone) + eclat_request_add_param(q, "AvailabilityZone", zone); + return 0; +} + +static char *subnet_states[] = { + "pending", + "available", + NULL +}; +static struct filter_descr filters[] = { + { "availabilityZone", FILTER_STRING }, + { "availability-zone", FILTER_STRING }, + { "available-ip-address-count", FILTER_INT }, + { "cidrBlock", FILTER_STRING }, + { "defaultForAz", FILTER_BOOL }, + { "default-for-az", FILTER_STRING }, + { "state", FILTER_ENUM, subnet_states }, + { "subnet-id", FILTER_STRING }, + { "vpc-id", FILTER_STRING }, + { "tag-key", FILTER_STRING }, + { "tag-value", FILTER_STRING }, + { "tag:<KEY>", FILTER_STRING }, + { NULL } +}; + +int +eclat_describe_subnets(eclat_command_env_t *env, + int argc, char **argv) +{ + int i; + + available_filters = filters; + generic_proginfo->print_help_hook = list_filters; + generic_proginfo->args_doc = "[FILTER...] [ID...]"; + generic_parse_options(env->cmd, + "describe subnets", + argc, argv, &i); + argv += i; + argc -= i; + //FIXME: translate_ids(argc, argv, MAP_SUBNET); + + describe_request_create(env, argc, argv, "SubnetId"); + return 0; +} + +int +eclat_modify_subnet_attribute(eclat_command_env_t *env, int argc, char **argv) +{ + int i; + struct ec2_request *q = env->request; + const char *attrname; + char *bufptr = NULL; + size_t bufsize = 0; + static char *attrs[] = { + "MapPublicIpOnLaunch" + }; + + generic_proginfo->args_doc = "SUBNET-ID ATTR VALUE"; + available_attrs = attrs; + generic_proginfo->print_help_hook = list_attrs; + generic_parse_options(env->cmd, + "modify VPC attribute", + argc, argv, &i); + argv += i; + argc -= i; + + if (argc != 3) + die(EX_USAGE, "wrong number of arguments"); + + attrname = canonattrname(attrs, argv[1], NULL, NULL); + if (!attrname) + die(EX_USAGE, "unrecognized attribute name"); + + //FIXME: translate_ids(1, argv, MAP_SUBNET); + eclat_request_add_param(q, "SubnetId", argv[0]); + grecs_asprintf(&bufptr, &bufsize, "%s.Value", attrname); + eclat_request_add_param(q, bufptr, argv[2]); + free(bufptr); + return 0; +} + +int +eclat_delete_subnet(eclat_command_env_t *env, int argc, char **argv) +{ + int i; + struct ec2_request *q = env->request; + + generic_proginfo->args_doc = "SUBNET-ID"; + generic_parse_options(env->cmd, + "delete internet gateway", + argc, argv, &i); + argv += i; + argc -= i; + + if (argc != 1) + die(EX_USAGE, "wrong number of arguments"); + + //FIXME: translate_ids(1, argv, MAP_SUBNET); + eclat_request_add_param(q, "SubnetId", argv[0]); + + return 0; +} diff --git a/src/vpcattr.c b/src/vpcattr.c index 1896ee1..3814d57 100644 --- a/src/vpcattr.c +++ b/src/vpcattr.c @@ -71,7 +71,7 @@ eclat_modify_vpc_attribute(eclat_command_env_t *env, int argc, char **argv) }; - generic_proginfo->args_doc = "VPC-ID ATTR VALUE"; + generic_proginfo->args_doc = "VPC-ID ATTR VALUE"; available_attrs = attrs; generic_proginfo->print_help_hook = list_attrs; generic_parse_options(env->cmd, |