Sfoglia il codice sorgente

Decorating new services

almahmoud 7 anni fa
parent
commit
f6acb9053f

+ 6 - 0
cloudbridge/cloud/base/services.py

@@ -117,6 +117,8 @@ class BaseVMFirewallRuleService(BasePageableObjectMixin,
     def _provider(self):
     def _provider(self):
         return self.__provider
         return self.__provider
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.get",
+              priority=BaseCloudService.STANDARD_EVENT_PRIORITY)
     def get(self, firewall, rule_id):
     def get(self, firewall, rule_id):
         matches = [rule for rule in firewall.rules if rule.id == rule_id]
         matches = [rule for rule in firewall.rules if rule.id == rule_id]
         if matches:
         if matches:
@@ -124,6 +126,8 @@ class BaseVMFirewallRuleService(BasePageableObjectMixin,
         else:
         else:
             return None
             return None
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.find",
+              priority=BaseCloudService.STANDARD_EVENT_PRIORITY)
     def find(self, firewall, **kwargs):
     def find(self, firewall, **kwargs):
         obj_list = firewall.rules
         obj_list = firewall.rules
         filters = ['name', 'direction', 'protocol', 'from_port', 'to_port',
         filters = ['name', 'direction', 'protocol', 'from_port', 'to_port',
@@ -380,6 +384,8 @@ class BaseFloatingIPService(FloatingIPService):
     def _provider(self):
     def _provider(self):
         return self.__provider
         return self.__provider
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.find",
+              priority=BaseCloudService.STANDARD_EVENT_PRIORITY)
     def find(self, gateway, **kwargs):
     def find(self, gateway, **kwargs):
         obj_list = gateway.floating_ips
         obj_list = gateway.floating_ips
         filters = ['name', 'public_ip']
         filters = ['name', 'public_ip']

+ 2 - 2
cloudbridge/cloud/base/subservices.py

@@ -46,10 +46,10 @@ class BaseGatewaySubService(GatewaySubService, BasePageableObjectMixin):
     def _provider(self):
     def _provider(self):
         return self.__provider
         return self.__provider
 
 
-    def get_or_create_inet_gateway(self):
+    def get_or_create(self):
         return (self._provider.networking
         return (self._provider.networking
                               ._gateways
                               ._gateways
-                              .get_or_create_inet_gateway(self._network))
+                              .get_or_create(self._network))
 
 
     def delete(self, gateway):
     def delete(self, gateway):
         return (self._provider.networking
         return (self._provider.networking

+ 1 - 1
cloudbridge/cloud/interfaces/services.py

@@ -1541,7 +1541,7 @@ class GatewayService(CloudService):
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
     @abstractmethod
     @abstractmethod
-    def get_or_create_inet_gateway(self, network):
+    def get_or_create(self, network):
         """
         """
         Creates new or returns an existing internet gateway for a network.
         Creates new or returns an existing internet gateway for a network.
 
 

+ 1 - 1
cloudbridge/cloud/interfaces/subservices.py

@@ -79,7 +79,7 @@ class GatewaySubService(PageableObjectMixin):
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
     @abstractmethod
     @abstractmethod
-    def get_or_create_inet_gateway(self):
+    def get_or_create(self):
         """
         """
         Creates new or returns an existing internet gateway for a network.
         Creates new or returns an existing internet gateway for a network.
 
 

+ 22 - 2
cloudbridge/cloud/providers/aws/services.py

@@ -205,6 +205,8 @@ class AWSVMFirewallRuleService(BaseVMFirewallRuleService):
     def __init__(self, provider):
     def __init__(self, provider):
         super(AWSVMFirewallRuleService, self).__init__(provider)
         super(AWSVMFirewallRuleService, self).__init__(provider)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.list",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def list(self, firewall, limit=None, marker=None):
     def list(self, firewall, limit=None, marker=None):
         # pylint:disable=protected-access
         # pylint:disable=protected-access
         rules = [AWSVMFirewallRule(firewall,
         rules = [AWSVMFirewallRule(firewall,
@@ -217,6 +219,8 @@ class AWSVMFirewallRuleService(BaseVMFirewallRuleService):
         return ClientPagedResultList(self.provider, rules,
         return ClientPagedResultList(self.provider, rules,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.create",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def create(self, firewall,  direction, protocol=None, from_port=None,
     def create(self, firewall,  direction, protocol=None, from_port=None,
                to_port=None, cidr=None, src_dest_fw=None):
                to_port=None, cidr=None, src_dest_fw=None):
         src_dest_fw_id = (
         src_dest_fw_id = (
@@ -249,6 +253,8 @@ class AWSVMFirewallRuleService(BaseVMFirewallRuleService):
             else:
             else:
                 raise ec2e
                 raise ec2e
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.delete",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def delete(self, firewall, rule):
     def delete(self, firewall, rule):
         ip_perm_entry = rule._construct_ip_perms(
         ip_perm_entry = rule._construct_ip_perms(
             rule.protocol, rule.from_port, rule.to_port,
             rule.protocol, rule.from_port, rule.to_port,
@@ -1050,7 +1056,7 @@ class AWSSubnetService(BaseSubnetService):
         # though because the provider-default network will have Internet
         # though because the provider-default network will have Internet
         # connectivity (unlike the CloudBridge-default network with this
         # connectivity (unlike the CloudBridge-default network with this
         # being commented) and is hence left in the codebase.
         # being commented) and is hence left in the codebase.
-        # default_gtw = default_net.gateways.get_or_create_inet_gateway()
+        # default_gtw = default_net.gateways.get_or_create()
         # router_label = "{0}-router".format(
         # router_label = "{0}-router".format(
         #   AWSNetwork.CB_DEFAULT_NETWORK_LABEL)
         #   AWSNetwork.CB_DEFAULT_NETWORK_LABEL)
         # default_routers = self.provider.networking.routers.find(
         # default_routers = self.provider.networking.routers.find(
@@ -1162,7 +1168,9 @@ class AWSGatewayService(BaseGatewayService):
                                   cb_resource=AWSInternetGateway,
                                   cb_resource=AWSInternetGateway,
                                   boto_collection_name='internet_gateways')
                                   boto_collection_name='internet_gateways')
 
 
-    def get_or_create_inet_gateway(self, network):
+    @dispatch(event_pattern="provider.networking.gateways.get_or_create",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
+    def get_or_create(self, network):
         network_id = network.id if isinstance(
         network_id = network.id if isinstance(
             network, AWSNetwork) else network
             network, AWSNetwork) else network
         # Don't filter by label because it may conflict with at least the
         # Don't filter by label because it may conflict with at least the
@@ -1181,6 +1189,8 @@ class AWSGatewayService(BaseGatewayService):
         cb_gateway._gateway.attach_to_vpc(VpcId=network_id)
         cb_gateway._gateway.attach_to_vpc(VpcId=network_id)
         return cb_gateway
         return cb_gateway
 
 
+    @dispatch(event_pattern="provider.networking.gateways.delete",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def delete(self, network, gateway):
     def delete(self, network, gateway):
         gw = (gateway if isinstance(gateway, AWSInternetGateway)
         gw = (gateway if isinstance(gateway, AWSInternetGateway)
               else self.get(gateway))
               else self.get(gateway))
@@ -1191,6 +1201,8 @@ class AWSGatewayService(BaseGatewayService):
         except ClientError as e:
         except ClientError as e:
             log.warn("Error deleting gateway {0}: {1}".format(self.id, e))
             log.warn("Error deleting gateway {0}: {1}".format(self.id, e))
 
 
+    @dispatch(event_pattern="provider.networking.gateways.list",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def list(self, network, limit=None, marker=None):
     def list(self, network, limit=None, marker=None):
         log.debug("Listing current AWS internet gateways for net %s.",
         log.debug("Listing current AWS internet gateways for net %s.",
                   network.id)
                   network.id)
@@ -1206,14 +1218,20 @@ class AWSFloatingIPService(BaseFloatingIPService):
                                   cb_resource=AWSFloatingIP,
                                   cb_resource=AWSFloatingIP,
                                   boto_collection_name='vpc_addresses')
                                   boto_collection_name='vpc_addresses')
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.get",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def get(self, gateway, fip_id):
     def get(self, gateway, fip_id):
         log.debug("Getting AWS Floating IP Service with the id: %s", fip_id)
         log.debug("Getting AWS Floating IP Service with the id: %s", fip_id)
         return self.svc.get(fip_id)
         return self.svc.get(fip_id)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.list",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def list(self, gateway, limit=None, marker=None):
     def list(self, gateway, limit=None, marker=None):
         log.debug("Listing all floating IPs under gateway %s", gateway)
         log.debug("Listing all floating IPs under gateway %s", gateway)
         return self.svc.list(limit=limit, marker=marker)
         return self.svc.list(limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.create",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def create(self, gateway):
     def create(self, gateway):
         log.debug("Creating a floating IP under gateway %s", gateway)
         log.debug("Creating a floating IP under gateway %s", gateway)
         ip = self.provider.ec2_conn.meta.client.allocate_address(
         ip = self.provider.ec2_conn.meta.client.allocate_address(
@@ -1222,6 +1240,8 @@ class AWSFloatingIPService(BaseFloatingIPService):
             self.provider,
             self.provider,
             self.provider.ec2_conn.VpcAddress(ip.get('AllocationId')))
             self.provider.ec2_conn.VpcAddress(ip.get('AllocationId')))
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.delete",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def delete(self, gateway, fip):
     def delete(self, gateway, fip):
         if isinstance(fip, AWSFloatingIP):
         if isinstance(fip, AWSFloatingIP):
             os_fip = fip._ip
             os_fip = fip._ip

+ 1 - 1
cloudbridge/cloud/providers/azure/resources.py

@@ -851,7 +851,7 @@ class AzureFloatingIP(BaseFloatingIP):
 
 
     def refresh(self):
     def refresh(self):
         net = self._provider.networking.networks.get(self._network_id)
         net = self._provider.networking.networks.get(self._network_id)
-        gw = net.gateways.get_or_create_inet_gateway()
+        gw = net.gateways.get_or_create()
         fip = gw.floating_ips.get(self.id)
         fip = gw.floating_ips.get(self.id)
         self._ip = fip._ip
         self._ip = fip._ip
 
 

+ 21 - 1
cloudbridge/cloud/providers/azure/services.py

@@ -154,6 +154,8 @@ class AzureVMFirewallRuleService(BaseVMFirewallRuleService):
     def __init__(self, provider):
     def __init__(self, provider):
         super(AzureVMFirewallRuleService, self).__init__(provider)
         super(AzureVMFirewallRuleService, self).__init__(provider)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.list",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def list(self, firewall, limit=None, marker=None):
     def list(self, firewall, limit=None, marker=None):
         # Filter out firewall rules with priority < 3500 because values
         # Filter out firewall rules with priority < 3500 because values
         # between 3500 and 4096 are assumed to be owned by cloudbridge
         # between 3500 and 4096 are assumed to be owned by cloudbridge
@@ -165,6 +167,8 @@ class AzureVMFirewallRuleService(BaseVMFirewallRuleService):
         return ClientPagedResultList(self._provider, rules,
         return ClientPagedResultList(self._provider, rules,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.create",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def create(self, firewall, direction, protocol=None, from_port=None,
     def create(self, firewall, direction, protocol=None, from_port=None,
                to_port=None, cidr=None, src_dest_fw=None):
                to_port=None, cidr=None, src_dest_fw=None):
         if protocol and from_port and to_port:
         if protocol and from_port and to_port:
@@ -213,6 +217,8 @@ class AzureVMFirewallRuleService(BaseVMFirewallRuleService):
         firewall._vm_firewall.security_rules.append(result)
         firewall._vm_firewall.security_rules.append(result)
         return AzureVMFirewallRule(firewall, result)
         return AzureVMFirewallRule(firewall, result)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.delete",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def delete(self, firewall, rule):
     def delete(self, firewall, rule):
         rule_id = rule.id if isinstance(rule, AzureVMFirewallRule) else rule
         rule_id = rule.id if isinstance(rule, AzureVMFirewallRule) else rule
         fw_name = firewall.name
         fw_name = firewall.name
@@ -1299,15 +1305,21 @@ class AzureGatewayService(BaseGatewayService):
     def _gateway_singleton(self, network):
     def _gateway_singleton(self, network):
         return AzureInternetGateway(self._provider, None, network)
         return AzureInternetGateway(self._provider, None, network)
 
 
-    def get_or_create_inet_gateway(self, network):
+    @dispatch(event_pattern="provider.networking.gateways.get_or_create",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
+    def get_or_create(self, network):
         return self._gateway_singleton(network)
         return self._gateway_singleton(network)
 
 
+    @dispatch(event_pattern="provider.networking.gateways.list",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def list(self, network, limit=None, marker=None):
     def list(self, network, limit=None, marker=None):
         gws = [self._gateway_singleton(network)]
         gws = [self._gateway_singleton(network)]
         return ClientPagedResultList(self._provider,
         return ClientPagedResultList(self._provider,
                                      gws,
                                      gws,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.networking.gateways.delete",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def delete(self, network, gateway):
     def delete(self, network, gateway):
         pass
         pass
 
 
@@ -1317,12 +1329,16 @@ class AzureFloatingIPService(BaseFloatingIPService):
     def __init__(self, provider):
     def __init__(self, provider):
         super(AzureFloatingIPService, self).__init__(provider)
         super(AzureFloatingIPService, self).__init__(provider)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.get",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def get(self, gateway, fip_id):
     def get(self, gateway, fip_id):
         log.debug("Getting Azure Floating IP container with the id: %s",
         log.debug("Getting Azure Floating IP container with the id: %s",
                   fip_id)
                   fip_id)
         fip = [fip for fip in self if fip.id == fip_id]
         fip = [fip for fip in self if fip.id == fip_id]
         return fip[0] if fip else None
         return fip[0] if fip else None
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.list",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def list(self, gateway, limit=None, marker=None):
     def list(self, gateway, limit=None, marker=None):
         floating_ips = [AzureFloatingIP(self.provider, floating_ip,
         floating_ips = [AzureFloatingIP(self.provider, floating_ip,
                                         gateway.network_id)
                                         gateway.network_id)
@@ -1331,6 +1347,8 @@ class AzureFloatingIPService(BaseFloatingIPService):
         return ClientPagedResultList(self.provider, floating_ips,
         return ClientPagedResultList(self.provider, floating_ips,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.create",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def create(self, gateway):
     def create(self, gateway):
         public_ip_parameters = {
         public_ip_parameters = {
             'location': self.provider.azure_client.region_name,
             'location': self.provider.azure_client.region_name,
@@ -1343,6 +1361,8 @@ class AzureFloatingIPService(BaseFloatingIPService):
             create_floating_ip(public_ip_name, public_ip_parameters)
             create_floating_ip(public_ip_name, public_ip_parameters)
         return AzureFloatingIP(self.provider, floating_ip, gateway.network_id)
         return AzureFloatingIP(self.provider, floating_ip, gateway.network_id)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.delete",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def delete(self, gateway, fip):
     def delete(self, gateway, fip):
         fip_id = fip if isinstance(fip, AzureFloatingIP) else fip
         fip_id = fip if isinstance(fip, AzureFloatingIP) else fip
         self._provider.azure_client.delete_floating_ip(fip_id)
         self._provider.azure_client.delete_floating_ip(fip_id)

+ 1 - 1
cloudbridge/cloud/providers/gce/resources.py

@@ -977,7 +977,7 @@ class GCEInstance(BaseInstance):
         network_url = self._gce_instance.get('networkInterfaces')[0].get(
         network_url = self._gce_instance.get('networkInterfaces')[0].get(
             'network')
             'network')
         network = self._provider.networking.networks.get(network_url)
         network = self._provider.networking.networks.get(network_url)
-        self._inet_gateway = network.gateways.get_or_create_inet_gateway()
+        self._inet_gateway = network.gateways.get_or_create()
         return self._inet_gateway
         return self._inet_gateway
 
 
     def create_image(self, label):
     def create_image(self, label):

+ 22 - 2
cloudbridge/cloud/providers/gce/services.py

@@ -228,6 +228,8 @@ class GCEVMFirewallRuleService(BaseVMFirewallRuleService):
         super(GCEVMFirewallRuleService, self).__init__(provider)
         super(GCEVMFirewallRuleService, self).__init__(provider)
         self._dummy_rule = None
         self._dummy_rule = None
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.list",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def list(self, firewall, limit=None, marker=None):
     def list(self, firewall, limit=None, marker=None):
         rules = []
         rules = []
         for firewall in firewall.delegate.iter_firewalls(
         for firewall in firewall.delegate.iter_firewalls(
@@ -276,11 +278,15 @@ class GCEVMFirewallRuleService(BaseVMFirewallRuleService):
             return None
             return None
         return rules[0]
         return rules[0]
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.create",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def create(self, firewall, direction, protocol, from_port=None,
     def create(self, firewall, direction, protocol, from_port=None,
                to_port=None, cidr=None, src_dest_fw=None):
                to_port=None, cidr=None, src_dest_fw=None):
         return self.create_with_priority(direction, protocol, 1000, from_port,
         return self.create_with_priority(direction, protocol, 1000, from_port,
                                          to_port, cidr, src_dest_fw)
                                          to_port, cidr, src_dest_fw)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.delete",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def delete(self, firewall, rule):
     def delete(self, firewall, rule):
         rule = rule if isinstance(rule, GCEVMFirewallRule) else self.get(rule)
         rule = rule if isinstance(rule, GCEVMFirewallRule) else self.get(rule)
         if rule.is_dummy_rule():
         if rule.is_dummy_rule():
@@ -1051,7 +1057,7 @@ class GCESubnetService(BaseSubnetService):
                 cidr_block=cidr_block, network=net, zone=zone)
                 cidr_block=cidr_block, network=net, zone=zone)
         router = self.provider.networking.routers.get_or_create_default(net)
         router = self.provider.networking.routers.get_or_create_default(net)
         router.attach_subnet(sn)
         router.attach_subnet(sn)
-        gateway = net.gateways.get_or_create_inet_gateway()
+        gateway = net.gateways.get_or_create()
         router.attach_gateway(gateway)
         router.attach_gateway(gateway)
         return sn
         return sn
 
 
@@ -1499,12 +1505,18 @@ class GCEGatewayService(BaseGatewayService):
                     GCEGatewayService._DEFAULT_GATEWAY_NAME),
                     GCEGatewayService._DEFAULT_GATEWAY_NAME),
              'name': GCEGatewayService._DEFAULT_GATEWAY_NAME})
              'name': GCEGatewayService._DEFAULT_GATEWAY_NAME})
 
 
-    def get_or_create_inet_gateway(self, network):
+    @dispatch(event_pattern="provider.networking.gateways.get_or_create",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
+    def get_or_create(self, network):
         return self._default_internet_gateway
         return self._default_internet_gateway
 
 
+    @dispatch(event_pattern="provider.networking.gateways.delete",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def delete(self, network, gateway):
     def delete(self, network, gateway):
         pass
         pass
 
 
+    @dispatch(event_pattern="provider.networking.gateways.list",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def list(self, network, limit=None, marker=None):
     def list(self, network, limit=None, marker=None):
         gws = [self._default_internet_gateway]
         gws = [self._default_internet_gateway]
         return ClientPagedResultList(self._provider,
         return ClientPagedResultList(self._provider,
@@ -1517,11 +1529,15 @@ class GCEFloatingIPService(BaseFloatingIPService):
     def __init__(self, provider, gateway):
     def __init__(self, provider, gateway):
         super(GCEFloatingIPService, self).__init__(provider, gateway)
         super(GCEFloatingIPService, self).__init__(provider, gateway)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.get",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def get(self, gateway, floating_ip_id):
     def get(self, gateway, floating_ip_id):
         fip = self.provider.get_resource('addresses', floating_ip_id)
         fip = self.provider.get_resource('addresses', floating_ip_id)
         return (GCEFloatingIP(self.provider, gateway, fip)
         return (GCEFloatingIP(self.provider, gateway, fip)
                 if fip else None)
                 if fip else None)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.list",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def list(self, gateway, limit=None, marker=None):
     def list(self, gateway, limit=None, marker=None):
         max_result = limit if limit is not None and limit < 500 else 500
         max_result = limit if limit is not None and limit < 500 else 500
         response = (self.provider
         response = (self.provider
@@ -1541,6 +1557,8 @@ class GCEFloatingIPService(BaseFloatingIPService):
                                      response.get('nextPageToken'),
                                      response.get('nextPageToken'),
                                      False, data=ips)
                                      False, data=ips)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.create",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def create(self, gateway):
     def create(self, gateway):
         region_name = self.provider.region_name
         region_name = self.provider.region_name
         ip_name = 'ip-{0}'.format(uuid.uuid4())
         ip_name = 'ip-{0}'.format(uuid.uuid4())
@@ -1554,6 +1572,8 @@ class GCEFloatingIPService(BaseFloatingIPService):
         self.provider.wait_for_operation(response, region=region_name)
         self.provider.wait_for_operation(response, region=region_name)
         return self.get(ip_name)
         return self.get(ip_name)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.delete",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def delete(self, gateway, fip):
     def delete(self, gateway, fip):
         fip = (fip if isinstance(fip, GCEFloatingIP)
         fip = (fip if isinstance(fip, GCEFloatingIP)
                else gateway.floating_ips.get(fip))
                else gateway.floating_ips.get(fip))

+ 1 - 1
cloudbridge/cloud/providers/openstack/resources.py

@@ -928,7 +928,7 @@ class OpenStackFloatingIP(BaseFloatingIP):
     def refresh(self):
     def refresh(self):
         net = self._provider.networking.networks.get(
         net = self._provider.networking.networks.get(
             self._ip.floating_network_id)
             self._ip.floating_network_id)
-        gw = net.gateways.get_or_create_inet_gateway()
+        gw = net.gateways.get_or_create()
         fip = gw.floating_ips.get(self.id)
         fip = gw.floating_ips.get(self.id)
         # pylint:disable=protected-access
         # pylint:disable=protected-access
         self._ip = fip._ip
         self._ip = fip._ip

+ 22 - 2
cloudbridge/cloud/providers/openstack/services.py

@@ -263,6 +263,8 @@ class OpenStackVMFirewallRuleService(BaseVMFirewallRuleService):
     def __init__(self, provider, firewall):
     def __init__(self, provider, firewall):
         super(OpenStackVMFirewallRuleService, self).__init__(provider)
         super(OpenStackVMFirewallRuleService, self).__init__(provider)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.list",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def list(self, firewall, limit=None, marker=None):
     def list(self, firewall, limit=None, marker=None):
         # pylint:disable=protected-access
         # pylint:disable=protected-access
         rules = [OpenStackVMFirewallRule(firewall, r)
         rules = [OpenStackVMFirewallRule(firewall, r)
@@ -270,6 +272,8 @@ class OpenStackVMFirewallRuleService(BaseVMFirewallRuleService):
         return ClientPagedResultList(self.provider, rules,
         return ClientPagedResultList(self.provider, rules,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.create",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def create(self, firewall, direction, protocol=None, from_port=None,
     def create(self, firewall, direction, protocol=None, from_port=None,
                to_port=None, cidr=None, src_dest_fw=None):
                to_port=None, cidr=None, src_dest_fw=None):
         src_dest_fw_id = (src_dest_fw.id if isinstance(src_dest_fw,
         src_dest_fw_id = (src_dest_fw.id if isinstance(src_dest_fw,
@@ -305,6 +309,8 @@ class OpenStackVMFirewallRuleService(BaseVMFirewallRuleService):
             else:
             else:
                 raise e
                 raise e
 
 
+    @dispatch(event_pattern="provider.security.vm_firewall_rules.delete",
+              priority=BaseVMFirewallRuleService.STANDARD_EVENT_PRIORITY)
     def delete(self, firewall, rule):
     def delete(self, firewall, rule):
         rule_id = (rule.id if isinstance(rule, OpenStackVMFirewallRule)
         rule_id = (rule.id if isinstance(rule, OpenStackVMFirewallRule)
                    else rule)
                    else rule)
@@ -1076,7 +1082,7 @@ class OpenStackSubnetService(BaseSubnetService):
             router = self.provider.networking.routers.get_or_create_default(
             router = self.provider.networking.routers.get_or_create_default(
                 net)
                 net)
             router.attach_subnet(sn)
             router.attach_subnet(sn)
-            gateway = net.gateways.get_or_create_inet_gateway()
+            gateway = net.gateways.get_or_create()
             router.attach_gateway(gateway)
             router.attach_gateway(gateway)
             return sn
             return sn
         except NeutronClientException:
         except NeutronClientException:
@@ -1147,7 +1153,9 @@ class OpenStackGatewayService(BaseGatewayService):
             except Exception:
             except Exception:
                 return False
                 return False
 
 
-    def get_or_create_inet_gateway(self, network):
+    @dispatch(event_pattern="provider.networking.gateways.get_or_create",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
+    def get_or_create(self, network):
         """For OS, inet gtw is any net that has `external` property set."""
         """For OS, inet gtw is any net that has `external` property set."""
         external_nets = (n for n in self._provider.networking.networks
         external_nets = (n for n in self._provider.networking.networks
                          if n.external)
                          if n.external)
@@ -1156,9 +1164,13 @@ class OpenStackGatewayService(BaseGatewayService):
                 return OpenStackInternetGateway(self._provider, net)
                 return OpenStackInternetGateway(self._provider, net)
         return None
         return None
 
 
+    @dispatch(event_pattern="provider.networking.gateways.delete",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def delete(self, network, gateway):
     def delete(self, network, gateway):
         pass
         pass
 
 
+    @dispatch(event_pattern="provider.networking.gateways.list",
+              priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
     def list(self, network, limit=None, marker=None):
     def list(self, network, limit=None, marker=None):
         log.debug("OpenStack listing of all current internet gateways")
         log.debug("OpenStack listing of all current internet gateways")
         igl = [OpenStackInternetGateway(self._provider, n)
         igl = [OpenStackInternetGateway(self._provider, n)
@@ -1173,6 +1185,8 @@ class OpenStackFloatingIPService(BaseFloatingIPService):
     def __init__(self, provider, gateway):
     def __init__(self, provider, gateway):
         super(OpenStackFloatingIPService, self).__init__(provider, gateway)
         super(OpenStackFloatingIPService, self).__init__(provider, gateway)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.get",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def get(self, gateway, fip_id):
     def get(self, gateway, fip_id):
         try:
         try:
             return OpenStackFloatingIP(
             return OpenStackFloatingIP(
@@ -1181,6 +1195,8 @@ class OpenStackFloatingIPService(BaseFloatingIPService):
             log.debug("Floating IP %s not found.", fip_id)
             log.debug("Floating IP %s not found.", fip_id)
             return None
             return None
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.list",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def list(self, gateway, limit=None, marker=None):
     def list(self, gateway, limit=None, marker=None):
         fips = [OpenStackFloatingIP(self.provider, fip)
         fips = [OpenStackFloatingIP(self.provider, fip)
                 for fip in self.provider.os_conn.network.ips(
                 for fip in self.provider.os_conn.network.ips(
@@ -1189,11 +1205,15 @@ class OpenStackFloatingIPService(BaseFloatingIPService):
         return ClientPagedResultList(self.provider, fips,
         return ClientPagedResultList(self.provider, fips,
                                      limit=limit, marker=marker)
                                      limit=limit, marker=marker)
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.create",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def create(self, gateway):
     def create(self, gateway):
         return OpenStackFloatingIP(
         return OpenStackFloatingIP(
             self.provider, self.provider.os_conn.network.create_ip(
             self.provider, self.provider.os_conn.network.create_ip(
                 floating_network_id=gateway.id))
                 floating_network_id=gateway.id))
 
 
+    @dispatch(event_pattern="provider.networking.floating_ips.delete",
+              priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
     def delete(self, gateway, fip):
     def delete(self, gateway, fip):
         if isinstance(fip, OpenStackFloatingIP):
         if isinstance(fip, OpenStackFloatingIP):
             os_ip = fip._ip
             os_ip = fip._ip

+ 2 - 2
docs/getting_started.rst

@@ -135,7 +135,7 @@ attaching an internet gateway to the subnet via a router.
         cidr_block='10.0.0.0/28', label='cb-subnet', zone=zone)
         cidr_block='10.0.0.0/28', label='cb-subnet', zone=zone)
     router = provider.networking.routers.create(network=net, label='cb-router')
     router = provider.networking.routers.create(network=net, label='cb-router')
     router.attach_subnet(sn)
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway()
+    gateway = net.gateways.get_or_create()
     router.attach_gateway(gateway)
     router.attach_gateway(gateway)
 
 
 
 
@@ -250,7 +250,7 @@ their provider mappings, see :doc:`topics/resource_types_and_mapping`.
     router = router_list[0]
     router = router_list[0]
 
 
     # Gateway
     # Gateway
-    gateway = net.gateways.get_or_create_inet_gateway()
+    gateway = net.gateways.get_or_create()
 
 
     # Firewall
     # Firewall
     fw = provider.security.vm_firewalls.get('firewall ID')
     fw = provider.security.vm_firewalls.get('firewall ID')

+ 1 - 1
docs/topics/aws_mapping.rst

@@ -158,7 +158,7 @@ take a name parameter, and the `name` property is set automatically to a
 default value. Note that since this value is stored in the tag with key Name,
 default value. Note that since this value is stored in the tag with key Name,
 the AWS dashboard does allow for its modification, although that is not
 the AWS dashboard does allow for its modification, although that is not
 encouraged as the default name is expected for the
 encouraged as the default name is expected for the
-`get_or_create_inet_gateway` method.
+`get_or_create` method.
 
 
 Finally, Firewall Rules in AWS differ from traditional unlabeled resources
 Finally, Firewall Rules in AWS differ from traditional unlabeled resources
 by the fact that they do not take a `name` parameter at creation, and the
 by the fact that they do not take a `name` parameter at creation, and the

+ 1 - 1
docs/topics/launch.rst

@@ -68,7 +68,7 @@ that subnet.
     # make sure subnet has internet access
     # make sure subnet has internet access
     router = self.provider.networking.routers.create(label='my-router', network=net)
     router = self.provider.networking.routers.create(label='my-router', network=net)
     router.attach_subnet(sn)
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway()
+    gateway = net.gateways.get_or_create()
     router.attach_gateway(gateway)
     router.attach_gateway(gateway)
 
 
     inst = provider.compute.instances.create(
     inst = provider.compute.instances.create(

+ 2 - 2
docs/topics/networking.rst

@@ -77,7 +77,7 @@ subnet (``/28``).
     sn = net.create_subnet(label='my-subnet', cidr_block='10.0.0.0/28', zone=zone)
     sn = net.create_subnet(label='my-subnet', cidr_block='10.0.0.0/28', zone=zone)
     router = provider.networking.routers.create(label='my-router', network=net)
     router = provider.networking.routers.create(label='my-router', network=net)
     router.attach_subnet(sn)
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway()
+    gateway = net.gateways.get_or_create()
     router.attach_gateway(gateway)
     router.attach_gateway(gateway)
 
 
 
 
@@ -95,7 +95,7 @@ The additional step that's required here is to assign a floating IP to the VM:
 
 
     router = provider.networking.routers.create(label='my-router', network=net)
     router = provider.networking.routers.create(label='my-router', network=net)
     router.attach_subnet(sn)
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway()
+    gateway = net.gateways.get_or_create()
     router.attach_gateway(gateway)
     router.attach_gateway(gateway)
 
 
     fip = provider.networking.floating_ips.create()
     fip = provider.networking.floating_ips.create()

+ 1 - 1
test/helpers/__init__.py

@@ -204,7 +204,7 @@ def get_test_gateway(provider):
     """
     """
     sn = get_or_create_default_subnet(provider)
     sn = get_or_create_default_subnet(provider)
     net = sn.network
     net = sn.network
-    return net.gateways.get_or_create_inet_gateway()
+    return net.gateways.get_or_create()
 
 
 
 
 def cleanup_gateway(gateway):
 def cleanup_gateway(gateway):

+ 1 - 1
test/test_compute_service.py

@@ -357,7 +357,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
 
 
             # check floating ips
             # check floating ips
             router = self.provider.networking.routers.create(label, net)
             router = self.provider.networking.routers.create(label, net)
-            gateway = net.gateways.get_or_create_inet_gateway()
+            gateway = net.gateways.get_or_create()
 
 
             def cleanup_router(router, gateway):
             def cleanup_router(router, gateway):
                 with helpers.cleanup_action(lambda: router.delete()):
                 with helpers.cleanup_action(lambda: router.delete()):

+ 1 - 1
test/test_network_service.py

@@ -257,7 +257,7 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                     len(router.subnets) == 1,
                     len(router.subnets) == 1,
                     "Subnet {0} not attached to router {1}".format(sn, router)
                     "Subnet {0} not attached to router {1}".format(sn, router)
                 )
                 )
-            gteway = net.gateways.get_or_create_inet_gateway()
+            gteway = net.gateways.get_or_create()
             router.attach_gateway(gteway)
             router.attach_gateway(gteway)
             # TODO: add a check for routes after that's been implemented
             # TODO: add a check for routes after that's been implemented