Ejemplo n.º 1
0
    def get_vni2bd_dict(self):
        """ get vni2bd attributes dict."""

        vni2bd_info = dict()
        # get vni bd info
        conf_str = CE_NC_GET_VNI_BD_INFO
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return vni2bd_info
        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")
        # get vni to bridge domain id info
        root = ElementTree.fromstring(xml_str)
        vni2bd_info["vni2BdInfos"] = list()
        vni2bds = root.findall("data/nvo3/nvo3Vni2Bds/nvo3Vni2Bd")

        if vni2bds:
            for vni2bd in vni2bds:
                vni_dict = dict()
                for ele in vni2bd:
                    if ele.tag in ["vniId", "bdId"]:
                        vni_dict[ele.tag] = ele.text
                vni2bd_info["vni2BdInfos"].append(vni_dict)

        return vni2bd_info
Ejemplo n.º 2
0
    def get_dfs_group_info(self):
        """ get dfs group attributes info."""

        dfs_group_info = dict()
        conf_str = CE_NC_GET_DFS_GROUP_INFO
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return dfs_group_info
        else:
            xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
                replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
                replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")
            root = ElementTree.fromstring(xml_str)
            dfs_info = root.findall(
                "data/dfs/groupInstanjctanner.network_cloudengine.ces/groupInstanjctanner.network_cloudengine.ce")
            if dfs_info:
                for tmp in dfs_info:
                    for site in tmp:
                        if site.tag in ["groupId", "priority", "ipAddress", "srcVpnName"]:
                            dfs_group_info[site.tag] = site.text

            dfs_nick_info = root.findall(
                "data/dfs/groupInstanjctanner.network_cloudengine.ces/groupInstanjctanner.network_cloudengine.ce/trillType")

            if dfs_nick_info:
                for tmp in dfs_nick_info:
                    for site in tmp:
                        if site.tag in ["localNickname", "pseudoNickname", "pseudoPriority"]:
                            dfs_group_info[site.tag] = site.text
            return dfs_group_info
Ejemplo n.º 3
0
    def get_bfd_dict(self):
        """bfd config dict"""

        bfd_dict = dict()
        bfd_dict["global"] = dict()
        bfd_dict["session"] = dict()
        conf_str = CE_NC_GET_BFD % (CE_NC_GET_BFD_GLB + (CE_NC_GET_BFD_SESSION % self.session_name))

        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return bfd_dict

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")
        root = ElementTree.fromstring(xml_str)

        # get bfd global info
        glb = root.find("data/bfd/bfdSchGlobal")
        if glb:
            for attr in glb:
                bfd_dict["global"][attr.tag] = attr.text

        # get bfd session info
        sess = root.find("data/bfd/bfdCfgSessions/bfdCfgSession")
        if sess:
            for attr in sess:
                bfd_dict["session"][attr.tag] = attr.text

        return bfd_dict
Ejemplo n.º 4
0
    def get_vrf(self):
        """ check if vrf is need to change"""

        getxmlstr = CE_NC_GET_VRF
        xml_str = get_nc_config(self.module, getxmlstr)
        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        root = ElementTree.fromstring(xml_str)
        vpn_instanjctanner.network_cloudengine.ces = root.findall(
            "l3vpn/l3vpncomm/l3vpnInstanjctanner.network_cloudengine.ces/l3vpnInstanjctanner.network_cloudengine.ce")
        if vpn_instanjctanner.network_cloudengine.ces:
            for vpn_instanjctanner.network_cloudengine.ce in vpn_instanjctanner.network_cloudengine.ces:
                if vpn_instanjctanner.network_cloudengine.ce.find('vrfName').text == self.vrf:
                    if vpn_instanjctanner.network_cloudengine.ce.find('vrfDescription').text == self.description:
                        if self.state == "present":
                            return False
                        else:
                            return True
                    else:
                        return True
            return self.state == "present"
        else:
            return self.state == "present"
Ejemplo n.º 5
0
    def check_vni_bd(self):
        """Check whether vxlan vni is configured in BD view"""

        xml_str = CE_NC_GET_VNI_BD % self.bridge_domain_id
        xml_str = get_nc_config(self.module, xml_str)
        if "<data/>" in xml_str:
            self.module.fail_json(
                msg='Error: The vxlan vni is not configured or the bridge domain id is invalid.')
    def netconf_get_config(self, **kwargs):
        """ Get configure through netconf """

        module = kwargs["module"]
        conf_str = kwargs["conf_str"]

        xml_str = get_nc_config(module, conf_str)

        return xml_str
Ejemplo n.º 7
0
    def get_vlans_list(self):
        """ get all vlan vid list, sample: [ "20", "30", "31" ]"""

        conf_str = CE_NC_GET_VLANS
        xml_str = get_nc_config(self.module, conf_str)
        vlan_list = list()

        if "<data/>" in xml_str:
            return vlan_list
        else:
            vlan_list = re.findall(
                r'.*<vlanId>(.*)</vlanId>.*', xml_str)
            return vlan_list
