예제 #1
0
def apply_desired_state(apic1, desired):

    cfgRequest = aciRequest.ConfigRequest()

    # Get commonly used data now
    fabricNodes = apic1.lookupByClass('fabricNode')

    # Create VLAN Pools
    mo_changes = create_vlan_pool_policies(desired['vlan_pools'])
    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create Physical Domain
    mo_changes = create_physical_domain(apic1, desired['physical_domain'])
    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create the Attachable AEP
    mo_changes = create_attachable_aep(apic1, desired['aaep_policies'])
    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create OOB Management
    mo_changes = create_oob_mgmt_policies(apic=apic1,
                                          policy=desired['oob_mgmt_policies'],
                                          nodes=fabricNodes)
    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create INB Management
    mo_changes = create_inb_mgmt_policies(apic=apic1,
                                          policy=desired['inb_mgmt_policies'],
                                          nodes=fabricNodes)
    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create Leaf Interface Profiles
    mo_changes = create_leaf_intf_profile(apic1, fabricNodes)
    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Create Leaf Switch Profile
    mo_changes = create_leaf_switch_profile(fabricNodes)
    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # VPC Explicit Protection Group
    mo_changes = create_vpc_protection_groups(desired['vpc_protection_group'],
                                              fabricNodes)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # CDP
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['cdp_policies'],
                              baseDN='uni/infra/cdpIfP-{0}',
                              className='cdpIfPol',
                              attrs=cdp_attributes,
                              create=create_cdp_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # LLDP
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['lldp_policies'],
                              baseDN='uni/infra/lldpIfP-{0}',
                              className='lldpIfPol',
                              attrs=lldp_attributes,
                              create=create_lldp_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Link Level Policies

    #  Need to add default values
    for policy in desired['link_level_policies']:
        if 'fecMode' not in policy:
            policy['fecMode'] = 'inherit'
        if 'linkDebounce' not in policy:
            policy['linkDebounce'] = '100'

    mo_changes = apply_policy(apic=apic1,
                              policies=desired['link_level_policies'],
                              baseDN='uni/infra/hintfpol-{0}',
                              className='fabricHIfPol',
                              attrs=link_level_attributes,
                              create=create_link_level_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # MCP Policies
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['mcp_policies'],
                              baseDN='uni/infra/mcpIfP-{0}',
                              className='mcpIfPol',
                              attrs=mcp_attributes,
                              create=create_mcp_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # COOP Policies
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['coop_group_policies'],
                              baseDN='uni/fabric/pol-{0}',
                              className='coopPol',
                              attrs=coop_attributes,
                              create=create_coop_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Rogue Endpoint Policies
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['rogue_endpoint_policies'],
                              baseDN='uni/infra/epCtrlP-{0}',
                              className='epControlP',
                              attrs=rogue_endpoint_attributes,
                              create=create_rogue_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # IP Aging Policies
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['ip_aging_policies'],
                              baseDN='uni/infra/ipAgingP-{0}',
                              className='epIpAgingP',
                              attrs=ip_aging_attributes,
                              create=create_aging_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Fabric Wide System Settings
    mo_changes = apply_policy(apic=apic1,
                              policies=desired['fabric_wide_policies'],
                              exactDN='uni/infra/settings',
                              className='infraSetPol',
                              attrs=fabric_wide_attributes,
                              create=create_wide_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    ### Hierarchy of objects

    # SNMP Policies
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['snmp_policies'],
                                     baseDN='uni/fabric/snmppol-{0}',
                                     className='snmpPol',
                                     create=create_snmp_policy,
                                     reconcile=reconcile_snmp_policy)

    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)

    if cfgRequest.configMos:
        apic1.commit(cfgRequest)

    # SNMP Policies
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['snmp_group_policies'],
                                     baseDN='uni/fabric/snmpgroup-{0}',
                                     className='snmpGroup',
                                     create=create_snmp_group_policy,
                                     reconcile=reconcile_snmp_group_policy)

    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)

    if cfgRequest.configMos:
        apic1.commit(cfgRequest)

    # BGP RR Policies (custom method for nested)
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['bgp_policies'],
                                     baseDN='uni/fabric/bgpInstP-{0}',
                                     className='bgpInstPol',
                                     create=create_bgp_policy,
                                     reconcile=reconcile_bgp_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # DNS Policies
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['dns_policies'],
                                     baseDN='uni/fabric/dnsp-{0}',
                                     className='dnsProfile',
                                     create=create_dns_policy,
                                     reconcile=reconcile_dns_policy)

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # NTP Policies
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['ntp_policies'],
                                     baseDN='uni/fabric/time-{0}',
                                     className='datetimePol',
                                     create=create_ntp_policy,
                                     reconcile=reconcile_ntp_policy)

    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)

    # Syslog Policies
    mo_changes = apply_nested_policy(apic=apic1,
                                     policies=desired['syslog_policies'],
                                     baseDN='uni/fabric/slgroup-{0}',
                                     className='syslogGroup',
                                     create=create_syslog_policy,
                                     reconcile=reconcile_syslog_policy)

    if mo_changes is not None:
        cfgRequest.addMo(mo_changes)

    if cfgRequest.configMos:
        apic1.commit(cfgRequest)

    # Overlay setup (tenant, vrf, bridge domain, subnet, epg, contracts)
    mo_changes = create_overlay_policy(apic=apic1, policy=desired['overlay'])

    if mo_changes is not None:
        # print(toXMLStr(mo_changes))
        cfgRequest.addMo(mo_changes)
        apic1.commit(cfgRequest)
예제 #2
0
def pushMoToApic(mo, moDirectory):
    "Push a given Mo to the APIC to commit changes"
    configRequest = aciRequest.ConfigRequest()
    configRequest.addMo(mo)
    moDirectory.commit(configRequest)
예제 #3
0
    #funcPMo=infra.FuncP('uni/infra')
    #portgroupMo=infra.AccBndlGrp(funcPMo,name=pathEPName,lagT='node')
    #infra.RsHIfPol(portgroupMo,tnFabricHIfPolName='10G')
    #infra.RsLacpPol(portgroupMo,tnLacpLagPolName='LACP-active')
    #infra.RsCdpIfPol(portgroupMo,tnCdpIfPolName='default')
    #infra.RsLldpIfPol(portgroupMo,tnLldpIfPolName="LLDP_ENABLE")
    #infra.RsAttEntP(portgroupMo,tDn=rsaaepntdn)

    # Commit Portgroup
    #portgroupMoCfg=request.ConfigRequest()
    #    portgroupMo.delete()
    #portgroupMoCfg.addMo(portgroupMo)
    #moDir.commit(portgroupMoCfg)

    # Commit contract
    vzBrCP = request.ConfigRequest()
    vzBrCP.addMo(vzBrCP)
    moDir.commit(vzBrCP)

    #Commit L3Out
    l3moCfg = request.ConfigRequest()
    #   l3outMo.delete()
    l3moCfg.addMo(l3outMo)
    moDir.commit(l3moCfg)

    #Commit VRF
    vrfmoCfg = request.ConfigRequest()
    #   vrfMo.delete()
    vrfmoCfg.addMo(vrfMo)
    moDir.commit(vrfmoCfg)