Ejemplo n.º 1
0
 def __init__(self, module):
     super(Ospfv3, self).__init__(
         empty_fact_val={},
         facts_module=Facts(module),
         module=module,
         resource="ospfv3",
         tmplt=Ospfv3Template(),
     )
Ejemplo n.º 2
0
    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