Source code for fwOper.instances


# ----------------------------------------------------------------------------------------
from .route import ROUTES
from .acl import ACLS
from .acg import OBJS
from .fwObj import *

# ----------------------------------------------------------------------------------------
def _get_instances_lists_dict(config_list):
	"""creates and returns dictionary with list of configurations of sub-instances

	Args:
		config_list (list): full firewall configuration list

	Returns:
		dict: instance:instance config list
	"""
	_instances_dict	= {}
	instance_name = None
	for line in config_list:
		if line.rstrip().endswith(" !!") and line.startswith("!! START"):
			instance_name = " ".join(line[3:-3].split()[1:])
			_instances_dict[instance_name] = []
			_instance_list = _instances_dict[instance_name]
		elif instance_name and line.rstrip().endswith(" !!") and line.startswith("!! END"):
			instance_name = None
		elif instance_name:
			_instance_list.append(line.rstrip())
	return _instances_dict

# ----------------------------------------------------------------------------------------

[docs]class Instances(Plurals): """firewall instances object Args: Plurals (Plurals): inherits properties/methods for Plural objects """ def __init__(self, config_list): self._repr_dic = _get_instances_lists_dict(config_list) self.what = "instances" if not self._repr_dic: self._repr_dic['system'] = config_list self.set_objects()
[docs] def changes(self): """to be implemented [TBD] """ pass
# ~~~~~~~~~~~~~~~~~~~ EXTERNAL CALLABLES ~~~~~~~~~~~~~~~~~~~
[docs] def set_objects(self): """sets all individual instances """ for _name, lines_list in self._repr_dic.items(): _instance = Instance(_name, lines_list) _instance.parse() self._repr_dic[_name] = _instance
# ----------------------------------------------------------------------------------------
[docs]class Instance(Singulars): """a firewall instance object Args: Singulars (Singulars): inherits properties/methods for Singulars objects """ def __init__(self, instance_name, instance_config_list): super().__init__(instance_name) self.instance_name = instance_name self._repr_dic['conf_list'] = instance_config_list def __str__(self): return self.str() # ~~~~~~~~~~~~~~~~~~~ EXTERNAL CALLABLES ~~~~~~~~~~~~~~~~~~~
[docs] def str(self): """details of current instance with keys Returns: str: current instance keys """ keys = ",\n".join(self.keys()) instance = f'An Instance on Firewall named:"{self.instance_name}"' return f'{instance}, with keys as\n{keys}'
[docs] def parse(self): """parsing thru instance configuration """ conf_list = self._repr_dic['conf_list'] self['routes'] = get_object(ROUTES, conf_list=conf_list) self['obj_grps'] = get_object(OBJS, conf_list=conf_list) self['acls'] = get_object(ACLS, conf_list=conf_list, objs=self['obj_grps'])
# ----------------------------------------------------------------------------------------