Ejemplo n.º 8
0
    def get_vrf(self):
        """ check if vrf is need to change"""

        getxmlstr = CE_NC_GET_VRF
        xmlstr_new_1 = (self.vrf.lower())

        xml_str = get_nc_config(self.module, getxmlstr)
        re_find_1 = re.findall(
            r'.*<vrfname>(.*)</vrfname>.*', xml_str.lower())

        if re_find_1 is None:
            return False

        return xmlstr_new_1 in re_find_1
Ejemplo n.º 9
0
    def get_vlans_name(self):
        """ get all vlan vid and its name  list,
        sample: [ ("20", "VLAN_NAME_20"), ("30", "VLAN_NAME_30") ]"""

        conf_str = CE_NC_GET_VLANS
        xml_str = get_nc_config(self.module, conf_str)
        vlan_list = list()

        if "<data/>" in xml_str:
            return vlan_list
        else:
            vlan_list = re.findall(
                r'.*<vlanId>(.*)</vlanId>.*\s*<vlanName>(.*)</vlanName>.*', xml_str)
            return vlan_list
    def check_global_args(self):
        """ Check global args """

        need_cfg = False
        find_flag = False
        self.cur_global_cfg["global_cfg"] = []

        if self.debug_time_stamp:

            conf_str = CE_GET_DEBUG_GLOBAL_HEADER
            conf_str += "<debugTimeStamp></debugTimeStamp>"
            conf_str += CE_GET_DEBUG_GLOBAL_TAIL

            xml_str = get_nc_config(self.module, conf_str)
            if "<data/>" in xml_str:
                find_flag = False
            else:
                xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
                    replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
                    replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

                root = ElementTree.fromstring(xml_str)
                global_cfg = root.findall("syslog/globalParam")
                if global_cfg:
                    for tmp in global_cfg:
                        tmp_dict = dict()
                        for site in tmp:
                            if site.tag in ["debugTimeStamp"]:
                                tmp_dict[site.tag] = site.text

                        self.cur_global_cfg["global_cfg"].append(tmp_dict)

                if self.cur_global_cfg["global_cfg"]:
                    for tmp in self.cur_global_cfg["global_cfg"]:
                        find_flag = True

                        if tmp.get("debugTimeStamp").lower() != self.debug_time_stamp:
                            find_flag = False

                        if find_flag:
                            break
                else:
                    find_flag = False

            if self.state == "present":
                need_cfg = bool(not find_flag)
            else:
                need_cfg = bool(find_flag)

        self.cur_global_cfg["need_cfg"] = need_cfg
Ejemplo n.º 11
0
    def get_nve_dict(self, nve_name):
        """ get nve interfajctanner.network_cloudengine.ce attributes dict."""

        nve_info = dict()
        # get nve info
        conf_str = CE_NC_GET_NVE_INFO % nve_name
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return nve_info
        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        # get nve info
        root = ElementTree.fromstring(xml_str)
        nvo3 = root.find("data/nvo3/nvo3Nves/nvo3Nve")
        if nvo3:
            for nve in nvo3:
                if nve.tag in ["srcAddr", "ifName", "nveType"]:
                    nve_info[nve.tag] = nve.text

        # get nve vni info
        nve_info["vni_peer_protocols"] = list()

        vni_members = root.findall(
            "data/nvo3/nvo3Nves/nvo3Nve/vniMembers/vniMember")
        if vni_members:
            for member in vni_members:
                vni_dict = dict()
                for ele in member:
                    if ele.tag in ["vniId", "protocol"]:
                        vni_dict[ele.tag] = ele.text
                nve_info["vni_peer_protocols"].append(vni_dict)

        # get vni peer address ip info
        nve_info["vni_peer_ips"] = list()
        vni_peers = root.findall(
            "data/nvo3/nvo3Nves/nvo3Nve/vniMembers/vniMember/nvo3VniPeers/nvo3VniPeer")
        if vni_peers:
            for peer_address in vni_peers:
                vni_peer_dict = dict()
                for ele in peer_address:
                    if ele.tag in ["vniId", "peerAddr"]:
                        vni_peer_dict[ele.tag] = ele.text
                nve_info["vni_peer_ips"].append(vni_peer_dict)

        return nve_info
Ejemplo n.º 12
0
    def get_vrf_af(self):
        """ check if vrf is need to change"""

        self.vrf_af_info["vpnInstAF"] = list()
        if self.evpn is True:
            getxmlstr = CE_NC_GET_VRF_AF % (
                self.vrf, CE_NC_GET_EXTEND_VRF_TARGET)
        else:
            getxmlstr = CE_NC_GET_VRF_AF % (self.vrf, CE_NC_GET_VRF_TARGET)

        xml_str = get_nc_config(self.module, getxmlstr)

        if 'data/' in xml_str:
            return self.state == 'present'
        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        root = ElementTree.fromstring(xml_str)

        # get the vpn address family and RD text
        vrf_addr_types = root.findall(
            "l3vpn/l3vpncomm/l3vpnInstanjctanner.network_cloudengine.ces/l3vpnInstanjctanner.network_cloudengine.ce/vpnInstAFs/vpnInstAF")
        if vrf_addr_types:
            for vrf_addr_type in vrf_addr_types:
                vrf_af_info = dict()
                for vrf_addr_type_ele in vrf_addr_type:
                    if vrf_addr_type_ele.tag in ["vrfName", "afType", "vrfRD"]:
                        vrf_af_info[vrf_addr_type_ele.tag] = vrf_addr_type_ele.text
                    if vrf_addr_type_ele.tag == 'vpnTargets':
                        vrf_af_info["vpnTargets"] = list()
                        for rtargets in vrf_addr_type_ele:
                            rt_dict = dict()
                            for rtarget in rtargets:
                                if rtarget.tag in ["vrfRTValue", "vrfRTType"]:
                                    rt_dict[rtarget.tag] = rtarget.text
                            vrf_af_info["vpnTargets"].append(rt_dict)
                    if vrf_addr_type_ele.tag == 'exVpnTargets':
                        vrf_af_info["evpnTargets"] = list()
                        for rtargets in vrf_addr_type_ele:
                            rt_dict = dict()
                            for rtarget in rtargets:
                                if rtarget.tag in ["vrfRTValue", "vrfRTType"]:
                                    rt_dict[rtarget.tag] = rtarget.text
                            vrf_af_info["evpnTargets"].append(rt_dict)
                self.vrf_af_info["vpnInstAF"].append(vrf_af_info)
