Fix XML security group rule client.

The client ignored cidr and group_id.
It also did not handle None values for
several of the parameters.
Fixed both, refactored the rule
creation method.

Fixes: bug #1191856
Change-Id: I0aa28bc50e9991d0381f0b0d7e3edb05f8e90591
diff --git a/tempest/services/compute/xml/security_groups_client.py b/tempest/services/compute/xml/security_groups_client.py
index 08b381c..4f9d347 100644
--- a/tempest/services/compute/xml/security_groups_client.py
+++ b/tempest/services/compute/xml/security_groups_client.py
@@ -97,29 +97,18 @@
         group_id : ID of the Source group
         """
         group_rule = Element("security_group_rule")
-        parent_group = Element("parent_group_id")
-        parent_group.append(Text(content=parent_group_id))
-        ip_protocol = Element("ip_protocol")
-        ip_protocol.append(Text(content=ip_proto))
-        from_port_num = Element("from_port")
-        from_port_num.append(Text(content=str(from_port)))
-        to_port_num = Element("to_port")
-        to_port_num.append(Text(content=str(to_port)))
 
-        cidr = kwargs.get('cidr')
-        if cidr is not None:
-            cidr_num = Element("cidr")
-            cidr_num.append(Text(content=cidr))
+        elements = {k: kwargs.get(k) for k in ('cidr', 'group_id')}
+        elements['parent_group_id'] = parent_group_id
+        elements['ip_protocol'] = ip_proto
+        elements['from_port'] = from_port
+        elements['to_port'] = to_port
 
-        group_id = kwargs.get('group_id')
-        if group_id is not None:
-            group_id_num = Element("group_id")
-            group_id_num.append(Text(content=group_id))
-
-        group_rule.append(parent_group)
-        group_rule.append(ip_protocol)
-        group_rule.append(from_port_num)
-        group_rule.append(to_port_num)
+        for k, v in elements.items():
+            if v is not None:
+                element = Element(k)
+                element.append(Text(content=str(v)))
+                group_rule.append(element)
 
         url = 'os-security-group-rules'
         resp, body = self.post(url, str(Document(group_rule)), self.headers)