aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2015-11-19 00:17:50 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2015-11-19 00:17:50 +0200
commit1473a4487450b8c82f1774845dc8dbe94d5b61e1 (patch)
treef1e3d7624381ce6a50d577563cdd56f7b19c287c
parented8a63afa3482a2036fd134e056a446a408b6357 (diff)
downloadeclat-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.
-rw-r--r--TODO7
-rw-r--r--lib/libeclat.h2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/eclat.c10
-rw-r--r--src/eclat.h8
-rw-r--r--src/subnet.c137
-rw-r--r--src/vpcattr.c2
7 files changed, 162 insertions, 6 deletions
diff --git a/TODO b/TODO
index 400c91d..45e1ebe 100644
--- a/TODO
+++ b/TODO
@@ -44,7 +44,7 @@ CreateRouteTable - [ ] [ ]
CreateSecurityGroup mksg [X] [X]
CreateSnapshot mksnap [X] [X]
CreateSpotDatafeedSubscription - [ ] [ ]
-CreateSubnet - [ ] [ ]
+CreateSubnet mksubnet [X] [ ]
CreateTags mktag [X] [X]
CreateVolume mkvol [X] [X]
CreateVpc mkvpc [X] [X]
@@ -64,7 +64,7 @@ DeleteRouteTable - [ ] [ ]
DeleteSecurityGroup rmsg [X] [X]
DeleteSnapshot rmsnap [X] [X]
DeleteSpotDatafeedSubscription - [ ] [ ]
-DeleteSubnet - [ ] [ ]
+DeleteSubnet rmsubnet [X] [ ]
DeleteTags rmtag [X] [X]
DeleteVolume rmvol [X] [X]
DeleteVpc rmvpc [X] [ ]
@@ -101,7 +101,7 @@ DescribeSnapshots lssnap [X] [X]
DescribeSpotDatafeedSubscription - [ ] [ ]
DescribeSpotInstanceRequests - [ ] [ ]
DescribeSpotPriceHistory - [ ] [ ]
-DescribeSubnets - [ ] [ ]
+DescribeSubnets lssubnet [X] [ ]
DescribeTags lstag [X] [X]
DescribeVolumes lsvol [X] [X]
DescribeVolumeAttribute - [ ] [ ]
@@ -128,6 +128,7 @@ ModifyImageAttribute setaattr [X] [X]
ModifyInstanceAttribute setiattr [X] [X]
ModifyNetworkInterfaceAttribute - [ ] [ ]
ModifySnapshotAttribute setsattr [X] [X]
+ModifySubnetAttribute setsubnetattr [X] [ ]
ModifyVolumeAttribute - [ ] [ ]
ModifyVpcAttribute setvpcattr [X] [ ]
MonitorInstances - [ ] [ ]
diff --git a/lib/libeclat.h b/lib/libeclat.h
index 770fb7d..b865e00 100644
--- a/lib/libeclat.h
+++ b/lib/libeclat.h
@@ -83,7 +83,7 @@ struct ec2_param {
int encoded;
};
-#define EC2_API_VERSION "2013-02-01"
+#define EC2_API_VERSION "2014-06-15"
#define EC2_RF_HTTPS 0x01
#define EC2_RF_POST 0x02
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,

Return to:

Send suggestions and report system problems to the System administrator.