def __init__(self, module): super(Ospfv3, self).__init__( empty_fact_val={}, facts_module=Facts(module), module=module, resource="ospfv3", tmplt=Ospfv3Template(), )
def populate_facts(self, connection, ansible_facts, data=None): """ Populate the facts for ospfv3 :param connection: the device connection :param ansible_facts: Facts dictionary :param data: previously collected conf :rtype: dictionary :returns: facts """ if not data: data = self.get_ospfv3_data(connection) ipv4 = {"processes": []} rmmod = NetworkTemplate(lines=data.splitlines(), tmplt=Ospfv3Template()) current = self.parse(rmmod) address_family = self.parse_for_address_family(current) if address_family: for k, v in iteritems(current["processes"]): temp = address_family.pop(k) v.update({"address_family": temp}) # convert some of the dicts to lists for key, sortv in [("processes", "process_id")]: if key in current and current[key]: current[key] = current[key].values() current[key] = sorted(current[key], key=lambda k, sk=sortv: k[sk]) for process in current.get("processes", []): if "areas" in process: process["areas"] = list(process["areas"].values()) process["areas"] = sorted(process["areas"], key=lambda k, sk="area_id": k[sk]) for area in process["areas"]: if "filters" in area: area["filters"].sort() if "address_family" in process: for each in process["address_family"]: if "areas" in each: each["areas"] = list(each["areas"].values()) each["areas"] = sorted( each["areas"], key=lambda k, sk="area_id": k[sk]) for area in each["areas"]: if "filters" in area: area["filters"].sort() ipv4["processes"].append(process) ansible_facts["ansible_network_resources"].pop("ospfv3", None) facts = {} if current: params = utils.validate_config(self.argument_spec, {"config": ipv4}) params = utils.remove_empties(params) facts["ospfv3"] = params["config"] ansible_facts["ansible_network_resources"].update(facts) return ansible_facts