08-05-2022 04:21 AM
Hello boys,
Anyone know, how can I get the EPGs statics paths (config) associated to a LEAF?, I want to get this information with curl command and xml output format.
I have used apic inspector but I haven´t achive the goal.
Thanks allot.
Solved! Go to Solution.
08-29-2022 12:34 AM - edited 08-29-2022 04:41 AM
[EDIT: First and foremost, I just want to comment on your way you started the query (`hello boys`) and let you know that this community, and IT/networking community in general, is not a boys-only club. There are so many women with such a big and positive impact to our community you will be surprised. So next time, please be more aware of this aspect]
What you can do is basically take all static paths configured, and filter them for a specific leaf id:
https://apic_ip/api/class/fvRsPathAtt.xml?query-target-filter=wcard(fvRsPathAtt.dn, "leaf_id")
An example of the result DN:
dn="uni/tn-SD/ap-SD/epg-EPG1/rspathAtt-[topology/pod-1/paths-201/pathep-[eth1/48]]"
You will have the tenant, AP and EPG names, as well as all interfaces used.
Ofc, you will need further filtering, deduplication etc, but you get what you need.
Hope it helps,
Sergiu
08-29-2022 02:39 AM - edited 08-29-2022 03:26 PM
Hi @Jose Maroto Grande ,
I just have to echo @Sergiu.Daniluk 's comment about the "Hello boys" - this community is very diverse in cultural and gender, even if the main language is English. It is one of the reasons I enjoy participating.
For now, I'll assume that it that cultural diversity that has led you to you very "male" greeting.
For now, I'll sleep on your question - in particular the bit where you want to use curl
[EDIT: 2022.08.30][Edit2: later: Corrected/added the RIGHT filters]
Yawn! Sleep done - but not getting far with finding an answer. I admit, I'm not a fan of XML, so your need to get this information in XML format has stumped me.
@Sergiu.Daniluk has done the hard work identifying the object class that you need to query, but getting the API to spit this information out in a usable format using curl
was beyond me.
This is what I got using curl on @Sergiu.Daniluk 's query, piping it through xmllint
to sanitise it a LITTLE.
➜ ~ curl -s -b cookie1.txt -X GET -k https://MY_APIC/api/class/fvRsPathAtt.xml\?query-target-filter\=wcard\(fvRsPathAtt.dn, "1201"\) | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<imdata totalCount="10">
<fvRsPathAtt annotation="" childAction="" descr="Created as part of Housley standard setup by setup_Shared fab common&mgmt tn" dn="uni/tn-common/ap-SharedServices_AP/epg-SharedServices_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/9]]" encap="vlan-1001" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T10:32:59.768+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/9]" tType="mo" uid="15374" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-mso-test/ap-ap1/epg-f1app/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/11]]" encap="vlan-1011" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T15:44:11.795+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/11]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-mso-test/ap-ap1/epg-f1web/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/11]]" encap="vlan-1012" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T15:44:11.795+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/11]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in NN_Build Tenant for BMH Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/13]]" encap="vlan-1032" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.003+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/13]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created inNN_Build Tenant for BMH Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/13]]" encap="vlan-1031" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.003+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/13]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in NN_Build Tenant for BMH Lab" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]]" encap="vlan-1034" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.521+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-tony/ap-2Tier_AP/epg-web_epg-dc1/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]]" encap="vlan-1024" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T15:01:31.173+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-tony/ap-2Tier_AP/epg-app_epg-dc1/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]" encap="vlan-1021" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T15:01:31.173+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/12]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in Build Core Tenant inc AccPols Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant02/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/12]]" encap="vlan-1022" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-25T15:55:33.856+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/12]" tType="mo" uid="12841" userdom=":all:common:T02_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created inBuild Core Tenant inc AccPols Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant02/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]" encap="vlan-1021" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-25T15:55:33.856+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/12]" tType="mo" uid="12841" userdom=":all:common:T02_SecDom:"/>
</imdata>
WHAT A MESS - using XML, there's no SIMPLE way to isolate the dn part
HOWEVER, using JSON, ( and piping through json_pp
then using cut
to tidy even more, I was able to get a MUCH nicer output -
➜ ~ curl -s -b cookie1.txt -X GET -k https://MY_APIC/api/class/fvRsPathAtt.json\?query-target-filter=and\(wcard\(fvRsPathAtt.dn,\"1201\"\)\) | json_pp | grep \"dn\" | cut -b 23- "uni/tn-common/ap-SharedServices_AP/epg-SharedServices_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/9]]", "uni/tn-mso-test/ap-ap1/epg-f1app/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/11]]", "uni/tn-Tenant03/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/13]]", "uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]]", "uni/tn-tony/ap-2Tier_AP/epg-web_epg-dc1/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]]", "uni/tn-tony/ap-2Tier_AP/epg-app_epg-dc1/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]", "uni/tn-Tenant02/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]",
08-29-2022 12:34 AM - edited 08-29-2022 04:41 AM
[EDIT: First and foremost, I just want to comment on your way you started the query (`hello boys`) and let you know that this community, and IT/networking community in general, is not a boys-only club. There are so many women with such a big and positive impact to our community you will be surprised. So next time, please be more aware of this aspect]
What you can do is basically take all static paths configured, and filter them for a specific leaf id:
https://apic_ip/api/class/fvRsPathAtt.xml?query-target-filter=wcard(fvRsPathAtt.dn, "leaf_id")
An example of the result DN:
dn="uni/tn-SD/ap-SD/epg-EPG1/rspathAtt-[topology/pod-1/paths-201/pathep-[eth1/48]]"
You will have the tenant, AP and EPG names, as well as all interfaces used.
Ofc, you will need further filtering, deduplication etc, but you get what you need.
Hope it helps,
Sergiu
08-29-2022 02:39 AM - edited 08-29-2022 03:26 PM
Hi @Jose Maroto Grande ,
I just have to echo @Sergiu.Daniluk 's comment about the "Hello boys" - this community is very diverse in cultural and gender, even if the main language is English. It is one of the reasons I enjoy participating.
For now, I'll assume that it that cultural diversity that has led you to you very "male" greeting.
For now, I'll sleep on your question - in particular the bit where you want to use curl
[EDIT: 2022.08.30][Edit2: later: Corrected/added the RIGHT filters]
Yawn! Sleep done - but not getting far with finding an answer. I admit, I'm not a fan of XML, so your need to get this information in XML format has stumped me.
@Sergiu.Daniluk has done the hard work identifying the object class that you need to query, but getting the API to spit this information out in a usable format using curl
was beyond me.
This is what I got using curl on @Sergiu.Daniluk 's query, piping it through xmllint
to sanitise it a LITTLE.
➜ ~ curl -s -b cookie1.txt -X GET -k https://MY_APIC/api/class/fvRsPathAtt.xml\?query-target-filter\=wcard\(fvRsPathAtt.dn, "1201"\) | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<imdata totalCount="10">
<fvRsPathAtt annotation="" childAction="" descr="Created as part of Housley standard setup by setup_Shared fab common&mgmt tn" dn="uni/tn-common/ap-SharedServices_AP/epg-SharedServices_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/9]]" encap="vlan-1001" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T10:32:59.768+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/9]" tType="mo" uid="15374" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-mso-test/ap-ap1/epg-f1app/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/11]]" encap="vlan-1011" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T15:44:11.795+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/11]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-mso-test/ap-ap1/epg-f1web/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/11]]" encap="vlan-1012" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-05T15:44:11.795+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/11]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in NN_Build Tenant for BMH Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/13]]" encap="vlan-1032" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.003+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/13]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created inNN_Build Tenant for BMH Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/13]]" encap="vlan-1031" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.003+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/13]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in NN_Build Tenant for BMH Lab" dn="uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]]" encap="vlan-1034" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T13:56:00.521+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]" tType="mo" uid="12844" userdom=":all:common:T03_SecDom:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-tony/ap-2Tier_AP/epg-web_epg-dc1/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]]" encap="vlan-1024" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T15:01:31.173+10:00" mode="regular" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="orchestrator:msc" childAction="" descr="" dn="uni/tn-tony/ap-2Tier_AP/epg-app_epg-dc1/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]" encap="vlan-1021" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-08T15:01:31.173+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/12]" tType="mo" uid="0" userdom=":all:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created in Build Core Tenant inc AccPols Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant02/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/12]]" encap="vlan-1022" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-25T15:55:33.856+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1202/extpaths-192/pathep-[eth1/12]" tType="mo" uid="12841" userdom=":all:common:T02_SecDom:"/>
<fvRsPathAtt annotation="" childAction="" descr="Created inBuild Core Tenant inc AccPols Lab by Housley ACI Orchestrator" dn="uni/tn-Tenant02/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]" encap="vlan-1021" extMngdBy="" forceResolve="yes" instrImedcy="lazy" lcC="" lcOwn="local" modTs="2022-08-25T15:55:33.856+10:00" mode="untagged" monPolDn="uni/tn-common/monepg-default" primaryEncap="unknown" rType="mo" state="unformed" stateQual="none" status="" tCl="fabricPathEp" tDn="topology/pod-1/paths-1201/pathep-[eth1/12]" tType="mo" uid="12841" userdom=":all:common:T02_SecDom:"/>
</imdata>
WHAT A MESS - using XML, there's no SIMPLE way to isolate the dn part
HOWEVER, using JSON, ( and piping through json_pp
then using cut
to tidy even more, I was able to get a MUCH nicer output -
➜ ~ curl -s -b cookie1.txt -X GET -k https://MY_APIC/api/class/fvRsPathAtt.json\?query-target-filter=and\(wcard\(fvRsPathAtt.dn,\"1201\"\)\) | json_pp | grep \"dn\" | cut -b 23- "uni/tn-common/ap-SharedServices_AP/epg-SharedServices_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/9]]", "uni/tn-mso-test/ap-ap1/epg-f1app/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/11]]", "uni/tn-Tenant03/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/13]]", "uni/tn-Tenant03/ap-2Tier_AP/epg-WebServers_EPG/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T03:L1201..1202:1:33_VPCIPG]]", "uni/tn-tony/ap-2Tier_AP/epg-web_epg-dc1/rspathAtt-[topology/pod-1/protpaths-1201-1202/pathep-[T02:L1201..1202:1:32_VPCIPG]]", "uni/tn-tony/ap-2Tier_AP/epg-app_epg-dc1/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]", "uni/tn-Tenant02/ap-2Tier_AP/epg-AppServers_EPG/rspathAtt-[topology/pod-1/paths-1201/pathep-[eth1/12]]",
09-21-2022 08:23 AM
Thank you @Sergiu.Daniluk, very good job, it is so difficult to find the class. Thank you @RedNectar , fantastic job, it is exactly what I needed. I hope the system let me to accept the two solutions.
09-21-2022 03:13 PM
Hi @Jose Maroto Grande ,
it is so difficult to find the class.
Try looking for my video on moquery (called Under the covers with moquery) for tips to find the class of an object. The method for finding a class is also in my moquery blog post (search for moquery – Cisco’s Mysterious Obscure ACI query utility) essentially if you right click on an object in the ACI GUI and choose Open in Object Store Browser you'll find the class.
09-22-2022 03:04 AM
Guau!!, fantastic blog documentation, very clear. I have to read again, (maybe 2 times) but I understand much better now. Thanks for your help @RedNectar .
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide