add vpc commands

This commit is contained in:
Steve Pulec 2013-03-05 22:33:41 -05:00
parent 0d51349662
commit 584f1f01b6
4 changed files with 102 additions and 6 deletions

View File

@ -10,6 +10,7 @@ from .utils import (
random_security_group_id,
random_snapshot_id,
random_volume_id,
random_vpc_id,
)
@ -390,7 +391,33 @@ class EBSBackend(object):
return False
class EC2Backend(BaseBackend, InstanceBackend, TagBackend, AmiBackend, RegionsAndZonesBackend, SecurityGroupBackend, EBSBackend):
class VPC(object):
def __init__(self, vpc_id, cidr_block):
self.id = vpc_id
self.cidr_block = cidr_block
class VPCBackend(object):
def __init__(self):
self.vpcs = {}
super(VPCBackend, self).__init__()
def create_vpc(self, cidr_block):
vpc_id = random_vpc_id()
vpc = VPC(vpc_id, cidr_block)
self.vpcs[vpc_id] = vpc
return vpc
def get_all_vpcs(self):
return self.vpcs.values()
def delete_vpc(self, vpc_id):
return self.vpcs.pop(vpc_id, None)
class EC2Backend(BaseBackend, InstanceBackend, TagBackend, AmiBackend,
RegionsAndZonesBackend, SecurityGroupBackend, EBSBackend,
VPCBackend):
pass

View File

@ -1,15 +1,66 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VPCs(object):
def __init__(self, querystring):
self.querystring = querystring
def create_vpc(self):
raise NotImplementedError('VPCs(AmazonVPC).create_vpc is not yet implemented')
cidr_block = self.querystring.get('CidrBlock')[0]
vpc = ec2_backend.create_vpc(cidr_block)
template = Template(CREATE_VPC_RESPONSE)
return template.render(vpc=vpc)
def delete_vpc(self):
raise NotImplementedError('VPCs(AmazonVPC).delete_vpc is not yet implemented')
vpc_id = self.querystring.get('VpcId')[0]
vpc = ec2_backend.delete_vpc(vpc_id)
if vpc:
template = Template(DELETE_VPC_RESPONSE)
return template.render(vpc=vpc)
else:
return "", dict(status=404)
def describe_vpcs(self):
raise NotImplementedError('VPCs(AmazonVPC).describe_vpcs is not yet implemented')
vpcs = ec2_backend.get_all_vpcs()
template = Template(DESCRIBE_VPCS_RESPONSE)
return template.render(vpcs=vpcs)
CREATE_VPC_RESPONSE = """
<CreateVpcResponse xmlns="http://ec2.amazonaws.com/doc/2012-12-01/">
<requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>
<vpc>
<vpcId>{{ vpc.id }}</vpcId>
<state>pending</state>
<cidrBlock>{{ vpc.cidr_block }}</cidrBlock>
<dhcpOptionsId>dopt-1a2b3c4d2</dhcpOptionsId>
<instanceTenancy>default</instanceTenancy>
<tagSet/>
</vpc>
</CreateVpcResponse>"""
DESCRIBE_VPCS_RESPONSE = """
<DescribeVpcsResponse xmlns="http://ec2.amazonaws.com/doc/2012-12-01/">
<requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>
<vpcSet>
{% for vpc in vpcs %}
<item>
<vpcId>{{ vpc.id }}</vpcId>
<state>available</state>
<cidrBlock>{{ vpc.cidr_block }}</cidrBlock>
<dhcpOptionsId>dopt-7a8b9c2d</dhcpOptionsId>
<instanceTenancy>default</instanceTenancy>
<tagSet/>
</item>
{% endfor %}
</vpcSet>
</DescribeVpcsResponse>"""
DELETE_VPC_RESPONSE = """
<DeleteVpcResponse xmlns="http://ec2.amazonaws.com/doc/2012-12-01/">
<requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>
<return>true</return>
</DeleteVpcResponse>
"""

View File

@ -29,6 +29,10 @@ def random_volume_id():
return random_id(prefix='vol')
def random_vpc_id():
return random_id(prefix='vpc')
def random_snapshot_id():
return random_id(prefix='snap')

View File

@ -1,4 +1,5 @@
import boto
from boto.exception import EC2ResponseError
import sure # flake8: noqa
from moto import mock_ec2
@ -6,4 +7,17 @@ from moto import mock_ec2
@mock_ec2
def test_vpcs():
pass
conn = boto.connect_vpc('the_key', 'the_secret')
vpc = conn.create_vpc("10.0.0.0/16")
vpc.cidr_block.should.equal('10.0.0.0/16')
all_vpcs = conn.get_all_vpcs()
all_vpcs.should.have.length_of(1)
vpc.delete()
all_vpcs = conn.get_all_vpcs()
all_vpcs.should.have.length_of(0)
conn.delete_vpc.when.called_with(
"vpc-1234abcd").should.throw(EC2ResponseError)