Begin addition of VPC support
diff --git a/ec2stack/errors.py b/ec2stack/errors.py
index bf5040a..e7841eb 100644
--- a/ec2stack/errors.py
+++ b/ec2stack/errors.py
@@ -162,6 +162,18 @@
         'The specified ID for the resource you are trying to tag is not valid.'
     )
 
+def invalid_vpc_range():
+    """
+    Invalid cidr block.
+
+    @raise Ec2stackError: Defining a bad request and message.
+    """
+    raise Ec2stackError(
+        '400',
+        'InvalidVpcRange',
+        'The specified CIDR block range is not valid.'
+    )
+
 
 def duplicate_security_group():
     """
diff --git a/ec2stack/providers/cloudstack/keypairs.py b/ec2stack/providers/cloudstack/keypairs.py
index d552b60..2a9ff7e 100644
--- a/ec2stack/providers/cloudstack/keypairs.py
+++ b/ec2stack/providers/cloudstack/keypairs.py
@@ -6,10 +6,10 @@
 
 from base64 import b64decode
 
-from ec2stack.providers import cloudstack
-from ec2stack import helpers
-from ec2stack.providers.cloudstack import requester
 from ec2stack import errors
+from ec2stack import helpers
+from ec2stack.providers import cloudstack
+from ec2stack.providers.cloudstack import requester
 
 
 @helpers.authentication_required
diff --git a/ec2stack/providers/cloudstack/volumes.py b/ec2stack/providers/cloudstack/volumes.py
index 4f823f0..ec594bb 100644
--- a/ec2stack/providers/cloudstack/volumes.py
+++ b/ec2stack/providers/cloudstack/volumes.py
@@ -107,7 +107,7 @@
 
     args['zoneid'] = zone_id
     args['command'] = 'createVolume'
-    args['name'] = uuid.uuid4()
+    args['name'] = uuid.uuid()
 
     response = requester.make_request_async(args)
 
diff --git a/ec2stack/providers/cloudstack/vpc.py b/ec2stack/providers/cloudstack/vpc.py
new file mode 100644
index 0000000..440b875
--- /dev/null
+++ b/ec2stack/providers/cloudstack/vpc.py
@@ -0,0 +1,129 @@
+
+#!/usr/bin/env python
+# encoding: utf-8
+
+"""This module contains functions for handling requests in relation to vpcs.
+"""
+
+import uuid
+
+from ec2stack import errors
+from ec2stack import helpers
+from ec2stack.providers import cloudstack
+from ec2stack.providers.cloudstack import requester
+
+
+@helpers.authentication_required
+def create_vpc():
+    """
+    Create a vpc.
+
+    @return: Response.
+    """
+    response = _create_vpc_request()
+    return _create_vpc_response(response)
+
+
+def _create_vpc_request():
+    """
+    Request to create a vpc.
+
+    @return: Response.
+    """
+    args = {'command': 'createVPC'}
+    name = uuid.uuid()
+    args['name'] = name
+    args['id'] = name
+    args['cidr'] = helpers.get('CidrBlock')
+
+    response = requester.make_request(args)
+
+    response = response['createvpcresponse']
+
+    return response
+
+
+def _create_vpc_response(response):
+    """
+    Generates a response for create vpc request.
+
+    @param response: Response from Cloudstack.
+    @return: Response.
+    """
+    if 'errortext' in response:
+        errors.invalid_vpc_range()
+    else:
+        response = response['vpc']
+        return {
+            'template_name_or_list': 'create_vpc.xml',
+            'response_type': 'CreateVpcResponse',
+            'response': response
+        }
+
+@helpers.authentication_required
+def delete_vpc():
+    """
+    Delete a vpc.
+
+    @return: Response.
+    """
+    helpers.require_parameters(['VpcId'])
+    _delete_vpc_request()
+    return _delete_vpc_response()
+
+
+def _delete_vpc_request():
+    """
+    Request to delete a vpc.
+
+    @return: Response.
+    """
+    args = {'command': 'deleteVPC', 'id': helpers.get('VpcId')}
+
+    response = requester.make_request(args)
+
+    return response
+
+
+def _delete_vpc_response():
+    """
+    Generates a response for delete vpc request.
+
+    @return: Response.
+    """
+    return {
+        'template_name_or_list': 'status.xml',
+        'response_type': 'DeleteVpcResponse',
+        'return': 'true'
+    }
+
+@helpers.authentication_required
+def describe_vpcs():
+    """
+    Describes a specific vpc or all vpcs.
+
+    @return: Response.
+    """
+    args = {'command': 'listVPCs'}
+    response = cloudstack.describe_item(
+        args, 'vpc', {}, 'vpcId'
+    )
+
+    return _describe_vpc_response(
+        response
+    )
+
+
+def _describe_vpc_response(response):
+    """
+    Generates a response for describe vpc request.
+
+    @param response: Response from Cloudstack.
+    @return: Response.
+    """
+    return {
+        'template_name_or_list': 'vpcs.xml',
+        'response_type': 'DescribeVpcsResponse',
+        'response': response
+    }
+