2
0
Эх сурвалжийг харах

Added Create Security group method
Added Create Security group rule method
Added Delete Security group rule method

ankit.bhambhani 9 жил өмнө
parent
commit
5ebfcc084a

+ 17 - 0
cloudbridge/cloud/providers/azure/azure_client.py

@@ -73,6 +73,23 @@ class AzureClient(object):
     def list_security_group(self):
         return self.network_management_client.network_security_groups.list(self.resource_group_name)
 
+    def create_security_group(self, name, parameters):
+        sg_create = self.network_management_client.network_security_groups.create_or_update(self.resource_group_name,
+                                                                                            name, parameters)
+        return sg_create.result()
+
+    def create_security_group_rule(self, security_group, rule_name, parameters):
+        security_rules_operations = self.network_management_client.security_rules
+        sro = security_rules_operations.create_or_update(self.resource_group_name, security_group, rule_name,
+                                                         parameters)
+        result = sro.result()
+        return result
+
+    def delete_security_group_rule(self, name, security_group):
+        security_rules_operations = self.network_management_client.security_rules
+        sro = security_rules_operations.delete(self.resource_group_name, security_group, name)
+        return sro.result()
+
     def get_security_group(self, name):
         return self.network_management_client.network_security_groups.get(self.resource_group_name, name)
 

+ 18 - 4
cloudbridge/cloud/providers/azure/resources.py

@@ -57,8 +57,22 @@ class AzureSecurityGroup(BaseSecurityGroup):
         :rtype: :class:``.SecurityGroupRule``
         :return: Rule object if successful or ``None``.
         """
-
-        return None
+        security_group = self._security_group.name
+        resource_group = self._provider.resource_group
+        count = len(self.rules) + 1
+        rule_name = "Rule - " + str(count)
+        priority = count * 100
+        destination_port_range = "*"
+        destination_address_prefix = "*"
+        access = "Allow"
+        direction = "Inbound"
+        parameters = {"protocol": ip_protocol, "source_port_range": str(from_port) + "-" + str(to_port),
+                      "destination_port_range": destination_port_range,"priority": priority,
+                      "source_address_prefix": cidr_ip, "destination_address_prefix": destination_address_prefix,
+                      "access": access, "direction": direction}
+        result = self._provider.azure_client.create_security_group_rule(security_group, rule_name, parameters)
+        self._security_group.security_rules.append(result)
+        return result
 
     def get_rule(self, ip_protocol=None, from_port=None, to_port=None,
                  cidr_ip=None, src_group=None):
@@ -115,7 +129,7 @@ class AzureSecurityGroupRule(BaseSecurityGroupRule):
 
     @property
     def cidr_ip(self):
-        return self._rule.destination_address_prefix
+        return self._rule.source_address_prefix
 
     @property
     def group(self):
@@ -133,7 +147,7 @@ class AzureSecurityGroupRule(BaseSecurityGroupRule):
             raise Exception('Default Security Rules cannot be deleted!')
         security_group = self.parent.name
         resource_group = self._provider.resource_group
-        sro = self._provider.azure_wrapper.delete_security_group_rule(self.name, resource_group, security_group)
+        sro = self._provider.azure_client.delete_security_group_rule(self.name, security_group)
         for i, o in enumerate(self.parent._security_group.security_rules):
             if o.name == self.name:
                 del self.parent._security_group.security_rules[i]

+ 6 - 4
cloudbridge/cloud/providers/azure/services.py

@@ -48,14 +48,16 @@ class AzureSecurityGroupService(BaseSecurityGroupService):
         return None
 
     def list(self, limit=None, marker=None):
-        nsglist = self.provider.azure_client.list_security_group()
+        nsg_list = self.provider.azure_client.list_security_group()
         network_security_group = [AzureSecurityGroup(self.provider, sg)
-                                  for sg in nsglist]
+                                  for sg in nsg_list]
         return ClientPagedResultList(self.provider, network_security_group, limit, marker)
 
+        # network_id is similar to resource group in azure
     def create(self, name, description, network_id):
-        raise NotImplementedError(
-            "AzureSecurityGroupService does not implement this method")
+        parameters = {"location": self.provider.region_name}
+        result = self.provider.azure_client.create_security_group(name, parameters)
+        return AzureSecurityGroup(self.provider, result)
 
     def find(self, name, limit=None, marker=None):
         raise NotImplementedError(