{"id":11,"date":"2023-01-29T12:28:02","date_gmt":"2023-01-29T11:28:02","guid":{"rendered":"https:\/\/networkjon.wordpress.com\/?p=11"},"modified":"2025-01-27T14:04:35","modified_gmt":"2025-01-27T13:04:35","slug":"inventory-script-for-cisco-9800","status":"publish","type":"post","link":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/","title":{"rendered":"Cisco C9800 Access point inventory script"},"content":{"rendered":"\n<p>Today I am sharing a Python script I wrote to get an access point inventory from one or more Cisco Catalyst 9800 WLAN controllers. It connects to the C9800 using the RESTCONF API, so don&#8217;t forget to first enable the API on the controller as it is disabled by default. All prerequisites and instructions are on the GitHub link.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why would you want an AP inventory on Excel?<\/h2>\n\n\n\n<p>I mostly use this script in 2 situations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>On-site Wi-Fi survey:<\/strong> I can quickly get channels, transmist powers, radio MAC addresses&#8230; of all access points before I go out measuring.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Access points migration from one controller to the other (N+1 infrastructure) or 9800 upgrades<\/strong>. I get an inventory before and after the migration and can then easily compare the two files. It is very useful if I lose any access point during the migration and I need to check their status. The inventory provides important information such as IP address and LLDP\/CDP information of access points so you can quickly identify on which switch &amp; interface a missing AP is plugged in.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The script<\/h2>\n\n\n\n<p><strong>The script<\/strong> is on GitHub: <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\"><a href=\"https:\/\/github.com\/jrambeau\/cisco-c9800-AP-inventory\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/jrambeau\/cisco-c9800-AP-inventory<\/a><\/mark><\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1898\" height=\"590\" src=\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\" alt=\"\" class=\"wp-image-119\" srcset=\"https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png 1898w, https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6-300x93.png 300w, https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6-1024x318.png 1024w, https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6-768x239.png 768w, https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6-1536x477.png 1536w\" sizes=\"auto, (max-width: 1898px) 100vw, 1898px\" \/><\/a><figcaption class=\"wp-element-caption\">Inventory file example<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">On the same topic&#8230; would you care for a back-up configuration script?<\/h2>\n\n\n\n<p>I also shared on GitHub a small script that uses SSH\/Netmiko to back-up the configuration of one or multiple C9800 controllers (and basically any other IOS-XE device). You can even easily customize the script to get an output of any commands you might need.<\/p>\n\n\n\n<p>Here it is: <a href=\"https:\/\/github.com\/jrambeau\/cisco-c9800-config-backup\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/jrambeau\/cisco-c9800-config-backup<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today I am sharing a Python script I wrote to get an access point inventory from one or more Cisco Catalyst 9800 WLAN controllers. It connects to the C9800 using the RESTCONF API, so don&#8217;t forget to first enable the API on the controller as it is disabled by default. All prerequisites and instructions are [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cisco C9800 Access point inventory script - Network Jon<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cisco C9800 Access point inventory script - Network Jon\" \/>\n<meta property=\"og:description\" content=\"Today I am sharing a Python script I wrote to get an access point inventory from one or more Cisco Catalyst 9800 WLAN controllers. It connects to the C9800 using the RESTCONF API, so don&#8217;t forget to first enable the API on the controller as it is disabled by default. All prerequisites and instructions are [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\" \/>\n<meta property=\"og:site_name\" content=\"Network Jon\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-29T11:28:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-27T13:04:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\" \/>\n<meta name=\"author\" content=\"Jonathan Rambeau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Rambeau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\"},\"author\":{\"name\":\"Jonathan Rambeau\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/afb31b920aeee6f10a46f51943c789f3\"},\"headline\":\"Cisco C9800 Access point inventory script\",\"datePublished\":\"2023-01-29T11:28:02+00:00\",\"dateModified\":\"2025-01-27T13:04:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\"},\"wordCount\":266,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\",\"articleSection\":[\"Non class\u00e9\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\",\"url\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\",\"name\":\"Cisco C9800 Access point inventory script - Network Jon\",\"isPartOf\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\",\"datePublished\":\"2023-01-29T11:28:02+00:00\",\"dateModified\":\"2025-01-27T13:04:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage\",\"url\":\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\",\"contentUrl\":\"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.networkjon.fr\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cisco C9800 Access point inventory script\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#website\",\"url\":\"https:\/\/www.networkjon.fr\/blog\/\",\"name\":\"Network Jon\",\"description\":\"A blog about Wi-Fi, 802.11, networking and automation... mostly in English... et parfois en Fran\u00e7ais... by Jonathan Rambeau\",\"publisher\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.networkjon.fr\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#organization\",\"name\":\"Network Jon\",\"url\":\"https:\/\/www.networkjon.fr\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/cropped-logo-networkjon-1-1.jpg\",\"contentUrl\":\"https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/cropped-logo-networkjon-1-1.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"Network Jon\"},\"image\":{\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jonathan-rambeau-987a58225\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/afb31b920aeee6f10a46f51943c789f3\",\"name\":\"Jonathan Rambeau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/88f9b026f1a082206693533f8a10b031ac2c51ee4d5f96a6427b54044b37fbc6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/88f9b026f1a082206693533f8a10b031ac2c51ee4d5f96a6427b54044b37fbc6?s=96&d=mm&r=g\",\"caption\":\"Jonathan Rambeau\"},\"sameAs\":[\"http:\/\/networkjon.fr\/blog\"],\"url\":\"https:\/\/www.networkjon.fr\/blog\/author\/jram\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cisco C9800 Access point inventory script - Network Jon","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/","og_locale":"en_GB","og_type":"article","og_title":"Cisco C9800 Access point inventory script - Network Jon","og_description":"Today I am sharing a Python script I wrote to get an access point inventory from one or more Cisco Catalyst 9800 WLAN controllers. It connects to the C9800 using the RESTCONF API, so don&#8217;t forget to first enable the API on the controller as it is disabled by default. All prerequisites and instructions are [&hellip;]","og_url":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/","og_site_name":"Network Jon","article_published_time":"2023-01-29T11:28:02+00:00","article_modified_time":"2025-01-27T13:04:35+00:00","og_image":[{"url":"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024","type":"","width":"","height":""}],"author":"Jonathan Rambeau","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jonathan Rambeau","Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#article","isPartOf":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/"},"author":{"name":"Jonathan Rambeau","@id":"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/afb31b920aeee6f10a46f51943c789f3"},"headline":"Cisco C9800 Access point inventory script","datePublished":"2023-01-29T11:28:02+00:00","dateModified":"2025-01-27T13:04:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/"},"wordCount":266,"commentCount":0,"publisher":{"@id":"https:\/\/www.networkjon.fr\/blog\/#organization"},"image":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage"},"thumbnailUrl":"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024","articleSection":["Non class\u00e9"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/","url":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/","name":"Cisco C9800 Access point inventory script - Network Jon","isPartOf":{"@id":"https:\/\/www.networkjon.fr\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage"},"image":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage"},"thumbnailUrl":"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024","datePublished":"2023-01-29T11:28:02+00:00","dateModified":"2025-01-27T13:04:35+00:00","breadcrumb":{"@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#primaryimage","url":"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024","contentUrl":"http:\/\/networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/image-6.png?w=1024"},{"@type":"BreadcrumbList","@id":"https:\/\/www.networkjon.fr\/blog\/inventory-script-for-cisco-9800\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.networkjon.fr\/blog\/"},{"@type":"ListItem","position":2,"name":"Cisco C9800 Access point inventory script"}]},{"@type":"WebSite","@id":"https:\/\/www.networkjon.fr\/blog\/#website","url":"https:\/\/www.networkjon.fr\/blog\/","name":"Network Jon","description":"A blog about Wi-Fi, 802.11, networking and automation... mostly in English... et parfois en Fran\u00e7ais... by Jonathan Rambeau","publisher":{"@id":"https:\/\/www.networkjon.fr\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.networkjon.fr\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.networkjon.fr\/blog\/#organization","name":"Network Jon","url":"https:\/\/www.networkjon.fr\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.networkjon.fr\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/cropped-logo-networkjon-1-1.jpg","contentUrl":"https:\/\/www.networkjon.fr\/blog\/wp-content\/uploads\/2024\/11\/cropped-logo-networkjon-1-1.jpg","width":1024,"height":1024,"caption":"Network Jon"},"image":{"@id":"https:\/\/www.networkjon.fr\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jonathan-rambeau-987a58225\/"]},{"@type":"Person","@id":"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/afb31b920aeee6f10a46f51943c789f3","name":"Jonathan Rambeau","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.networkjon.fr\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/88f9b026f1a082206693533f8a10b031ac2c51ee4d5f96a6427b54044b37fbc6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/88f9b026f1a082206693533f8a10b031ac2c51ee4d5f96a6427b54044b37fbc6?s=96&d=mm&r=g","caption":"Jonathan Rambeau"},"sameAs":["http:\/\/networkjon.fr\/blog"],"url":"https:\/\/www.networkjon.fr\/blog\/author\/jram\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":4,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":365,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/posts\/11\/revisions\/365"}],"wp:attachment":[{"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.networkjon.fr\/blog\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}