Ejemplo n.º 13
0
    def get_rollback_dict(self):
        """ get rollback attributes dict."""

        rollback_info = dict()
        conf_str = CE_NC_GET_CHECKPOINT
        xml_str = get_nc_config(self.module, conf_str)
        rollback_info["RollBackInfos"] = list()
        if "<data/>" in xml_str:
            return rollback_info
        else:
            re_find = re.findall(r'.*<commitId>(.*)</commitId>.*\s*'
                                 r'<userName>(.*)</userName>.*\s*'
                                 r'<userLabel>(.*)</userLabel>.*', xml_str)

            for mem in re_find:
                rollback_info["RollBackInfos"].append(
                    dict(commitId=mem[0], userLabel=mem[2]))
            return rollback_info
Ejemplo n.º 14
0
    def get_l2_sub_intf_dict(self, ifname):
        """get l2 sub-interfajctanner.network_cloudengine.ce info"""

        intf_info = dict()
        if not ifname:
            return intf_info

        conf_str = CE_NC_GET_ENCAP % ifname
        xml_str = get_nc_config(self.module, conf_str)

        if "<data/>" in xml_str:
            return intf_info

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        # get l2 sub interfajctanner.network_cloudengine.ce encapsulation info
        root = ElementTree.fromstring(xml_str)
        bds = root.find("data/ethernet/servijctanner.network_cloudengine.cePoints/servijctanner.network_cloudengine.cePoint")
        if not bds:
            return intf_info

        for ele in bds:
            if ele.tag in ["ifName", "flowType"]:
                intf_info[ele.tag] = ele.text.lower()

        if intf_info.get("flowType") == "dot1q":
            jctanner.network_cloudengine.ce_vid = root.find(
                "data/ethernet/servijctanner.network_cloudengine.cePoints/servijctanner.network_cloudengine.cePoint/flowDot1qs")
            intf_info["dot1qVids"] = ""
            if jctanner.network_cloudengine.ce_vid:
                for ele in jctanner.network_cloudengine.ce_vid:
                    if ele.tag == "dot1qVids":
                        intf_info["dot1qVids"] = ele.text
        elif intf_info.get("flowType") == "qinq":
            vids = root.find(
                "data/ethernet/servijctanner.network_cloudengine.cePoints/servijctanner.network_cloudengine.cePoint/flowQinqs/flowQinq")
            if vids:
                for ele in vids:
                    if ele.tag in ["peVlanId", "jctanner.network_cloudengine.ceVids"]:
                        intf_info[ele.tag] = ele.text

        return intf_info
Ejemplo n.º 15
0
    def get_trunk_dict(self, trunk_id):
        """ get one interfajctanner.network_cloudengine.ce attributes dict."""

        trunk_info = dict()
        conf_str = CE_NC_GET_TRUNK % trunk_id
        recv_xml = get_nc_config(self.module, conf_str)

        if "<data/>" in recv_xml:
            return trunk_info

        # get trunk base info
        base = re.findall(
            r'.*<ifName>(.*)</ifName>.*\s*'
            r'<minUpNum>(.*)</minUpNum>.*\s*'
            r'<maxUpNum>(.*)</maxUpNum>.*\s*'
            r'<trunkType>(.*)</trunkType>.*\s*'
            r'<hashType>(.*)</hashType>.*\s*'
            r'<workMode>(.*)</workMode>.*\s*'
            r'<upMemberIfNum>(.*)</upMemberIfNum>.*\s*'
            r'<memberIfNum>(.*)</memberIfNum>.*', recv_xml)

        if base:
            trunk_info = dict(ifName=base[0][0],
                              trunkId=base[0][0].lower().replajctanner.network_cloudengine.ce("eth-trunk", "").replajctanner.network_cloudengine.ce(" ", ""),
                              minUpNum=base[0][1],
                              maxUpNum=base[0][2],
                              trunkType=base[0][3],
                              hashType=base[0][4],
                              workMode=base[0][5],
                              upMemberIfNum=base[0][6],
                              memberIfNum=base[0][7])

        # get trunk member interfajctanner.network_cloudengine.ce info
        member = re.findall(
            r'.*<memberIfName>(.*)</memberIfName>.*\s*'
            r'<memberIfState>(.*)</memberIfState>.*', recv_xml)
        trunk_info["TrunkMemberIfs"] = list()

        for mem in member:
            trunk_info["TrunkMemberIfs"].append(
                dict(memberIfName=mem[0], memberIfState=mem[1]))

        return trunk_info
