Browse Source

Add custom to_json methods for composite SecurityGroup resources

Enis Afgan 10 years ago
parent
commit
39c2b892b1

+ 16 - 0
cloudbridge/cloud/providers/aws/resources.py

@@ -1,6 +1,8 @@
 """
 DataTypes used by this provider
 """
+import inspect
+import json
 import shutil
 
 from boto.exception import EC2ResponseError
@@ -564,6 +566,13 @@ class AWSSecurityGroup(BaseSecurityGroup):
             # pylint:disable=protected-access
             src_group=src_group._security_group if src_group else None)
 
+    def to_json(self):
+        attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
+        js = {k: v for(k, v) in attr if not k.startswith('_')}
+        json_rules = [r.to_json() for r in self.rules]
+        js['rules'] = [json.loads(r) for r in json_rules]
+        return json.dumps(js, sort_keys=True)
+
 
 class AWSSecurityGroupRule(BaseSecurityGroupRule):
 
@@ -597,6 +606,13 @@ class AWSSecurityGroupRule(BaseSecurityGroupRule):
                 return AWSSecurityGroup(self._provider, cg)
         return None
 
+    def to_json(self):
+        attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
+        js = {k: v for(k, v) in attr if not k.startswith('_')}
+        js['group'] = self.group.id if self.group else ''
+        js['parent'] = self.parent.id if self.parent else ''
+        return json.dumps(js, sort_keys=True)
+
 
 class AWSBucketObject(BaseBucketObject):
 

+ 16 - 0
cloudbridge/cloud/providers/openstack/resources.py

@@ -1,6 +1,8 @@
 """
 DataTypes used by this provider
 """
+import inspect
+import json
 import shutil
 
 import ipaddress
@@ -706,6 +708,13 @@ class OpenStackSecurityGroup(BaseSecurityGroup):
                cidr=cidr_ip):
                 return True
 
+    def to_json(self):
+        attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
+        js = {k: v for(k, v) in attr if not k.startswith('_')}
+        json_rules = [r.to_json() for r in self.rules]
+        js['rules'] = [json.loads(r) for r in json_rules]
+        return json.dumps(js, sort_keys=True)
+
 
 class OpenStackSecurityGroupRule(BaseSecurityGroupRule):
 
@@ -739,6 +748,13 @@ class OpenStackSecurityGroupRule(BaseSecurityGroupRule):
                     return OpenStackSecurityGroup(self._provider, sg)
         return None
 
+    def to_json(self):
+        attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
+        js = {k: v for(k, v) in attr if not k.startswith('_')}
+        js['group'] = self.group.id if self.group else ''
+        js['parent'] = self.parent.id if self.parent else ''
+        return json.dumps(js, sort_keys=True)
+
 
 class OpenStackBucketObject(BaseBucketObject):