adding ec2 stubs

This commit is contained in:
Steve Pulec 2013-02-21 23:13:01 -05:00
parent 0df2864f99
commit 27a086409e
59 changed files with 861 additions and 9 deletions

View File

@ -109,3 +109,36 @@ class EC2Backend(BaseBackend, InstanceBackend, TagBackend):
ec2_backend = EC2Backend()
{
#'Instances': ['DescribeInstanceAttribute', 'DescribeInstances', '\n\t\t\tDescribeInstanceStatus\n\t\t', 'ImportInstance', 'ModifyInstanceAttribute', 'RebootInstances', 'ReportInstanceStatus', 'ResetInstanceAttribute', 'RunInstances', 'StartInstances', 'StopInstances', 'TerminateInstances'],
#'Tags': ['CreateTags', 'DeleteTags', 'DescribeTags'],
'IP Addresses': ['AssignPrivateIpAddresses', 'UnassignPrivateIpAddresses'],
'Monitoring': ['MonitorInstances', 'UnmonitorInstances'],
'Reserved Instances': ['CancelReservedInstancesListing', 'CreateReservedInstancesListing', 'DescribeReservedInstances', 'DescribeReservedInstancesListings', 'DescribeReservedInstancesOfferings', 'PurchaseReservedInstancesOffering'],
'VPN Connections (Amazon VPC)': ['CreateVpnConnection', 'DeleteVpnConnection', 'DescribeVpnConnections'],
'DHCP Options (Amazon VPC)': ['AssociateDhcpOptions', 'CreateDhcpOptions', 'DeleteDhcpOptions', 'DescribeDhcpOptions'],
'Network ACLs (Amazon VPC)': ['CreateNetworkAcl', 'CreateNetworkAclEntry', 'DeleteNetworkAcl', 'DeleteNetworkAclEntry', 'DescribeNetworkAcls', 'ReplaceNetworkAclAssociation', 'ReplaceNetworkAclEntry'],
'Elastic Block Store': ['AttachVolume', 'CopySnapshot', 'CreateSnapshot', 'CreateVolume', 'DeleteSnapshot', 'DeleteVolume', 'DescribeSnapshotAttribute', 'DescribeSnapshots', 'DescribeVolumes', 'DescribeVolumeAttribute', 'DescribeVolumeStatus', 'DetachVolume', 'EnableVolumeIO', 'ImportVolume', 'ModifySnapshotAttribute', 'ModifyVolumeAttribute', 'ResetSnapshotAttribute'],
'Customer Gateways (Amazon VPC)': ['CreateCustomerGateway', 'DeleteCustomerGateway', 'DescribeCustomerGateways'],
'Subnets (Amazon VPC)': ['CreateSubnet', 'DeleteSubnet', 'DescribeSubnets'],
'AMIs': ['CreateImage', 'DeregisterImage', 'DescribeImageAttribute', 'DescribeImages', 'ModifyImageAttribute', 'RegisterImage', 'ResetImageAttribute'],
'Virtual Private Gateways (Amazon VPC)': ['AttachVpnGateway', 'CreateVpnGateway', 'DeleteVpnGateway', 'DescribeVpnGateways', 'DetachVpnGateway'],
'Availability Zones and Regions': ['DescribeAvailabilityZones', 'DescribeRegions'],
'VPCs (Amazon VPC)': ['CreateVpc', 'DeleteVpc', 'DescribeVpcs'],
'Windows': ['BundleInstance', 'CancelBundleTask', 'DescribeBundleTasks', 'GetPasswordData'],
'VM Import': ['CancelConversionTask', 'DescribeConversionTasks', 'ImportInstance', 'ImportVolume'],
'Placement Groups': ['CreatePlacementGroup', 'DeletePlacementGroup', 'DescribePlacementGroups'],
'Key Pairs': ['CreateKeyPair', 'DeleteKeyPair', 'DescribeKeyPairs', 'ImportKeyPair'],
'Amazon DevPay': ['ConfirmProductInstance'],
'Internet Gateways (Amazon VPC)': ['AttachInternetGateway', 'CreateInternetGateway', 'DeleteInternetGateway', 'DescribeInternetGateways', 'DetachInternetGateway'],
'Route Tables (Amazon VPC)': ['AssociateRouteTable', 'CreateRoute', 'CreateRouteTable', 'DeleteRoute', 'DeleteRouteTable', 'DescribeRouteTables', 'DisassociateRouteTable', 'ReplaceRoute', 'ReplaceRouteTableAssociation'],
'Elastic Network Interfaces (Amazon VPC)': ['AttachNetworkInterface', 'CreateNetworkInterface', 'DeleteNetworkInterface', 'DescribeNetworkInterfaceAttribute', 'DescribeNetworkInterfaces', 'DetachNetworkInterface', 'ModifyNetworkInterfaceAttribute', 'ResetNetworkInterfaceAttribute'],
'Elastic IP Addresses': ['AllocateAddress', 'AssociateAddress', 'DescribeAddresses', 'DisassociateAddress', 'ReleaseAddress'],
'Security Groups': ['AuthorizeSecurityGroupEgress', 'AuthorizeSecurityGroupIngress', 'CreateSecurityGroup', 'DeleteSecurityGroup', 'DescribeSecurityGroups', 'RevokeSecurityGroupEgress', 'RevokeSecurityGroupIngress'],
'General': ['GetConsoleOutput'],
'VM Export': ['CancelExportTask', 'CreateInstanceExportTask', 'DescribeExportTasks'],
'Spot Instances': ['CancelSpotInstanceRequests', 'CreateSpotDatafeedSubscription', 'DeleteSpotDatafeedSubscription', 'DescribeSpotDatafeedSubscription', 'DescribeSpotInstanceRequests', 'DescribeSpotPriceHistory', 'RequestSpotInstances']
}

