"""
data = json.loads(connections_json)
- connections = data['output']['connections']
- output = []
- for connection in connections.values():
- output += connection
- return output
+ output = data['output']
+ result = []
+ if output:
+ connections = output['connections']
+ for connection in connections.values():
+ result += connection
+ return result
def find_connection(connections_json, version, mode, ip, port, state):
<keep-alive-time>30</keep-alive-time>
<reconciliation-time>$timeout</reconciliation-time>
<delete-hold-down-time>$timeout</delete-hold-down-time>
+ <hold-time>90</hold-time>
+ <hold-time-max>180</hold-time-max>
+ <hold-time-min>90</hold-time-min>
</connection-timers>
</connection>
</connections>
return data
-def add_domain_xml(node_id, name):
- """Generate xml for Add Domain request
+def add_domain_xml_fluorine(node_id, name, sgt, prefixes, origin):
+ """Generate xml for Add Domain request (Fluorine version: bindings with origin)
:param node_id: Id of node
:type node_id: str
:param name: Name of Domain
:type name: str
+ :param sgt: Security group
+ :type sgt: int
+ :param prefixes: List of ip-prefixes
+ :type prefixes: str
+ :param origin: Origin of added bindings
+ :type origin: str
:returns: String containing xml data for request
"""
- templ = Template('''<input>
- <node-id xmlns="urn:opendaylight:sxp:controller">$id</node-id>
- <domain-name xmlns="urn:opendaylight:sxp:controller">$name</domain-name>
+ master_database = ''
+ if prefixes != 'None':
+ xml_prefixes = ''
+ for prefix in prefixes.split(','):
+ xml_prefixes += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
+ if xml_prefixes:
+ master_database += '''<master-database>
+ <binding>
+ <sgt>$sgt</sgt>
+ $xml_prefixes
+ </binding>
+ </master-database>'''
+ master_database = Template(master_database).substitute(({'sgt': sgt, 'xml_prefixes': xml_prefixes}))
+
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$id</node-id>
+ <domain-name>$name</domain-name>
+ <origin>$origin</origin>
+ $master_database
+</input>''')
+
+ data = templ.substitute({'name': name, 'id': node_id, 'origin': origin, 'master_database': master_database})
+ return data
+
+
+def add_domain_xml_oxygen(node_id, name, sgt, prefixes):
+ """Generate xml for Add Domain request (Oxygen version: bindings without origin)
+
+ :param node_id: Id of node
+ :type node_id: str
+ :param name: Name of Domain
+ :type name: str
+ :param sgt: Security group
+ :type sgt: int
+ :param prefixes: List of ip-prefixes
+ :type prefixes: str
+ :returns: String containing xml data for request
+
+ """
+ master_database = ''
+ if prefixes != 'None':
+ xml_prefixes = ''
+ for prefix in prefixes.split(','):
+ xml_prefixes += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
+ if xml_prefixes:
+ master_database += '''<master-database>
+ <binding>
+ <sgt>$sgt</sgt>
+ $xml_prefixes
+ </binding>
+ </master-database>'''
+ master_database = Template(master_database).substitute(({'sgt': sgt, 'xml_prefixes': xml_prefixes}))
+
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$id</node-id>
+ <domain-name>$name</domain-name>
+ $master_database
</input>''')
- data = templ.substitute({'name': name, 'id': node_id})
+
+ data = templ.substitute({'name': name, 'id': node_id, 'master_database': master_database})
return data
:returns: String containing xml data for request
"""
- return add_domain_xml(node_id, name)
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$node_id</node-id>
+ <domain-name>$name</domain-name>
+</input>''')
+
+ data = templ.substitute({'node_id': node_id, 'name': name})
+ return data
def get_domain_name(domain_name):
return '<domain-name xmlns="urn:opendaylight:sxp:controller">' + domain_name + '</domain-name>'
-def add_bindings_xml(node_id, domain, sgt, prefixes):
- """Generate xml for Add Bindings request
+def add_bindings_xml_fluorine(node_id, domain, sgt, prefixes, origin):
+ """Generate xml for Add Bindings request (Fluorine version with origin type)
:param node_id: Id of node
:type node_id: str
:type sgt: int
:param prefixes: List of ip-prefixes
:type prefixes: str
+ :param origin: Origin of added bindings
+ :type origin: str
:returns: String containing xml data for request
"""
- bindings = ''
+ xml_prefixes = ''
for prefix in prefixes.split(','):
- bindings += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
- templ = Template('''<input>
- <node-id xmlns="urn:opendaylight:sxp:controller">$id</node-id>
- <domain-name xmlns="urn:opendaylight:sxp:controller">$name</domain-name>
- <binding xmlns="urn:opendaylight:sxp:controller">
- <sgt>$sgt</sgt>
- $bindings
- </binding>
+ xml_prefixes += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$id</node-id>
+ <domain-name>$name</domain-name>
+ <origin>$origin</origin>
+ <master-database>
+ <binding>
+ <sgt>$sgt</sgt>
+ $xml_prefixes
+ </binding>
+ </master-database>
+</input>''')
+ data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes, 'origin': origin})
+ return data
+
+
+def add_bindings_xml_oxygen(node_id, domain, sgt, prefixes):
+ """Generate xml for Add Bindings request (Oxygen version without origin type)
+
+ :param node_id: Id of node
+ :type node_id: str
+ :param domain: Name of Domain
+ :type domain: str
+ :param sgt: Security group
+ :type sgt: int
+ :param prefixes: List of ip-prefixes
+ :type prefixes: str
+ :returns: String containing xml data for request
+
+ """
+ xml_prefixes = ''
+ for prefix in prefixes.split(','):
+ xml_prefixes += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$id</node-id>
+ <domain-name>$name</domain-name>
+ <binding>
+ <sgt>$sgt</sgt>
+ $xml_prefixes
+ </binding>
</input>''')
- data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'bindings': bindings})
+ data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes})
return data
:type domain: str
:param sgt: Security group
:type sgt: int
- :param prefixes: List of ip-prefixes
+ :param prefixes: Comma separated list of ip-prefixes
:type prefixes: str
:returns: String containing xml data for request
"""
- return add_bindings_xml(node_id, domain, sgt, prefixes)
+ xml_prefixes = ''
+ for prefix in prefixes.split(','):
+ xml_prefixes += '\n' + '<ip-prefix>' + prefix + '</ip-prefix>'
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:controller">
+ <node-id>$id</node-id>
+ <domain-name>$name</domain-name>
+ <binding>
+ <sgt>$sgt</sgt>
+ $xml_prefixes
+ </binding>
+</input>''')
+ data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes})
+ return data
def prefix_range(start, end):
''')
data = templ.substitute({'routes': routes})
return data
+
+
+def add_binding_origin_xml(origin, priority):
+ """Generate xml for Add Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :param priority: Origin priority
+ :type priority: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+ <priority>$priority</priority>
+</input>''')
+ data = templ.substitute({'origin': origin, 'priority': priority})
+ return data
+
+
+def update_binding_origin_xml(origin, priority):
+ """Generate xml for Update Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :param priority: Origin priority
+ :type priority: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+ <priority>$priority</priority>
+</input>''')
+ data = templ.substitute({'origin': origin, 'priority': priority})
+ return data
+
+
+def delete_binding_origin_xml(origin):
+ """Generate xml for Delete Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+</input>''')
+ data = templ.substitute({'origin': origin})
+ return data
+
+
+def find_binding_origin(origins_json, origin):
+ """Test if Binding origin of specified value is contained in JSON
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :param origin: Origin to be found
+ :type origin: str
+ :returns: True if Binding origin of specified origin type was found, otherwise False.
+
+ """
+ for json_origin in parse_binding_origins(origins_json):
+ if json_origin['origin'] == origin:
+ return True
+ return False
+
+
+def find_binding_origin_with_priority(origins_json, origin, priority):
+ """Test if Binding origin of specified value and priority is contained in JSON
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :param origin: Origin to be found
+ :type origin: str
+ :param priority: desired priority of origin
+ :type priority: str
+ :returns: True if Binding origin of specified origin type with desired priority was found, otherwise False.
+
+ """
+ for json_origin in parse_binding_origins(origins_json):
+ if json_origin['origin'] == origin:
+ if json_origin['priority'] == int(priority):
+ return True
+ return False
+
+
+def parse_binding_origins(origins_json):
+ """Parse JSON string into Array of Binding origins
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :returns: Array containing Binding origins.
+
+ """
+ output = []
+ for origins in origins_json['binding-origins'].values():
+ for origin in origins:
+ output.append(origin)
+ return output