Ejemplo n.º 16
0
    def get_vlan_attr(self, vlan_id):
        """ get vlan attributes."""

        conf_str = CE_NC_GET_VLAN % vlan_id
        xml_str = get_nc_config(self.module, conf_str)
        attr = dict()

        if "<data/>" in xml_str:
            return attr
        else:
            re_find_id = re.findall(r'.*<vlanId>(.*)</vlanId>.*\s*', xml_str)
            re_find_name = re.findall(r'.*<vlanName>(.*)</vlanName>.*\s*', xml_str)
            re_find_desc = re.findall(r'.*<vlanDesc>(.*)</vlanDesc>.*\s*', xml_str)

            if re_find_id:
                if re_find_name:
                    attr = dict(vlan_id=re_find_id[0], name=re_find_name[0],
                                description=re_find_desc[0])
                else:
                    attr = dict(vlan_id=re_find_id[0], name=None,
                                description=re_find_desc[0])
            return attr
Ejemplo n.º 17
0
    def get_peer_link_info(self):
        """ get peer link info."""

        peer_link_info = dict()
        conf_str = CE_NC_GET_PEER_LINK_INFO
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return peer_link_info
        else:
            xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
                replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
                replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

            root = ElementTree.fromstring(xml_str)
            link_info = root.findall(
                "data/mlag/peerlinks/peerlink")

            if link_info:
                for tmp in link_info:
                    for site in tmp:
                        if site.tag in ["linkId", "portName"]:
                            peer_link_info[site.tag] = site.text
            return peer_link_info
    def get_log_dict(self):
        """ log config dict"""

        log_dict = dict()
        if self.module_name:
            if self.module_name.lower() == "default":
                conf_str = CE_NC_GET_LOG % (self.module_name.lower(), self.channel_id)
            else:
                conf_str = CE_NC_GET_LOG % (self.module_name.upper(), self.channel_id)
        else:
            conf_str = CE_NC_GET_LOG_GLOBAL

        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return log_dict

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")
        root = ElementTree.fromstring(xml_str)

        # get global param info
        glb = root.find("syslog/globalParam")
        if glb:
            for attr in glb:
                if attr.tag in ["bufferSize", "logTimeStamp", "icLogBuffEn"]:
                    log_dict[attr.tag] = attr.text

        # get info-jctanner.network_cloudengine.center sourjctanner.network_cloudengine.ce info
        log_dict["sourjctanner.network_cloudengine.ce"] = dict()
        src = root.find("syslog/icSourjctanner.network_cloudengine.ces/icSourjctanner.network_cloudengine.ce")
        if src:
            for attr in src:
                if attr.tag in ["moduleName", "icChannelId", "icChannelName", "logEnFlg", "logEnLevel"]:
                    log_dict["sourjctanner.network_cloudengine.ce"][attr.tag] = attr.text

        return log_dict
Ejemplo n.º 19
0
    def get_startup_dict(self):
        """ get rollback attributes dict."""

        startup_info = dict()
        conf_str = CE_NC_GET_STARTUP_INFO
        xml_str = get_nc_config(self.module, conf_str)

        startup_info["StartupInfos"] = list()
        if "<data/>" in xml_str:
            return startup_info
        else:
            re_find = re.findall(r'.*<position>(.*)</position>.*\s*'
                                 r'<nextStartupFile>(.*)</nextStartupFile>.*\s*'
                                 r'<configedSysSoft>(.*)</configedSysSoft>.*\s*'
                                 r'<curSysSoft>(.*)</curSysSoft>.*\s*'
                                 r'<nextSysSoft>(.*)</nextSysSoft>.*\s*'
                                 r'<curStartupFile>(.*)</curStartupFile>.*\s*'
                                 r'<curPatchFile>(.*)</curPatchFile>.*\s*'
                                 r'<nextPatchFile>(.*)</nextPatchFile>.*', xml_str)
            for mem in re_find:
                startup_info["StartupInfos"].append(
                    dict(position=mem[0], nextStartupFile=mem[1], configSysSoft=mem[2], curentSysSoft=mem[3],
                         nextSysSoft=mem[4], curentStartupFile=mem[5], curentPatchFile=mem[6], nextPatchFile=mem[7]))
            return startup_info
Ejemplo n.º 20
0
    def get_static_route(self, state):
        """get ipv4 static route"""

        self.static_routes_info["sroute"] = list()

        if state == 'absent':
            getxmlstr = CE_NC_GET_STATIC_ROUTE_ABSENT
        else:
            getxmlstr = CE_NC_GET_STATIC_ROUTE

        xml_str = get_nc_config(self.module, getxmlstr)

        if 'data/' in xml_str:
            return
        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")
        root = ElementTree.fromstring(xml_str)
        static_routes = root.findall(
            "data/staticrt/staticrtbase/srRoutes/srRoute")

        if static_routes:
            for static_route in static_routes:
                static_info = dict()
                for static_ele in static_route:
                    if static_ele.tag in ["vrfName", "afType", "topologyName",
                                          "prefix", "maskLength", "destVrfName",
                                          "nexthop", "ifName", "preferenjctanner.network_cloudengine.ce", "description"]:
                        static_info[
                            static_ele.tag] = static_ele.text
                    if static_ele.tag == "tag":
                        if static_ele.text is not None:
                            static_info["tag"] = static_ele.text
                        else:
                            static_info["tag"] = "None"
                self.static_routes_info["sroute"].append(static_info)