View File

@ -2,6 +2,33 @@ from urlparse import parse_qs
from moto.ec2.utils import camelcase_to_underscores, method_namess_from_class
from .amazon_dev_pay import AmazonDevPay
from .amis import AMIs
from .availability_zonesand_regions import AvailabilityZonesandRegions
from .customer_gateways import CustomerGateways
from .dhcp_options import DHCPOptions
from .elastic_block_store import ElasticBlockStore
from .elastic_ip_addresses import ElasticIPAddresses
from .elastic_network_interfaces import ElasticNetworkInterfaces
from .general import General
from .internet_gateways import InternetGateways
from .ip_addresses import IPAddresses
from .key_pairs import KeyPairs
from .monitoring import Monitoring
from .network_acls import NetworkACLs
from .placement_groups import PlacementGroups
from .reserved_instances import ReservedInstances
from .route_tables import RouteTables
from .security_groups import SecurityGroups
from .spot_instances import SpotInstances
from .subnets import Subnets
from .virtual_private_gateways import VirtualPrivateGateways
from .vm_export import VMExport
from .vm_import import VMImport
from .vpcs import VPCs
from .vpn_connections import VPNConnections
from .windows import Windows
from .instances import InstanceResponse
from .tags import TagResponse

View File

@ -0,0 +1,10 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class AmazonDevPay(object):
def confirm_product_instance(self):
return NotImplemented

View File

@ -0,0 +1,28 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class AMIs(object):
def create_image(self):
return NotImplemented
def deregister_image(self):
return NotImplemented
def describe_image_attribute(self):
return NotImplemented
def describe_images(self):
return NotImplemented
def modify_image_attribute(self):
return NotImplemented
def register_image(self):
return NotImplemented
def reset_image_attribute(self):
return NotImplemented

View File

