Skip to content

Commit 2260ea0

Browse files
committed
Begin addition of VPC support
1 parent 252e43e commit 2260ea0

File tree

4 files changed

+144
-3
lines changed

4 files changed

+144
-3
lines changed

ec2stack/errors.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,18 @@ def invalid_resource_id():
162162
'The specified ID for the resource you are trying to tag is not valid.'
163163
)
164164

165+
def invalid_vpc_range():
166+
"""
167+
Invalid cidr block.
168+
169+
@raise Ec2stackError: Defining a bad request and message.
170+
"""
171+
raise Ec2stackError(
172+
'400',
173+
'InvalidVpcRange',
174+
'The specified CIDR block range is not valid.'
175+
)
176+
165177

166178
def duplicate_security_group():
167179
"""

ec2stack/providers/cloudstack/keypairs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
from base64 import b64decode
88

9-
from ec2stack.providers import cloudstack
9+
from ec2stack import errors
1010
from ec2stack import helpers
11+
from ec2stack.providers import cloudstack
1112
from ec2stack.providers.cloudstack import requester
12-
from ec2stack import errors
1313

1414

1515
@helpers.authentication_required

ec2stack/providers/cloudstack/volumes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def _create_volume_request():
107107

108108
args['zoneid'] = zone_id
109109
args['command'] = 'createVolume'
110-
args['name'] = uuid.uuid4()
110+
args['name'] = uuid.uuid()
111111

112112
response = requester.make_request_async(args)
113113

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
2+
#!/usr/bin/env python
3+
# encoding: utf-8
4+
5+
"""This module contains functions for handling requests in relation to vpcs.
6+
"""
7+
8+
import uuid
9+
10+
from ec2stack import errors
11+
from ec2stack import helpers
12+
from ec2stack.providers import cloudstack
13+
from ec2stack.providers.cloudstack import requester
14+
15+
16+
@helpers.authentication_required
17+
def create_vpc():
18+
"""
19+
Create a vpc.
20+
21+
@return: Response.
22+
"""
23+
response = _create_vpc_request()
24+
return _create_vpc_response(response)
25+
26+
27+
def _create_vpc_request():
28+
"""
29+
Request to create a vpc.
30+
31+
@return: Response.
32+
"""
33+
args = {'command': 'createVPC'}
34+
name = uuid.uuid()
35+
args['name'] = name
36+
args['id'] = name
37+
args['cidr'] = helpers.get('CidrBlock')
38+
39+
response = requester.make_request(args)
40+
41+
response = response['createvpcresponse']
42+
43+
return response
44+
45+
46+
def _create_vpc_response(response):
47+
"""
48+
Generates a response for create vpc request.
49+
50+
@param response: Response from Cloudstack.
51+
@return: Response.
52+
"""
53+
if 'errortext' in response:
54+
errors.invalid_vpc_range()
55+
else:
56+
response = response['vpc']
57+
return {
58+
'template_name_or_list': 'create_vpc.xml',
59+
'response_type': 'CreateVpcResponse',
60+
'response': response
61+
}
62+
63+
@helpers.authentication_required
64+
def delete_vpc():
65+
"""
66+
Delete a vpc.
67+
68+
@return: Response.
69+
"""
70+
helpers.require_parameters(['VpcId'])
71+
_delete_vpc_request()
72+
return _delete_vpc_response()
73+
74+
75+
def _delete_vpc_request():
76+
"""
77+
Request to delete a vpc.
78+
79+
@return: Response.
80+
"""
81+
args = {'command': 'deleteVPC', 'id': helpers.get('VpcId')}
82+
83+
response = requester.make_request(args)
84+
85+
return response
86+
87+
88+
def _delete_vpc_response():
89+
"""
90+
Generates a response for delete vpc request.
91+
92+
@return: Response.
93+
"""
94+
return {
95+
'template_name_or_list': 'status.xml',
96+
'response_type': 'DeleteVpcResponse',
97+
'return': 'true'
98+
}
99+
100+
@helpers.authentication_required
101+
def describe_vpcs():
102+
"""
103+
Describes a specific vpc or all vpcs.
104+
105+
@return: Response.
106+
"""
107+
args = {'command': 'listVPCs'}
108+
response = cloudstack.describe_item(
109+
args, 'vpc', {}, 'vpcId'
110+
)
111+
112+
return _describe_vpc_response(
113+
response
114+
)
115+
116+
117+
def _describe_vpc_response(response):
118+
"""
119+
Generates a response for describe vpc request.
120+
121+
@param response: Response from Cloudstack.
122+
@return: Response.
123+
"""
124+
return {
125+
'template_name_or_list': 'vpcs.xml',
126+
'response_type': 'DescribeVpcsResponse',
127+
'response': response
128+
}
129+

0 commit comments

Comments
 (0)