{"id":2233,"date":"2025-04-10T12:24:27","date_gmt":"2025-04-10T16:24:27","guid":{"rendered":"https:\/\/enterpriseadmins.org\/blog\/?p=2233"},"modified":"2025-04-10T12:24:27","modified_gmt":"2025-04-10T16:24:27","slug":"how-to-create-a-pi-hole-management-pack-in-aria-operations","status":"publish","type":"post","link":"https:\/\/enterpriseadmins.org\/blog\/uncategorized\/how-to-create-a-pi-hole-management-pack-in-aria-operations\/","title":{"rendered":"How to Create a Pi-Hole Management Pack in Aria Operations"},"content":{"rendered":"\n<p>Two years ago, <a href=\"_wp_link_placeholder\" data-wplink-edit=\"true\">I documented<\/a> the integration of Pi-Hole with VMware Aria Operations using the Aria Operations Management Pack Builder (MPB) and Pi-Hole\u2019s API. Since then, both tools have undergone significant updates: MPB has a revamped 2.0 interface, and Pi-Hole 6 introduced a completely new API with formal documentation and session-based authentication. In this updated guide, I\u2019ll walk you through building a Pi-Hole Management Pack using these modern tools, highlighting key changes and providing a detailed, hands-on tutorial for tech enthusiasts and system admins.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s New with the Pi-Hole API?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Formal Documentation and Accessibility<\/h3>\n\n\n\n<p>With the release of Pi-Hole 6, the API has been overhauled to be more robust and user-friendly. Official documentation is now available at <a href=\"http:\/\/pi.hole\/api\/docs\">http:\/\/pi.hole\/api\/docs<\/a>, which resolves to your local Pi-Hole server to ensure version compatibility. If you haven\u2019t installed Pi-Hole yet, you can explore the documentation for all branches online, such as the <a href=\"http:\/\/pi.hole\/api\/docs\">Pi-Hole API documentation (master branch)<\/a>. Additionally, Pi-Hole provides a built-in UI at <code>https:\/\/YourPi-holeServerName\/api\/docs\/<\/code> where you can test API requests directly\u2014a fantastic feature for developers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Session ID Authentication: A Shift from Tokens<\/h3>\n\n\n\n<p>One major change in Pi-Hole 6 is the move from token-based to session ID-based authentication. I discovered this shift when my existing Management Pack stopped collecting data after upgrading to version 6. The <a href=\"http:\/\/pi.hole\/api\/docs\/auth\">API authentication documentation<\/a> outlines several authentication options, I opted for the App Password method. Here\u2019s how to set it up:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Pi-Hole Admin UI, navigate to the Web Interface \/ API section of Settings, make sure the interface is toggled from Basic to Expert and click <strong>Configure App Password<\/strong>.<\/li>\n\n\n\n<li>The UI will display a one-time App Password\u2014copy it immediately, as it won\u2019t be shown again. Store it securely (e.g., in a password manager).<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"604\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image.png\" alt=\"\" class=\"wp-image-2235\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-300x186.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-768x476.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p>To verify the new authentication method, I used the API UI (<a href=\"https:\/\/YourPi-holeServerName\/api\/docs\/\">https:\/\/YourPi-holeServerName\/api\/docs\/<\/a>) to test a request with my App Password. After clicking <strong>Try<\/strong>, I received a <code>session.sid<\/code>, confirming successful authentication.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"696\" height=\"500\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-1.png\" alt=\"\" class=\"wp-image-2236\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-1.png 696w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-1-300x216.png 300w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/a><\/figure>\n\n\n\n<p> I then tested the <code>\/stats\/summary<\/code> endpoint (used in my original article) with the session ID, ensuring it returned the expected data. I now had a basic enough understanding of the API to apply it to building a Management Pack.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducing Aria Operations Management Pack Builder 2.0<\/h2>\n\n\n\n<p>Released in October 2024, version 2.0 of the Aria Operations Management Pack Builder brings a refreshed UI and improved functionality. While MPs from version 1 can be imported, the Pi-Hole API changes require a fresh build for this example. I\u2019ll assume you\u2019ve already deployed the MPB appliance (refer to the <a href=\"https:\/\/docs.vmware.com\/en\/VMware-Aria-Operations\/\">official MPB deployment guide<\/a>) and are ready to start.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Configure the Connection in MPB<\/h2>\n\n\n\n<p>First, connect MPB to your Aria Operations server:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Access the MPB Web UI.<\/li>\n\n\n\n<li>Navigate to the <strong>VMware Aria Operations Connection<\/strong> tab.<\/li>\n\n\n\n<li>Create and test a connection to your Aria Operations server.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"663\" height=\"605\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-2.png\" alt=\"\" class=\"wp-image-2237\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-2.png 663w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-2-300x274.png 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/a><\/figure>\n\n\n\n<p>With the connection established, you\u2019re ready to build your Management Pack.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Define the Source<\/h2>\n\n\n\n<p>The Source defines the environment (your Pi-Hole server) that MPB will interact with. Here\u2019s how to set it up:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the <strong>Designs<\/strong> tab, click <strong>Create<\/strong>.<\/li>\n\n\n\n<li>Name your Management Pack (e.g., \u201cPi-Hole MP\u201d) and add a description, then click <strong>Save<\/strong>.<\/li>\n\n\n\n<li>Configure the Source:\n<ul class=\"wp-block-list\">\n<li>Enter the <strong>Hostname<\/strong>, <strong>Port<\/strong>, <strong>SSL Configuration<\/strong>, and <strong>Base API Path<\/strong> of your Pi-Hole server.<\/li>\n\n\n\n<li>Click <strong>Next<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"690\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-3.png\" alt=\"\" class=\"wp-image-2238\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-3.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-3-300x212.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-3-768x544.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Set Up Authentication<\/h3>\n\n\n\n<p>Pi-Hole 6 uses session-based authentication, so we\u2019ll configure MPB accordingly:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the <strong>Authentication<\/strong> tab, change the dropdown from <strong>Basic<\/strong> to <strong>Custom<\/strong>.<\/li>\n\n\n\n<li>Create a label called \u201cApp Password\u201d and paste the App Password you generated earlier into the value field.<\/li>\n\n\n\n<li>Check the <strong>Sensitive<\/strong> box to secure the password, then click <strong>Add Field<\/strong>. This creates a variable <code>${authentication.credentials.app_password}<\/code> for use in the MP.<\/li>\n\n\n\n<li>Enable the <strong>Session Authentication<\/strong> toggle and click <strong>Next<\/strong>.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"766\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-4.png\" alt=\"\" class=\"wp-image-2239\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-4.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-4-300x236.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-4-768x603.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Configure the Session API Request<\/h3>\n\n\n\n<p>From the Pi-Hole API documentation, we know the authentication endpoint is a POST request to <code>\/auth<\/code>. Configure it on the Get Session API Request tab as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select POST from the dropdown HTTP Method list <\/li>\n\n\n\n<li>In the <strong>API Path<\/strong> field, enter <code>auth<\/code>.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"490\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-6.png\" alt=\"\" class=\"wp-image-2241\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-6.png 843w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-6-300x174.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-6-768x446.png 768w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/a><\/figure>\n\n\n\n<p>We saw in the API documentation that we need to pass our App Password in the Body of our request in the JSON Format of:<br><pre><code>{\"password\": \"${authentication.credentials.app_password}\"}<\/code><\/pre><\/p>\n\n\n\n<p>So on the <strong>Get Session Request Advanced<\/strong> tab we will use the variable created earlier to pass the App Password (note the use of double-quotes):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"914\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-5.png\" alt=\"\" class=\"wp-image-2240\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-5.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-5-300x281.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-5-768x720.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p>3. Click <strong>Request<\/strong> to test the configuration. If successful, you\u2019ll see a <code>session.sid<\/code> in the response.<\/p>\n\n\n\n<p>4. Select the <code>session.sid<\/code> field from the response body and copy the session ID variable for later use<\/p>\n\n\n\n<p>The Pi-Hole API documentation lists four ways to use the session ID when making requests.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"304\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-7.png\" alt=\"\" class=\"wp-image-2242\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-7.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-7-300x94.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-7-768x239.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p>We\u2019ll use the <code>X-FTL-SID<\/code> header option.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the <strong>Global Request Settings<\/strong> tab, add a header:\n<ul class=\"wp-block-list\">\n<li><strong>Header Name<\/strong>: <code>X-FTL-SID<\/code><\/li>\n\n\n\n<li><strong>Header Value<\/strong>: <code>${session.sid}<\/code><br>This ensures the session ID is included in all API requests.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"416\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-8.png\" alt=\"\" class=\"wp-image-2243\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-8.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-8-300x128.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-8-768x328.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p>In the Release Session Request tab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable the toggle to request a release<\/li>\n\n\n\n<li>Choose an HTTP Method of DELETE<\/li>\n\n\n\n<li>Set the API Path to auth<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"665\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-9.png\" alt=\"\" class=\"wp-image-2244\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-9.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-9-300x205.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-9-768x524.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p>We do not add any additional values on the \u201cRelease Session Request Advanced\u201d tab. Click Next.<\/p>\n\n\n\n<p>On the <strong>Make Release Session Request<\/strong> tab click the Request button to verify a successful session release.<\/p>\n\n\n\n<p>To verify the setup, test the <code>\/stats\/summary<\/code> endpoint:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the <strong>Test Connection Request<\/strong> tab, set the API Path to <code>stats\/summary<\/code>.<\/li>\n\n\n\n<li>Click <strong>Request<\/strong> and confirm that summary data (e.g., total queries, blocked queries) is returned.<\/li>\n\n\n\n<li>Click <strong>Save<\/strong> to complete the Source configuration.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"1024\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10-820x1024.png\" alt=\"\" class=\"wp-image-2245\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10-820x1024.png 820w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10-240x300.png 240w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10-768x959.png 768w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-10.png 975w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create API Requests<\/h2>\n\n\n\n<p>With a <strong>Source <\/strong>section successfully tested against our reference environment, we move to the <strong>Requests <\/strong>section of the design. This is where we define the API requests to collect the data that our MP uses. Since the point is to just demonstrate a concept, we are going to create just two requests, one named \u201csummary\u201d and one named \u201chostname\u201d.<\/p>\n\n\n\n<p>From the previous blog we determined that the \/stats\/summary API endpoint will return most of the data that we would use in our MP. And we used it in our <strong>Source <\/strong>section to test our reference environment. If you had read the previous blog you will recall that there was no endpoint that would return the pi-hole server name. Thankfully that has been resolved with the <code>\/info\/host<\/code> endpoint so we will use that as our second request for this test.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Request 1: Summary Statistics<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the <strong>Requests<\/strong> tab, click <strong>Add API Request<\/strong>.<\/li>\n\n\n\n<li>Skip chaining (click <strong>Next<\/strong>).<\/li>\n\n\n\n<li>Set the <strong>HTTP Method<\/strong> to <code>GET<\/code>, the <strong>API Path<\/strong> to <code>stats\/summary<\/code>, and keep the default <strong>Request Name<\/strong>.<\/li>\n\n\n\n<li>No advanced options are needed\u2014click <strong>Next<\/strong>.<\/li>\n\n\n\n<li>On the <strong>Preview<\/strong> screen, click <strong>Request<\/strong> to confirm data is returned (e.g., total queries, blocked queries).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Request 2: Hostname<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Repeat the steps above, setting the <strong>API Path<\/strong> to <code>info\/host<\/code>.<\/li>\n\n\n\n<li>Test the request to ensure data (e.g., <code>host.uname.nodename<\/code>) is returned.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"440\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-11.png\" alt=\"\" class=\"wp-image-2246\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-11.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-11-300x135.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-11-768x347.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Define Objects<\/h2>\n\n\n\n<p>In the <strong>Objects<\/strong> section, select the data from your API requests to include in the Management Pack:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click <strong>Add New Object<\/strong>.<\/li>\n\n\n\n<li>Set the <strong>Object Type<\/strong> to \u201cPi-Hole Server\u201d and click <strong>Next<\/strong>.<\/li>\n\n\n\n<li>On the <strong>Attributes from the API Request<\/strong> tab:\n<ul class=\"wp-block-list\">\n<li>Expand the <code>stats\/summary<\/code> request and select key metrics like:\n<ul class=\"wp-block-list\">\n<li><code>queries.total<\/code><\/li>\n\n\n\n<li><code>queries.blocked<\/code><\/li>\n\n\n\n<li><code>queries.percent_blocked<\/code><\/li>\n\n\n\n<li><code>queries.cached<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Expand the <code>info\/host<\/code> request and select <code>host.uname.nodename<\/code> for the server name.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>On the <strong>Properties and Metrics<\/strong> tab, adjust labels and data types as needed (e.g., use \u201cCount\u201d for total queries, \u201c%\u201d for percent blocked). For more on KPIs, check VMware\u2019s <a href=\"https:\/\/docs.vmware.com\/en\/VMware-Aria-Operations\/\">KPI documentation<\/a>.<\/li>\n\n\n\n<li>Set the <strong>Object Instance Name<\/strong> and <strong>Object Identifiers<\/strong> to \u201cPi-Hole Server Name\u201d for clarity.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"443\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-12.png\" alt=\"\" class=\"wp-image-2247\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-12.png 975w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-12-300x136.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-12-768x349.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configure and Build the Management Pack<\/h2>\n\n\n\n<p>With the design complete, move to the <strong>Configuration<\/strong> section to review settings like MP version and labels. Then:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the <strong>Build<\/strong> section, click <strong>Perform Collection<\/strong> to run a test collection and verify the results.<\/li>\n\n\n\n<li>Click <strong>Build<\/strong> to generate the <code>.pak<\/code> file.<\/li>\n\n\n\n<li>New in MPB 2.0: Deploy the Management Pack directly to your Aria Operations server by selecting it from the list and clicking <strong>Deploy<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure the Management Pack in Aria Operations<\/h2>\n\n\n\n<p>Install the <code>.pak<\/code> file in Aria Operations as you would any other Management Pack:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to <strong>Administration > Integrations > Repositories<\/strong>.<\/li>\n\n\n\n<li>Enable the new Management Pack<\/li>\n\n\n\n<li>Add an account for each Pi-Hole server, including the App Password as a credential in Aria Operations.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"594\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13-1024x594.png\" alt=\"\" class=\"wp-image-2248\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13-1024x594.png 1024w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13-300x174.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13-768x445.png 768w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13-1536x890.png 1536w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/04\/image-13.png 1839w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Within minutes, you\u2019ll be tracking Pi-Hole performance metrics\u2014like total queries and blocked queries\u2014directly in Aria Operations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion: Monitor Pi-Hole Like a Pro<\/h2>\n\n\n\n<p>By leveraging the updated Pi-Hole API and Aria Operations MPB 2.0, you can seamlessly integrate Pi-Hole metrics into your monitoring environment. This tutorial demonstrates a simple yet powerful Management Pack, but the possibilities are endless\u2014what other applications would you like to monitor with Aria Operations?<\/p>\n\n\n\n<p>I\u2019d love to hear your thoughts! Drop a comment below with your experiences building Management Packs or any other apps you\u2019d like to integrate with Aria Operations. If you found this guide helpful, share it with your network and stay tuned for more tech tutorials.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Two years ago, I documented the integration of Pi-Hole with VMware Aria Operations using the Aria Operations Management Pack Builder (MPB) and Pi-Hole\u2019s API. Since then, both tools have undergone significant updates: MPB has a revamped 2.0 interface, and Pi-Hole &hellip; <a href=\"https:\/\/enterpriseadmins.org\/blog\/uncategorized\/how-to-create-a-pi-hole-management-pack-in-aria-operations\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[18,19,16,17],"class_list":["post-2233","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-management-pack","tag-management-pack-builder","tag-pi-hole","tag-vcf-operations"],"_links":{"self":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/comments?post=2233"}],"version-history":[{"count":2,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2233\/revisions"}],"predecessor-version":[{"id":2249,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2233\/revisions\/2249"}],"wp:attachment":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/media?parent=2233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/categories?post=2233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/tags?post=2233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}