Source code for fnss.netconfig.nodeconfig
"""
Provides functions to deploy and configure protocol stacks and applications on
network nodes
"""
__all__ = ['add_stack',
'get_stack',
'remove_stack',
'clear_stacks',
'add_application',
'get_application_names',
'get_application_properties',
'remove_application',
'clear_applications',
]
[docs]def add_stack(topology, node, name, properties):
"""
Set stack on a node
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
name : str
The name of the stack
properties : dict
The properties of the stack
"""
if type(properties) != dict:
raise ValueError('The properties parameter must be a dictionary')
topology.node[node]['stack'] = name, properties
[docs]def get_stack(topology, node):
"""
Return the stack of a node, if any
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
Returns
-------
stack : tuple (name, properties)
A tuple of two values, where the first value is the name of the stack
and the second value is the dictionary of properties of the stack.
"""
return None if 'stack' not in topology.node[node] \
else topology.node[node]['stack']
[docs]def remove_stack(topology, node):
"""
Remove stack from a node
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
"""
if 'stack' in topology.node[node]:
del topology.node[node]['stack']
[docs]def clear_stacks(topology):
"""
Remove all stacks from all nodes of the topology
Parameters
----------
topology : Topology
"""
for v in topology.nodes():
if 'stack' in topology.node[v]:
del topology.node[v]['stack']
[docs]def add_application(topology, node, name, properties):
"""
Add an application to a node
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
name : str
The name of the application
properties : dict
The properties of the application
"""
if type(properties) != dict:
raise ValueError('The properties parameter must be a dictionary')
if 'application' not in topology.node[node]:
topology.node[node]['application'] = {}
topology.node[node]['application'][name] = properties
[docs]def get_application_names(topology, node):
"""
Return a list of names of applications deployed on a node
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
Returns
-------
application_names : list
A list of application names
"""
return [] if 'application' not in topology.node[node] \
else list(topology.node[node]['application'].keys())
[docs]def get_application_properties(topology, node, name):
"""
Return a dictionary containing all the properties of an application
deployed on a node
Parameters
----------
topology : Topology
The topology
node : any hashable type
The ID of the node
name : str
The name of the application
Returns
-------
applications : dict
A dictionary containing the properties of the application
"""
if 'application' not in topology.node[node]:
raise ValueError('There is no such application deployed on the node')
return topology.node[node]['application'][name]
[docs]def remove_application(topology, node, name=None):
"""
Remove an application from a node
Parameters
----------
topology : Topology
The topology object
node : any hashable type
The ID of the node from which the application is to be removed
name : optional
The name of the application to remove. If not given, all the
applications of the node are removed
"""
if 'application' in topology.node[node]:
if name is None:
del topology.node[node]['application']
elif name in topology.node[node]['application']:
del topology.node[node]['application'][name]
[docs]def clear_applications(topology):
"""
Remove all applications from all nodes of the topology
Parameters
----------
topology : Topology
The topology
"""
for v in topology.nodes():
if 'application' in topology.node[v]:
del topology.node[v]['application']