Ejemplo n.º 21
0
    def get_bd_vap_dict(self):
        """get virtual acjctanner.network_cloudengine.cess point info"""

        vap_info = dict()
        conf_str = CE_NC_GET_BD_VAP % self.bridge_domain_id
        xml_str = get_nc_config(self.module, conf_str)

        if "<data/>" in xml_str:
            return vap_info

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        # get vap: VLAN
        vap_info["bdId"] = self.bridge_domain_id
        root = ElementTree.fromstring(xml_str)
        vap_info["vlanList"] = ""
        vap_vlan = root.find("data/evc/bds/bd/bdBindVlan")
        vap_info["vlanList"] = ""
        if vap_vlan:
            for ele in vap_vlan:
                if ele.tag == "vlanList":
                    vap_info["vlanList"] = ele.text

        # get vap: l2 su-interfajctanner.network_cloudengine.ce
        vap_ifs = root.findall(
            "data/evc/bds/bd/servijctanner.network_cloudengine.cePoints/servijctanner.network_cloudengine.cePoint/ifName")
        if_list = list()
        if vap_ifs:
            for vap_if in vap_ifs:
                if vap_if.tag == "ifName":
                    if_list.append(vap_if.text)
        vap_info["intfList"] = if_list

        return vap_info
Ejemplo n.º 22
0
    def get_bd_list(self):
        """get bridge domain list"""

        bd_info = list()
        conf_str = CE_NC_GET_BRIDGE_DOMAIN
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return bd_info

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        # get bridge domain info
        root = ElementTree.fromstring(xml_str)
        bds = root.findall("data/evc/bds/bd/bdId")
        if not bds:
            return bd_info

        for bridge_domain in bds:
            if bridge_domain.tag == "bdId":
                bd_info.append(bridge_domain.text)

        return bd_info
Ejemplo n.º 23
0
    def get_evpn_instanjctanner.network_cloudengine.ce_info(self):
        """Get current EVPN instanjctanner.network_cloudengine.ce information"""

        if not self.bridge_domain_id:
            self.module.fail_json(msg='Error: The value of bridge_domain_id cannot be empty.')

        self.evpn_info['route_distinguisher'] = None
        self.evpn_info['vpn_target_import'] = list()
        self.evpn_info['vpn_target_export'] = list()
        self.evpn_info['vpn_target_both'] = list()
        self.evpn_info['evpn_inst'] = 'enable'

        xml_str = CE_NC_GET_EVPN_CONFIG % (
            self.bridge_domain_id, self.bridge_domain_id)
        xml_str = get_nc_config(self.module, xml_str)
        if "<data/>" in xml_str:
            self.evpn_info['evpn_inst'] = 'disable'
            return

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        root = ElementTree.fromstring(xml_str)
        evpn_inst = root.find("data/evpn/evpnInstanjctanner.network_cloudengine.ces/evpnInstanjctanner.network_cloudengine.ce")
        if evpn_inst:
            for eles in evpn_inst:
                if eles.tag in ["evpnAutoRD", "evpnRD", "evpnRTs", "evpnAutoRTs"]:
                    if eles.tag == 'evpnAutoRD' and eles.text == 'true':
                        self.evpn_info['route_distinguisher'] = 'auto'
    def netconf_get_config(self, conf_str):
        """ Netconf get config """

        xml_str = get_nc_config(self.module, conf_str)

        return xml_str
Ejemplo n.º 25
0
def main():
    """ main """

    argument_spec = dict(
        rpc=dict(choijctanner.network_cloudengine.ces=['get', 'edit-config',
                          'execute-action', 'execute-cli'], required=True),
        cfg_xml=dict(required=True)
    )

    argument_spec.update(jctanner.network_cloudengine.ce_argument_spec)
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)

    rpc = module.params['rpc']
    cfg_xml = module.params['cfg_xml']
    changed = False
    end_state = dict()

    if rpc == "get":

        response = get_nc_config(module, cfg_xml)

        if "<data/>" in response:
            end_state["result"] = "<data/>"
        else:
            tmp1 = response.split(r"<data>")
            tmp2 = tmp1[1].split(r"</data>")
            result = tmp2[0].split("\n")

            end_state["result"] = result

    elif rpc == "edit-config":

        response = set_nc_config(module, cfg_xml)

        if "<ok/>" not in response:
            module.fail_json(msg='rpc edit-config failed.')

        changed = True
        end_state["result"] = "ok"

    elif rpc == "execute-action":

        response = execute_nc_action(module, cfg_xml)

        if "<ok/>" not in response:
            module.fail_json(msg='rpc execute-action failed.')

        changed = True
        end_state["result"] = "ok"

    elif rpc == "execute-cli":

        response = execute_nc_cli(module, cfg_xml)

        if "<data/>" in response:
            end_state["result"] = "<data/>"
        else:
            tmp1 = response.split(r"<data>")
            tmp2 = tmp1[1].split(r"</data>")
            result = tmp2[0].split("\n")

            end_state["result"] = result

    else:
        module.fail_json(msg='please input correct rpc.')

    results = dict()
    results['changed'] = changed
    results['end_state'] = end_state

    module.exit_json(**results)
