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)
def pushMoToApic(mo, moDirectory): "Push a given Mo to the APIC to commit changes" configRequest = aciRequest.ConfigRequest() configRequest.addMo(mo) moDirectory.commit(configRequest)
#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)