blob: 56b2e40f73e52d53bdeeee1ace0405693b2f0b5d [file] [log] [blame]
#!/usr/bin/env python
# encoding: utf-8
"""This module contains functions for handling requests in relation to vpcs.
"""
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, zones
@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'}
id = uuid.uuid1()
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_async(args)
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_async(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', errors.invalid_vpc_id, '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
}