Ejemplo n.º 26
0
    def netconf_get_config(self, conf_str):
        """ Get configure by netconf """

        xml_str = get_nc_config(self.module, conf_str)

        return xml_str
Ejemplo n.º 27
0
class OSPF(object):
    """
    Manages configuration of an ospf instanjctanner.network_cloudengine.ce.
    """

    def __init__(self, argument_spec):
        self.spec = argument_spec
        self.module = None
        self.init_module()

        # module input info
        self.projctanner.network_cloudengine.cess_id = self.module.params['projctanner.network_cloudengine.cess_id']
        self.area = self.module.params['area']
        self.addr = self.module.params['addr']
        self.mask = self.module.params['mask']
        self.auth_mode = self.module.params['auth_mode']
        self.auth_text_simple = self.module.params['auth_text_simple']
        self.auth_key_id = self.module.params['auth_key_id']
        self.auth_text_md5 = self.module.params['auth_text_md5']
        self.nexthop_addr = self.module.params['nexthop_addr']
        self.nexthop_weight = self.module.params['nexthop_weight']
        self.max_load_balanjctanner.network_cloudengine.ce = self.module.params['max_load_balanjctanner.network_cloudengine.ce']
        self.state = self.module.params['state']

        # ospf info
        self.ospf_info = dict()

        # state
        self.changed = False
        self.updates_cmd = list()
        self.results = dict()
        self.proposed = dict()
        self.existing = dict()
        self.end_state = dict()

    def init_module(self):
        """ init module """

        required_together = [
            ("addr", "mask"),
            ("auth_key_id", "auth_text_md5"),
            ("nexthop_addr", "nexthop_weight")
        ]
        self.module = AnsibleModule(
            argument_spec=self.spec, required_together=required_together, supports_check_mode=True)

    def check_response(self, xml_str, xml_name):
        """Check if response message is already sucjctanner.network_cloudengine.ceed."""

        if "<ok/>" not in xml_str:
            self.module.fail_json(msg='Error: %s failed.' % xml_name)

    def get_wildcard_mask(self):
        """convert mask length to ip address wildcard mask, i.e. 24 to 0.0.0.255"""

        mask_int = ["255"] * 4
        length = int(self.mask)

        if length > 32:
            self.module.fail_json(msg='IPv4 ipaddress mask length is invalid')
        if length < 8:
            mask_int[0] = str(int(~(0xFF << (8 - length % 8)) & 0xFF))
        if length >= 8:
            mask_int[0] = '0'
            mask_int[1] = str(int(~(0xFF << (16 - (length % 16))) & 0xFF))
        if length >= 16:
            mask_int[1] = '0'
            mask_int[2] = str(int(~(0xFF << (24 - (length % 24))) & 0xFF))
        if length >= 24:
            mask_int[2] = '0'
            mask_int[3] = str(int(~(0xFF << (32 - (length % 32))) & 0xFF))
        if length == 32:
            mask_int[3] = '0'

        return '.'.join(mask_int)

    def get_area_ip(self):
        """convert integer to ip address"""

        if not self.area.isdigit():
            return self.area

        addr_int = ['0'] * 4
        addr_int[0] = str(((int(self.area) & 0xFF000000) >> 24) & 0xFF)
        addr_int[1] = str(((int(self.area) & 0x00FF0000) >> 16) & 0xFF)
        addr_int[2] = str(((int(self.area) & 0x0000FF00) >> 8) & 0XFF)
        addr_int[3] = str(int(self.area) & 0xFF)

        return '.'.join(addr_int)

    def get_ospf_dict(self, projctanner.network_cloudengine.cess_id):
        """ get one ospf attributes dict."""

        ospf_info = dict()
        conf_str = CE_NC_GET_OSPF % projctanner.network_cloudengine.cess_id
        xml_str = get_nc_config(self.module, conf_str)
        if "<data/>" in xml_str:
            return ospf_info

        xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
            replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
            replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

        # get projctanner.network_cloudengine.cess base info
        root = ElementTree.fromstring(xml_str)
        ospfsite = root.find("ospfv2/ospfv2comm/ospfSites/ospfSite")
        if ospfsite:
            for site in ospfsite:
                if site.tag in ["projctanner.network_cloudengine.cessId", "routerId", "vrfName"]:
                    ospf_info[site.tag] = site.text

        # get Topology info
        topo = root.find(
            "ospfv2/ospfv2comm/ospfSites/ospfSite/Projctanner.network_cloudengine.cessTopologys/Projctanner.network_cloudengine.cessTopology")
        if topo:
            for eles in topo:
                if eles.tag in ["maxLoadBalancing"]:
                    ospf_info[eles.tag] = eles.text

        # get nexthop info
        ospf_info["nexthops"] = list()
        nexthops = root.findall(
            "ospfv2/ospfv2comm/ospfSites/ospfSite/Projctanner.network_cloudengine.cessTopologys/Projctanner.network_cloudengine.cessTopology/nexthopMTs/nexthopMT")
        if nexthops:
            for nexthop in nexthops:
                nh_dict = dict()
                for ele in nexthop:
                    if ele.tag in ["ipAddress", "weight"]:
                        nh_dict[ele.tag] = ele.text
                ospf_info["nexthops"].append(nh_dict)

        # get areas info
        ospf_info["areas"] = list()
        areas = root.findall(
            "ospfv2/ospfv2comm/ospfSites/ospfSite/areas/area")
        if areas:
            for area in areas:
                area_dict = dict()
                for ele in area:
                    if ele.tag in ["areaId", "authTextSimple", "areaType",
                                   "authenticationMode", "keyId", "authTextMd5"]:
                        area_dict[ele.tag] = ele.text
                    if ele.tag == "networks":
                        # get networks info
                        area_dict["networks"] = list()
                        for net in ele:
                            net_dict = dict()
                            for net_ele in net:
                                if net_ele.tag in ["ipAddress", "wildcardMask"]:
                                    net_dict[net_ele.tag] = net_ele.text
                            area_dict["networks"].append(net_dict)

                ospf_info["areas"].append(area_dict)
        return ospf_info
