{"id":51378,"date":"2025-08-07T04:34:22","date_gmt":"2025-08-07T04:34:22","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=51378"},"modified":"2026-02-21T07:48:46","modified_gmt":"2026-02-21T07:48:46","slug":"ansible-ansible-automation-platform-aap-2-5-installation-configuration","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/ansible-ansible-automation-platform-aap-2-5-installation-configuration\/","title":{"rendered":"Ansible: Ansible Automation Platform (AAP) 2.5+ Installation &amp; Configuration"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">How to download?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>https:\/\/developers.redhat.com\/products\/ansible\/download<\/li>\n\n\n\n<li>TIME &#8211; 1 hour. Size &#8211; Approax 4G<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"739\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/08\/image-22-1024x739.png\" alt=\"\" class=\"wp-image-51381\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/08\/image-22-1024x739.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/08\/image-22-300x216.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/08\/image-22-768x554.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/08\/image-22.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Here\u2019s a <strong>detailed and up-to-date conclusion for installing the latest Ansible Automation Platform (AAP) 2.5+ with the RPM\/bundle installer<\/strong>\u2014including the <strong>minimum requirements and what\u2019s possible (and not) for learning\/lab setups<\/strong> as of 2024\u20132026.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Minimal System Requirements for AAP 2.5+ Setup-Bundle<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Key Points<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>RPM\/bundle installer<\/strong> for AAP 2.4\/2.5+ is now designed for <strong>enterprise, multi-node deployments<\/strong>.<\/li>\n\n\n\n<li><strong>You cannot run all major AAP components (Controller, Execution Node, Automation Hub, Gateway, etc.) on a single VM.<\/strong><\/li>\n\n\n\n<li><strong>For learning or lab:<\/strong> You will need at least <strong>three VMs<\/strong> (can be small), each with its own hostname or IP, to install AAP using the bundle.<\/li>\n\n\n\n<li>If you absolutely need an all-in-one lab, use <strong>AWX<\/strong> (upstream) or the <strong>AAP Operator on OpenShift<\/strong> instead.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Minimal Topology Required for AAP 2.5+ Bundle Install<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Host Requirement<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Controller<\/td><td>1 VM<\/td><td>(Required)<\/td><\/tr><tr><td>Automation Hub<\/td><td>1 VM<\/td><td>(Required)<\/td><\/tr><tr><td>Automation Gateway<\/td><td>1 VM<\/td><td>(Required in 2.5+)<\/td><\/tr><tr><td>Execution Node<\/td><td>Can share with Gateway<\/td><td>(Optional, but often separated in prod)<\/td><\/tr><tr><td>Database<\/td><td>Can share with others<\/td><td>(Default: installer-managed PostgreSQL)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Total:<\/strong> <strong>3 separate VMs\/hosts<\/strong>, minimum, for a &#8220;minimal&#8221; supported learning deployment.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. System Requirements (Per VM)<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OS:<\/strong> RHEL 8.6+ or RHEL 9.2+ (recommended\/supported). Rocky\/AlmaLinux for lab, with possible tweaks.<\/li>\n\n\n\n<li><strong>vCPU:<\/strong> 2+ (4 preferred for Controller\/Hub)<\/li>\n\n\n\n<li><strong>RAM:<\/strong> 4 GB minimum (8 GB recommended)<\/li>\n\n\n\n<li><strong>Disk:<\/strong> 40 GB+ (Hub needs more if storing lots of collections\/content)<\/li>\n\n\n\n<li><strong>Network:<\/strong> All VMs must reach each other over the network.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Minimal Example Inventory (Three VMs)<\/strong><\/h2>\n\n\n\n<p>Suppose your hosts are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Controller: <code>controller.lab.local<\/code><\/li>\n\n\n\n<li>Hub: <code>hub.lab.local<\/code><\/li>\n\n\n\n<li>Gateway: <code>gateway.lab.local<\/code><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">&#91;automationcontroller]\ncontroller.lab.local\n\n&#91;automationhub]\nhub.lab.local\n\n&#91;automationgateway]\ngateway.lab.local\n\n&#91;database]\ncontroller.lab.local\n\n&#91;all:vars]\nadmin_password=MyStrongAdminPass123!\npg_host=controller.lab.local\npg_port=5432\npg_database=awx\npg_username=awx\npg_password=MyStrongDBPass123!\n\nautomationhub_admin_password=MyStrongHubPass123!\nautomationhub_pg_host=controller.lab.local\nautomationhub_pg_port=5432\nautomationhub_pg_database=automationhub\nautomationhub_pg_username=automationhub\nautomationhub_pg_password=MyStrongHubDBPass123!\n\nautomationgateway_admin_password=MyStrongGatewayPass123!\nautomationgateway_pg_host=controller.lab.local\nautomationgateway_pg_port=5432\nautomationgateway_pg_database=gateway\nautomationgateway_pg_username=gateway\nautomationgateway_pg_password=MyStrongGatewayDBPass123!<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can point all PG (<code>pg_host<\/code>) to one node for simplicity.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. What is NOT Allowed (as of AAP 2.5+)?<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No all-in-one (everything on one VM) installs using the RPM\/bundle installer.<\/strong><\/li>\n\n\n\n<li><strong>No multiple components with the same hostname\/IP<\/strong> in the inventory.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. If You Absolutely Want All-in-One for Learning:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>AWX<\/strong> (open source, Docker\/Podman\/Kubernetes, easy to run for demo\/lab)<\/li>\n\n\n\n<li>Or use <strong>Red Hat AAP Operator<\/strong> in a single-node OpenShift\/OKD\/minikube cluster.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Download\/Install Steps Overview<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Prepare 3 VMs<\/strong> with RHEL 8\/9 (same major version).<\/li>\n\n\n\n<li>Set static hostnames and ensure they can resolve each other (via DNS or <code>\/etc\/hosts<\/code>).<\/li>\n\n\n\n<li>Prepare your inventory file as above.<\/li>\n\n\n\n<li>Unpack the setup bundle and run: <code>.\/setup.sh<\/code><\/li>\n\n\n\n<li>Access the web UI on your Controller VM after installation.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. References and Best Practices<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_ansible_automation_platform\/2.5\/html-single\/installation_guide\/index#ref-supported-platforms\" target=\"_blank\" rel=\"noopener\">Official Red Hat System Requirements<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_ansible_automation_platform\/2.5\/html-single\/installation_guide\/index#ref-inventory\" target=\"_blank\" rel=\"noopener\">Inventory File Docs<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Scenario<\/th><th>Supported by RPM Bundle?<\/th><th>Recommended For Labs?<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Single node\/VM all-in-one<\/td><td>\u274c No<\/td><td>\u274c Use AWX\/Operator<\/td><td>Not supported by AAP 2.5+ bundle<\/td><\/tr><tr><td>3-node minimal cluster<\/td><td>\u2705 Yes<\/td><td>\u2705 Yes (labs, PoC)<\/td><td>Each component on separate VM\/hostname<\/td><\/tr><tr><td>Full prod cluster<\/td><td>\u2705 Yes<\/td><td>\u2705<\/td><td>For enterprise\/prod use<\/td><\/tr><tr><td>AWX all-in-one<\/td><td>N\/A (not AAP)<\/td><td>\u2705 Yes (labs)<\/td><td>Open source only<\/td><\/tr><tr><td>AAP Operator (OpenShift)<\/td><td>\u2705 Yes<\/td><td>\u2705 Yes (labs\/prod)<\/td><td>Supported with Operator<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>In Short:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>For minimal AAP 2.5+ bundle install:<\/strong><br>You need <strong>three VMs\/hosts<\/strong>\u2014Controller, Hub, and Gateway\u2014<strong>each with a unique hostname\/IP<\/strong>.<\/li>\n\n\n\n<li><strong>All-in-one on one VM is NOT supported<\/strong> (use AWX or Operator for that).<\/li>\n\n\n\n<li>Each VM: RHEL 8.6+\/9.2+, 2+ vCPU, 4+ GB RAM, 40+ GB disk, network reachable.<\/li>\n\n\n\n<li><strong>Best for labs and learning:<\/strong><br>Smallest supported cluster is 3 VMs. Use local DNS or <code>\/etc\/hosts<\/code> for name resolution.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>You Only Run <code>setup.sh<\/code> on ONE Machine (the \u201cInstaller Node\u201d)<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>You do NOT run <code>setup.sh<\/code> on all 3 VMs.<\/strong><\/li>\n\n\n\n<li>You <strong>run it once, from a \u201ccontrol\u201d or \u201cinstaller\u201d machine<\/strong> (usually your controller node, but it can be any of the 3, or even a 4th admin node).<\/li>\n\n\n\n<li>The installer will <strong>SSH to all the other nodes<\/strong> listed in your inventory and perform the setup automatically on them.<\/li>\n\n\n\n<li><strong>All nodes must be accessible via SSH from the installer node<\/strong> (usually as root or a sudo user).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Typical Workflow<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Choose one node<\/strong> to act as your installer node\u2014<strong>usually the Controller<\/strong> (<code>controller.lab.local<\/code>).<\/li>\n\n\n\n<li>Place the setup bundle and the completed <code>inventory<\/code> file on this machine.<\/li>\n\n\n\n<li>Ensure you can <strong>SSH (passwordless, with key)<\/strong> from this machine to all others as root or a user with passwordless sudo.\n<ul class=\"wp-block-list\">\n<li>e.g., <code>ssh root@hub.lab.local<\/code><\/li>\n\n\n\n<li>e.g., <code>ssh root@gateway.lab.local<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>From the installer node (e.g., <code>controller.lab.local<\/code>), run: <code>.\/setup.sh<\/code><\/li>\n\n\n\n<li>The installer connects to <strong>all hosts listed in the inventory<\/strong> (including itself), installs packages, configures the software, and sets up the cluster.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>You Need to Prepare Each Node:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RHEL 8.6+ or 9.2+ installed, fully updated<\/li>\n\n\n\n<li>Hostname set and resolvable by the others (use <code>\/etc\/hosts<\/code> or DNS)<\/li>\n\n\n\n<li>SSH server running<\/li>\n\n\n\n<li>The user running <code>setup.sh<\/code> must be able to SSH to <strong>all nodes<\/strong> as root (or as a user with passwordless sudo)<\/li>\n\n\n\n<li>Optional: Set up <code>ssh-copy-id<\/code> to distribute your SSH key<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Summary Table<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Node<\/th><th>Needs Setup Bundle?<\/th><th>Run <code>setup.sh<\/code>?<\/th><th>Needs to Accept SSH?<\/th><th>Needs Hostname?<\/th><\/tr><\/thead><tbody><tr><td>controller<\/td><td>Yes (installer)<\/td><td>\u2705 Yes<\/td><td>\u2705 Yes<\/td><td>Yes<\/td><\/tr><tr><td>hub<\/td><td>No<\/td><td>\u274c No<\/td><td>\u2705 Yes<\/td><td>Yes<\/td><\/tr><tr><td>gateway<\/td><td>No<\/td><td>\u274c No<\/td><td>\u2705 Yes<\/td><td>Yes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>In Short:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Only run <code>setup.sh<\/code> on one node<\/strong> (commonly the controller)<\/li>\n\n\n\n<li>That machine must be able to SSH to all others using the user you run the installer as<\/li>\n\n\n\n<li>All other setup is done by the installer over SSH!<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to download? Here\u2019s a detailed and up-to-date conclusion for installing the latest Ansible Automation Platform (AAP) 2.5+ with the RPM\/bundle installer\u2014including the minimum requirements and what\u2019s possible (and not)&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-51378","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=51378"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51378\/revisions"}],"predecessor-version":[{"id":59355,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/51378\/revisions\/59355"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=51378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=51378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=51378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}