Complete create/list/delete vpc actions.
diff --git a/ec2stack/controllers/default.py b/ec2stack/controllers/default.py
index 14503d8..d0b05bd 100644
--- a/ec2stack/controllers/default.py
+++ b/ec2stack/controllers/default.py
@@ -52,6 +52,7 @@
'DeleteSecurityGroup': security_groups.delete_security_group,
'DeleteTags': tags.delete_tags,
'DeleteVolume': volumes.delete_volume,
+ 'DeleteVpc': vpcs.delete_vpc,
'DescribeAvailabilityZones': zones.describe_zones,
'DescribeImageAttribute': images.describe_image_attribute,
'DescribeImages': images.describe_images,
@@ -61,6 +62,7 @@
'DescribeSecurityGroups': security_groups.describe_security_groups,
'DescribeTags': tags.describe_tags,
'DescribeVolumes': volumes.describe_volumes,
+ 'DescribeVpcs': vpcs.describe_vpcs,
'DetachVolume': volumes.detach_volume,
'GetPasswordData': passwords.get_password_data,
'ImportKeyPair': keypairs.import_keypair,
diff --git a/ec2stack/errors.py b/ec2stack/errors.py
index e7841eb..ba170bf 100644
--- a/ec2stack/errors.py
+++ b/ec2stack/errors.py
@@ -174,6 +174,18 @@
'The specified CIDR block range is not valid.'
)
+def invalid_vpc_id():
+ """
+ VPC with this ID does not exist.
+
+ @raise Ec2stackError: Defining a bad request and message.
+ """
+ raise Ec2stackError(
+ '400',
+ 'InvalidVpcID.NotFound',
+ 'The specified VPC does not exist.'
+ )
+
def duplicate_security_group():
"""
diff --git a/ec2stack/providers/cloudstack/vpcs.py b/ec2stack/providers/cloudstack/vpcs.py
index 5f877e2..56b2e40 100644
--- a/ec2stack/providers/cloudstack/vpcs.py
+++ b/ec2stack/providers/cloudstack/vpcs.py
@@ -7,10 +7,12 @@
import uuid
+from flask import current_app
+
from ec2stack import errors
from ec2stack import helpers
from ec2stack.providers import cloudstack
-from ec2stack.providers.cloudstack import requester
+from ec2stack.providers.cloudstack import requester, zones
@helpers.authentication_required
@@ -35,11 +37,12 @@
args['name'] = id
args['id'] = id
args['displaytext'] = id
+ args['zoneid'] = zones.get_zone(
+ current_app.config['CLOUDSTACK_DEFAULT_ZONE'])['id']
+ args['vpcofferingid'] = current_app.config['VPC_OFFERING_ID']
args['cidr'] = helpers.get('CidrBlock')
- response = requester.make_request(args)
-
- response = response['createvpcresponse']
+ response = requester.make_request_async(args)
return response
@@ -61,6 +64,7 @@
'response': response
}
+
@helpers.authentication_required
def delete_vpc():
"""
@@ -81,7 +85,7 @@
"""
args = {'command': 'deleteVPC', 'id': helpers.get('VpcId')}
- response = requester.make_request(args)
+ response = requester.make_request_async(args)
return response
@@ -107,7 +111,7 @@
"""
args = {'command': 'listVPCs'}
response = cloudstack.describe_item(
- args, 'vpc', {}, 'vpcId'
+ args, 'vpc', errors.invalid_vpc_id, 'VpcId'
)
return _describe_vpc_response(
diff --git a/ec2stack/templates/create_vpc.xml b/ec2stack/templates/create_vpc.xml
index a708e72..5c7c804 100644
--- a/ec2stack/templates/create_vpc.xml
+++ b/ec2stack/templates/create_vpc.xml
@@ -1,9 +1,9 @@
{% extends "response.xml" %}
{% block response_content %}
<vpc>
- <vpcId>{{ vpc.id }}</vpcId>
- <state>{{ vpc.state }}</state>
- <cidrBlock>{{ vpc.cidr }}</cidrBlock>
+ <vpcId>{{ response.id }}</vpcId>
+ <state>{{ response.state }}</state>
+ <cidrBlock>{{ response.cidr }}</cidrBlock>
<tagSet/>
</vpc>
{% endblock %}
\ No newline at end of file