Просмотр исходного кода

Initial implementation for routers

vikramdoda 9 лет назад
Родитель
Сommit
5734c456d1

+ 0 - 10
azure_test/test_azure_network_service.py

@@ -106,16 +106,6 @@ class AzureNetworkServiceTestCase(ProviderTestBase):
             self.assertTrue(
                 'Invalid url parameter passed' in context.exception)
 
-    @helpers.skipIfNoService(['network'])
-    def test_network_methods(self):
-        with self.assertRaises(NotImplementedError):
-            routers = self.provider.network.routers()
-            self.assertIsNotNone(routers)
-
-        with self.assertRaises(NotImplementedError):
-            router = self.provider.network.create_router()
-            self.assertIsNotNone(router)
-
     def test_network_create_and_list_subnet(self):
         network = self.provider.network.get('CloudBridgeNet1')
 

+ 0 - 14
cloudbridge/cloud/providers/azure/provider.py

@@ -53,20 +53,6 @@ class AzureCloudProvider(BaseCloudProvider):
             'azure_public_key_storage_table_name', os.environ.get
             ('AZURE_PUBLIC_KEY_STORAGE_TABLE_NAME', 'cbcerts'))
 
-        print('Storage account name:' + self.storage_account)
-        print('Resource group name:{0}'.format(os.environ.get('AZURE_RESOURCE_GROUP',
-                                                      None)))
-        print('Resource group name:{0}'.format(os.environ.get('AZURE_RESOURCE_GROUP',
-                                                   'cloudbridge')))
-        print('Resource group name:{0}'.format(self.resource_group))
-        print('Region name:{0}'.format( self.region_name))
-        print('VM default user name:{0}'.format(self.vm_default_user_name))
-        print('Public key table name:{0}'.format(self.public_key_storage_table_name))
-        print('Client id:{0}'.format( self.client_Id))
-        print('Subscription id:{0}'.format( self.subscription_id))
-        print('Secret:{0}'.format( self.secret))
-        print('Tenant:{0}'.format( self.tenant))
-
         self._mock_azure_client = azureclient
         self._azure_client = None
 

+ 84 - 2
cloudbridge/cloud/providers/azure/resources.py

@@ -15,12 +15,12 @@ from cloudbridge.cloud.base.resources import BaseAttachmentInfo, \
     BaseBucket, BaseBucketObject, BaseFloatingIP, \
     BaseInstance, BaseInstanceType, BaseKeyPair,\
     BaseLaunchConfig, BaseMachineImage, BaseNetwork, \
-    BasePlacementZone, BaseRegion, BaseSecurityGroup, \
+    BasePlacementZone, BaseRegion, BaseRouter, BaseSecurityGroup, \
     BaseSecurityGroupRule, BaseSnapshot, BaseSubnet, \
     BaseVolume, ClientPagedResultList
 from cloudbridge.cloud.interfaces import InstanceState, VolumeState
 from cloudbridge.cloud.interfaces.resources import Instance, \
-    MachineImageState, NetworkState, SnapshotState
+    MachineImageState, NetworkState, RouterState, SnapshotState
 from cloudbridge.cloud.providers.azure import helpers as azure_helpers
 
 from msrestazure.azure_exceptions import CloudError
@@ -1592,3 +1592,85 @@ class AzureKeyPair(BaseKeyPair):
             return True
         except CloudError:
             return False
+
+
+class AzureRouter(BaseRouter):
+
+    def __init__(self, provider, router):
+        super(AzureRouter, self).__init__(provider)
+        self._router = router
+        self._ROUTE_CIDR = '0.0.0.0/0'
+        self._name = None
+        self._network_id = None
+        self._state = RouterState.DETACHED
+
+    def _route_table(self, subnet_id):
+        pass
+
+    @property
+    def id(self):
+        return self._name
+
+    @property
+    def resource_id(self):
+        pass
+
+    @property
+    def name(self):
+        """
+        Get the router name.
+
+        .. note:: the router must have a (case sensitive) tag ``Name``
+        """
+        return self._name
+
+    @name.setter
+    # pylint:disable=arguments-differ
+    def name(self, value):
+        """
+        Set the router name.
+        """
+        self._name = value
+
+    def refresh(self):
+        pass
+
+    @property
+    def state(self):
+        return self._state
+
+    @property
+    def network_id(self):
+        return self._network_id
+
+    def delete(self):
+        pass
+
+    def attach_network(self, network_id):
+        self._network_id = network_id
+        self._state = RouterState.ATTACHED
+
+    def detach_network(self):
+        pass
+
+    def add_route(self, subnet_id):
+        """
+        Add a default route to this router.
+
+        For Azure, routes are added to a route table. A route table is assoc.
+        with a network vs. a subnet so we retrieve the network via the subnet.
+        Note that the subnet must belong to the same network as the router
+        is attached to.
+
+        Further, only a single route can be added, targeting the Internet
+        (i.e., destination CIDR block ``0.0.0.0/0``).
+        """
+        pass
+
+    def remove_route(self, subnet_id):
+        """
+        Remove the default Internet route from this router.
+
+        .. seealso:: ``add_route`` method
+        """
+        pass

+ 5 - 5
cloudbridge/cloud/providers/azure/services.py

@@ -23,7 +23,7 @@ from msrestazure.azure_exceptions import CloudError
 from .resources import AzureBucket, AzureFloatingIP, \
     AzureInstance, AzureInstanceType, AzureKeyPair,\
     AzureLaunchConfig, AzureMachineImage, \
-    AzureNetwork, AzureRegion, AzureSecurityGroup, \
+    AzureNetwork, AzureRegion, AzureRouter, AzureSecurityGroup, \
     AzureSnapshot, AzureSubnet, AzureVolume
 
 log = logging.getLogger(__name__)
@@ -832,12 +832,12 @@ class AzureNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider, floating_ips)
 
     def routers(self):
-        raise NotImplementedError('AzureNetworkService '
-                                  'not implemented this method')
+        return ClientPagedResultList(self.provider, [])
 
     def create_router(self, name=None):
-        raise NotImplementedError('AzureNetworkService '
-                                  'not implemented this method')
+        ar = AzureRouter(self.provider, None)
+        ar.name = name
+        return ar
 
     def delete(self, network_id):
         """