@ -0,0 +1,13 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class AvailabilityZonesandRegions(object):
def describe_availability_zones(self):
return NotImplemented
def describe_regions(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class CustomerGateways(object):
def create_customer_gateway(self):
return NotImplemented
def delete_customer_gateway(self):
return NotImplemented
def describe_customer_gateways(self):
return NotImplemented

View File

@ -0,0 +1,19 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class DHCPOptions(object):
def associate_dhcp_options(self):
return NotImplemented
def create_dhcp_options(self):
return NotImplemented
def delete_dhcp_options(self):
return NotImplemented
def describe_dhcp_options(self):
return NotImplemented

View File

@ -0,0 +1,58 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class ElasticBlockStore(object):
def attach_volume(self):
return NotImplemented
def copy_snapshot(self):
return NotImplemented
def create_snapshot(self):
return NotImplemented
def create_volume(self):
return NotImplemented
def delete_snapshot(self):
return NotImplemented
def delete_volume(self):
return NotImplemented
def describe_snapshot_attribute(self):
return NotImplemented
def describe_snapshots(self):
return NotImplemented
def describe_volumes(self):
return NotImplemented
def describe_volume_attribute(self):
return NotImplemented
def describe_volume_status(self):
return NotImplemented
def detach_volume(self):
return NotImplemented
def enable_volume_io(self):
return NotImplemented
def import_volume(self):
return NotImplemented
def modify_snapshot_attribute(self):
return NotImplemented
def modify_volume_attribute(self):
return NotImplemented
def reset_snapshot_attribute(self):
return NotImplemented

View File

@ -0,0 +1,22 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class ElasticIPAddresses(object):
def allocate_address(self):
return NotImplemented
def associate_address(self):
return NotImplemented
def describe_addresses(self):
return NotImplemented
def disassociate_address(self):
return NotImplemented
def release_address(self):
return NotImplemented

View File

@ -0,0 +1,31 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class ElasticNetworkInterfaces(object):
def attach_network_interface(self):
return NotImplemented
def create_network_interface(self):
return NotImplemented
def delete_network_interface(self):
return NotImplemented
def describe_network_interface_attribute(self):
return NotImplemented
def describe_network_interfaces(self):
return NotImplemented
def detach_network_interface(self):
return NotImplemented
def modify_network_interface_attribute(self):
return NotImplemented
def reset_network_interface_attribute(self):
return NotImplemented

View File

@ -0,0 +1,10 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class General(object):
def get_console_output(self):
return NotImplemented

View File

@ -1,7 +1,7 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import instance_ids_from_querystring, camelcase_to_underscores, method_namess_from_class
from moto.ec2.utils import instance_ids_from_querystring, camelcase_to_underscores
class InstanceResponse(object):

View File

@ -0,0 +1,22 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class InternetGateways(object):
def attach_internet_gateway(self):
return NotImplemented
def create_internet_gateway(self):
return NotImplemented
def delete_internet_gateway(self):
return NotImplemented
def describe_internet_gateways(self):
return NotImplemented
def detach_internet_gateway(self):
return NotImplemented

View File

@ -0,0 +1,13 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class IPAddresses(object):
def assign_private_ip_addresses(self):
return NotImplemented
def unassign_private_ip_addresses(self):
return NotImplemented

View File

@ -0,0 +1,19 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class KeyPairs(object):
def create_key_pair(self):
return NotImplemented
def delete_key_pair(self):
return NotImplemented
def describe_key_pairs(self):
return NotImplemented
def import_key_pair(self):
return NotImplemented

View File

@ -0,0 +1,13 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class Monitoring(object):
def monitor_instances(self):
return NotImplemented
def unmonitor_instances(self):
return NotImplemented

View File

@ -0,0 +1,28 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class NetworkACLs(object):
def create_network_acl(self):
return NotImplemented
def create_network_acl_entry(self):
return NotImplemented
def delete_network_acl(self):
return NotImplemented
def delete_network_acl_entry(self):
return NotImplemented
def describe_network_acls(self):
return NotImplemented
def replace_network_acl_association(self):
return NotImplemented
def replace_network_acl_entry(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class PlacementGroups(object):
def create_placement_group(self):
return NotImplemented
def delete_placement_group(self):
return NotImplemented
def describe_placement_groups(self):
return NotImplemented

View File

@ -0,0 +1,25 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class ReservedInstances(object):
def cancel_reserved_instances_listing(self):
return NotImplemented
def create_reserved_instances_listing(self):
return NotImplemented
def describe_reserved_instances(self):
return NotImplemented
def describe_reserved_instances_listings(self):
return NotImplemented
def describe_reserved_instances_offerings(self):
return NotImplemented
def purchase_reserved_instances_offering(self):
return NotImplemented

View File

@ -0,0 +1,34 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class RouteTables(object):
def associate_route_table(self):
return NotImplemented
def create_route(self):
return NotImplemented
def create_route_table(self):
return NotImplemented
def delete_route(self):
return NotImplemented
def delete_route_table(self):
return NotImplemented
def describe_route_tables(self):
return NotImplemented
def disassociate_route_table(self):
return NotImplemented
def replace_route(self):
return NotImplemented
def replace_route_table_association(self):
return NotImplemented

View File

@ -0,0 +1,28 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class SecurityGroups(object):
def authorize_security_group_egress(self):
return NotImplemented
def authorize_security_group_ingress(self):
return NotImplemented
def create_security_group(self):
return NotImplemented
def delete_security_group(self):
return NotImplemented
def describe_security_groups(self):
return NotImplemented
def revoke_security_group_egress(self):
return NotImplemented
def revoke_security_group_ingress(self):
return NotImplemented

View File

@ -0,0 +1,28 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class SpotInstances(object):
def cancel_spot_instance_requests(self):
return NotImplemented
def create_spot_datafeed_subscription(self):
return NotImplemented
def delete_spot_datafeed_subscription(self):
return NotImplemented
def describe_spot_datafeed_subscription(self):
return NotImplemented
def describe_spot_instance_requests(self):
return NotImplemented
def describe_spot_price_history(self):
return NotImplemented
def request_spot_instances(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class Subnets(object):
def create_subnet(self):
return NotImplemented
def delete_subnet(self):
return NotImplemented
def describe_subnets(self):
return NotImplemented

View File

@ -1,7 +1,7 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring, camelcase_to_underscores, method_namess_from_class
from moto.ec2.utils import resource_ids_from_querystring
class TagResponse(object):

View File

@ -0,0 +1,22 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VirtualPrivateGateways(object):
def attach_vpn_gateway(self):
return NotImplemented
def create_vpn_gateway(self):
return NotImplemented
def delete_vpn_gateway(self):
return NotImplemented
def describe_vpn_gateways(self):
return NotImplemented
def detach_vpn_gateway(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VMExport(object):
def cancel_export_task(self):
return NotImplemented
def create_instance_export_task(self):
return NotImplemented
def describe_export_tasks(self):
return NotImplemented

View File

@ -0,0 +1,19 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VMImport(object):
def cancel_conversion_task(self):
return NotImplemented
def describe_conversion_tasks(self):
return NotImplemented
def import_instance(self):
return NotImplemented
def import_volume(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VPCs(object):
def create_vpc(self):
return NotImplemented
def delete_vpc(self):
return NotImplemented
def describe_vpcs(self):
return NotImplemented

View File

@ -0,0 +1,16 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class VPNConnections(object):
def create_vpn_connection(self):
return NotImplemented
def delete_vpn_connection(self):
return NotImplemented
def describe_vpn_connections(self):
return NotImplemented

View File

@ -0,0 +1,19 @@
from jinja2 import Template
from moto.ec2.models import ec2_backend
from moto.ec2.utils import resource_ids_from_querystring
class Windows(object):
def bundle_instance(self):
return NotImplemented
def cancel_bundle_task(self):
return NotImplemented
def describe_bundle_tasks(self):
return NotImplemented
def get_password_data(self):
return NotImplemented

View File

@ -43,11 +43,15 @@ def camelcase_to_underscores(argument):
''' Converts a camelcase param like theNewAttribute to the equivalent
python underscore variable like the_new_attribute'''
result = ''
for index, char in enumerate(argument):
if char.istitle() and index:
# Only add underscore is char is capital and not first letter
prev_char_title = True
for char in argument:
if char.istitle() and not prev_char_title:
# Only add underscore if char is capital, not first letter, and prev
# char wasn't capital
result += "_"
result += char.lower()
prev_char_title = char.istitle()
if not char.isspace(): # Only add non-whitespace
result += char.lower()
return result

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_amazon_dev_pay():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_amis():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_availability_zonesand_regions():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_customer_gateways():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_dhcp_options():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_elastic_block_store():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_elastic_ip_addresses():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_elastic_network_interfaces():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_general():
pass

View File

@ -5,7 +5,6 @@ from sure import expect
from moto import mock_ec2
@mock_ec2
def test_instance_launch_and_terminate():
conn = boto.connect_ec2('the_key', 'the_secret')

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_internet_gateways():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_ip_addresses():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_key_pairs():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_monitoring():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_network_acls():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_placement_groups():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_reserved_instances():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_route_tables():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_security_groups():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_spot_instances():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_subnets():
pass

View File

@ -1,11 +1,9 @@
import boto
from boto.ec2.instance import Reservation, InstanceAttribute
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_instance_launch_and_terminate():
conn = boto.connect_ec2('the_key', 'the_secret')

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_virtual_private_gateways():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_vm_export():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_vm_import():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_vpcs():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_vpn_connections():
pass

View File

@ -0,0 +1,9 @@
import boto
from sure import expect
from moto import mock_ec2
@mock_ec2
def test_windows():
pass