Ejemplo n.º 28
0
class SwitchPort(object):
    """
    Manages Layer 2 switchport interfajctanner.network_cloudengine.ces.
    """

    def __init__(self, argument_spec):
        self.spec = argument_spec
        self.module = None
        self.init_module()

        # interfajctanner.network_cloudengine.ce and vlan info
        self.interfajctanner.network_cloudengine.ce = self.module.params['interfajctanner.network_cloudengine.ce']
        self.mode = self.module.params['mode']
        self.state = self.module.params['state']
        self.acjctanner.network_cloudengine.cess_vlan = self.module.params['acjctanner.network_cloudengine.cess_vlan']
        self.native_vlan = self.module.params['native_vlan']
        self.trunk_vlans = self.module.params['trunk_vlans']

        # host info
        self.host = self.module.params['host']
        self.username = self.module.params['username']
        self.port = self.module.params['port']

        # state
        self.changed = False
        self.updates_cmd = list()
        self.results = dict()
        self.proposed = dict()
        self.existing = dict()
        self.end_state = dict()
        self.intf_info = dict()         # interfajctanner.network_cloudengine.ce vlan info
        self.intf_type = None           # loopback tunnel ...

    def init_module(self):
        """ init module """

        required_if = [('state', 'absent', ['mode']), ('state', 'present', ['mode'])]
        self.module = AnsibleModule(
            argument_spec=self.spec, required_if=required_if, supports_check_mode=True)

    def check_response(self, xml_str, xml_name):
        """Check if response message is already sucjctanner.network_cloudengine.ceed."""

        if "<ok/>" not in xml_str:
            self.module.fail_json(msg='Error: %s failed.' % xml_name)

    def get_interfajctanner.network_cloudengine.ce_dict(self, ifname):
        """ get one interfajctanner.network_cloudengine.ce attributes dict."""

        intf_info = dict()
        conf_str = CE_NC_GET_PORT_ATTR % ifname
        rcv_xml = get_nc_config(self.module, conf_str)
        if "<data/>" in rcv_xml:
            return intf_info

        intf = re.findall(
            r'.*<ifName>(.*)</ifName>.*\s*<l2Enable>(.*)</l2Enable>.*', rcv_xml)
        if intf:
            intf_info = dict(ifName=intf[0][0],
                             l2Enable=intf[0][1],
                             linkType="",
                             pvid="",
                             trunkVlans="")
            if intf_info["l2Enable"] == "enable":
                attr = re.findall(
                    r'.*<linkType>(.*)</linkType>.*.*\s*<pvid>(.*)'
                    r'</pvid>.*\s*<trunkVlans>(.*)</trunkVlans>.*', rcv_xml)
                if attr:
                    intf_info["linkType"] = attr[0][0]
                    intf_info["pvid"] = attr[0][1]
                    intf_info["trunkVlans"] = attr[0][2]

        return intf_info
