def addRouters(self, *routers: Union[str, Tuple[str, Dict[str, Any]]], **common_opts) -> List['RouterDescription']: """Add several routers in one go. :param routers: router names or tuples (each containing the router name and options only applying to this router) :param common_opts: common router options (optional)""" new_routers = [] for router_info in routers: # Accept either router names or tuple containing both a router name # and the specific options of the router n, opt = router_info if is_container(router_info) \ else (router_info, {}) # Merge router options by giving precedence to specific ones router_opts = { k: v for k, v in itertools.chain(common_opts.items(), opt.items()) } try: new_routers.append(self.addRouter(n, **router_opts)) except Exception as e: lg.error("Cannot create router '{}' with options '{}'".format( n, router_opts)) raise e return new_routers
def __init__(self, code, val): super().__init__(code, val) if self.val is None: pass elif not is_container(self.val): self.val = str(self.val) else: self.val = ','.join(self.val) self.prefix = "-m multiport " self.code = "%ss" % self.code
def __init__(self, prefix=(), valid_lifetime=RA_DEFAULT_VALID, preferred_lifetime=RA_DEFAULT_PREF): """:param prefix: the list of IPv6 prefixes to advertise :param valid_lifetime: corresponds to the AdvValidLifetime in radvd.conf(5) for this prefix :param preferred_lifetime: corresponds to the AdvPreferredLifetime in radvd.conf(5) for this prefix""" super(AdvPrefix, self).__init__() self["prefixes"] = list(prefix) if is_container(prefix) else [prefix] self["valid_lifetime"] = valid_lifetime self["preferred_lifetime"] = preferred_lifetime
def build(self): if self.val is None: yield None else: if not is_container(self.val): self.val = (str(self.val), ) for v in self.val: for val in self.render(v): yield "{prefix}{neg}-{code} {val}".format( prefix=self.prefix, neg='' if not self.negate else '! ', code=self.code if len(self.code.split()[0]) == 1 else "-" + self.code, val=val)