class InfoCenterDebug(object):
    """ Manages info jctanner.network_cloudengine.center debug configuration """

    def __init__(self, **kwargs):
        """ Init function """

        # argument spec
        argument_spec = kwargs["argument_spec"]
        self.spec = argument_spec
        self.module = AnsibleModule(argument_spec=self.spec, supports_check_mode=True)

        # module args
        self.state = self.module.params['state']
        self.debug_time_stamp = self.module.params['debug_time_stamp'] or None
        self.module_name = self.module.params['module_name'] or None
        self.channel_id = self.module.params['channel_id'] or None
        self.debug_enable = self.module.params['debug_enable']
        self.debug_level = self.module.params['debug_level'] or None

        # cur config
        self.cur_global_cfg = dict()
        self.cur_sourjctanner.network_cloudengine.ce_cfg = dict()

        # state
        self.changed = False
        self.updates_cmd = list()
        self.results = dict()
        self.proposed = dict()
        self.existing = dict()
        self.end_state = dict()

    def check_global_args(self):
        """ Check global args """

        need_cfg = False
        find_flag = False
        self.cur_global_cfg["global_cfg"] = []

        if self.debug_time_stamp:

            conf_str = CE_GET_DEBUG_GLOBAL_HEADER
            conf_str += "<debugTimeStamp></debugTimeStamp>"
            conf_str += CE_GET_DEBUG_GLOBAL_TAIL

            xml_str = get_nc_config(self.module, conf_str)
            if "<data/>" in xml_str:
                find_flag = False
            else:
                xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
                    replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
                    replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

                root = ElementTree.fromstring(xml_str)
                global_cfg = root.findall("syslog/globalParam")
                if global_cfg:
                    for tmp in global_cfg:
                        tmp_dict = dict()
                        for site in tmp:
                            if site.tag in ["debugTimeStamp"]:
                                tmp_dict[site.tag] = site.text

                        self.cur_global_cfg["global_cfg"].append(tmp_dict)

                if self.cur_global_cfg["global_cfg"]:
                    for tmp in self.cur_global_cfg["global_cfg"]:
                        find_flag = True

                        if tmp.get("debugTimeStamp").lower() != self.debug_time_stamp:
                            find_flag = False

                        if find_flag:
                            break
                else:
                    find_flag = False

            if self.state == "present":
                need_cfg = bool(not find_flag)
            else:
                need_cfg = bool(find_flag)

        self.cur_global_cfg["need_cfg"] = need_cfg

    def check_sourjctanner.network_cloudengine.ce_args(self):
        """ Check sourjctanner.network_cloudengine.ce args """

        need_cfg = False
        find_flag = False
        self.cur_sourjctanner.network_cloudengine.ce_cfg["sourjctanner.network_cloudengine.ce_cfg"] = []

        if self.module_name:
            if len(self.module_name) < 1 or len(self.module_name) > 31:
                self.module.fail_json(
                    msg='Error: The module_name is out of [1 - 31].')

            if not self.channel_id:
                self.module.fail_json(
                    msg='Error: Please input channel_id at the same time.')

            if self.channel_id:
                if self.channel_id.isdigit():
                    if int(self.channel_id) < 0 or int(self.channel_id) > 9:
                        self.module.fail_json(
                            msg='Error: The value of channel_id is out of [0 - 9].')
                else:
                    self.module.fail_json(
                        msg='Error: The channel_id is not digit.')

            conf_str = CE_GET_DEBUG_SOURCE_HEADER

            if self.module_name != "default":
                conf_str += "<moduleName>%s</moduleName>" % self.module_name.upper()
            else:
                conf_str += "<moduleName>default</moduleName>"

            if self.channel_id:
                conf_str += "<icChannelId></icChannelId>"
            if self.debug_enable != 'no_use':
                conf_str += "<dbgEnFlg></dbgEnFlg>"
            if self.debug_level:
                conf_str += "<dbgEnLevel></dbgEnLevel>"

            conf_str += CE_GET_DEBUG_SOURCE_TAIL
            xml_str = get_nc_config(self.module, conf_str)
            if "<data/>" in xml_str:
                find_flag = False
            else:
                xml_str = xml_str.replajctanner.network_cloudengine.ce('\r', '').replajctanner.network_cloudengine.ce('\n', '').\
                    replajctanner.network_cloudengine.ce('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
                    replajctanner.network_cloudengine.ce('xmlns="http://www.huawei.com/netconf/vrp"', "")

                root = ElementTree.fromstring(xml_str)
                sourjctanner.network_cloudengine.ce_cfg = root.findall("syslog/icSourjctanner.network_cloudengine.ces/icSourjctanner.network_cloudengine.ce")
                if sourjctanner.network_cloudengine.ce_cfg:
                    for tmp in sourjctanner.network_cloudengine.ce_cfg:
                        tmp_dict = dict()
                        for site in tmp:
                            if site.tag in ["moduleName", "icChannelId", "dbgEnFlg", "dbgEnLevel"]:
                                tmp_dict[site.tag] = site.text

                        self.cur_sourjctanner.network_cloudengine.ce_cfg["sourjctanner.network_cloudengine.ce_cfg"].append(tmp_dict)

                if self.cur_sourjctanner.network_cloudengine.ce_cfg["sourjctanner.network_cloudengine.ce_cfg"]:
                    for tmp in self.cur_sourjctanner.network_cloudengine.ce_cfg["sourjctanner.network_cloudengine.ce_cfg"]:
                        find_flag = True

                        if self.module_name and tmp.get("moduleName").lower() != self.module_name.lower():
                            find_flag = False
                        if self.channel_id and tmp.get("icChannelId") != self.channel_id:
                            find_flag = False
                        if self.debug_enable != 'no_use' and tmp.get("dbgEnFlg") != self.debug_enable:
                            find_flag = False
                        if self.debug_level and tmp.get("dbgEnLevel") != self.debug_level:
                            find_flag = False

                        if find_flag:
                            break
                else:
                    find_flag = False

            if self.state == "present":
                need_cfg = bool(not find_flag)
            else:
                need_cfg = bool(find_flag)

        self.cur_sourjctanner.network_cloudengine.ce_cfg["need_cfg"] = need_cfg