{"id":9398,"date":"2026-08-15T02:43:30","date_gmt":"2026-08-15T09:43:30","guid":{"rendered":"https:\/\/blog.networkpresence.co\/?p=9398"},"modified":"2026-08-15T02:44:20","modified_gmt":"2026-08-15T09:44:20","slug":"use-hermes-to-install-ansible-awx-part-1-the-operator","status":"publish","type":"post","link":"https:\/\/blog.networkpresence.co\/?p=9398","title":{"rendered":"Use Hermes to install Ansible AWX &#8211; Part 1: The Operator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Here I describe customisation \/ settings needed for Hermes Agent to be able to be used to install the Ansible AWX server system to a RHEL based host by root ssh commands and sessions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Firstly, setup the SSH key for your hermes user to be able to ssh to the target host as the root user.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the resulting <code>~\/.ssh\/id_ed25519.pub<\/code> to <code>\/root\/.ssh\/authorized_keys<\/code> file on the target host and ensure the permissions of root&#8217;s authorized_keys file is correct with <code>chmod 600 \/root\/.ssh\/authorized_keys<\/code>&#8221; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now your hermes user can ssh as root to the target AWX host and we can run some prompts through Hermes to action an install of the Ansible AWX software requirements and environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The initial prompt to prepare the chat session and config what Hermes will do is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I want you to install Ansible AWX on this server.\n\nYou are executing terminal commands on the target through the configured\nHermes SSH backend.\n\nThe SSH account is root.\n\nBefore changing anything:\n\n1. Determine the Linux distribution and version.\n2. Determine CPU, RAM and free disk space.\n3. Check whether Kubernetes, K3s, Docker, Podman, kubectl, Helm or an\n   existing AWX installation is present.\n4. Check listening TCP ports.\n5. Check firewall configuration.\n6. Check the server hostname and IP addresses.\n\nDo not modify the system yet.\n\nProduce an installation plan for deploying AWX using the AWX Operator\non a single-node K3s Kubernetes installation.\n\nUse AWX Operator 2.19.1 \/ AWX 24.6.1 unless compatibility checks show\nthat this is inappropriate.\n\nShow me the proposed commands and identify any destructive operations\nbefore proceeding.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assuming that responds well, the prompt to start to action the install is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Proceed with the AWX installation plan.\n\nRequirements:\n\n- Install K3s if Kubernetes is not already installed.\n- Verify the Kubernetes node becomes Ready before continuing.\n- Install kubectl access for root.\n- Install AWX Operator 2.19.1.\n- Create a namespace for AWX.\n- Deploy an AWX instance called awx.\n- Configure persistent storage.\n- Configure the AWX service so it is accessible from my LAN.\n- Wait for all AWX pods to become Ready.\n- Retrieve the generated AWX admin password.\n- Verify the AWX HTTP interface responds.\n\nAfter every major stage, verify that the previous stage succeeded.\n\nIf a command fails, diagnose the error rather than blindly continuing.\n\nDo not disable SELinux or the firewall globally.\nDo not delete existing filesystems, containers, Kubernetes resources\nor firewall configuration without asking me first.\n\nAt completion report:\n\n- AWX URL\n- admin username\n- command used to retrieve the admin password\n- Kubernetes namespace\n- kubectl commands for checking AWX status\n- commands for starting\/checking the system after a reboot<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you hit a default Hermes limit with a message like:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Iteration budget exhausted (90\/90) \u2014 asking model to summarise<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then run the following hermes commands in a new shell and resume the hermes chat or terminal session:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Increase the maximum iteration budget per turn\nhermes config set agent.max_turns 400\n\n# Enable the bounded auto-continuation feature\nhermes config set agent.auto_continue_on_max_iterations.enabled true\nhermes config set agent.auto_continue_on_max_iterations.max_auto_continues 5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If there&#8217;s a problem with the process and for some reason Hermes stops the activity towards completing and verifying the AWX install, then you can often get it to continue by resuming the hermes chat or terminal session and telling it to &#8220;<code>Proceed with the remaining steps towards completing and verifying the AWX install<\/code>&#8220;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This results in a functional AWX Operator install on the IP Address of the target host.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here I describe customisation \/ settings needed for Hermes Agent to be able to be used to install the Ansible AWX server system to a RHEL based host by root ssh commands and sessions. Firstly, setup the SSH key for &hellip; <a href=\"https:\/\/blog.networkpresence.co\/?p=9398\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-9398","post","type-post","status-publish","format-standard","hentry","category-sales"],"_links":{"self":[{"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/posts\/9398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9398"}],"version-history":[{"count":4,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/posts\/9398\/revisions"}],"predecessor-version":[{"id":9406,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=\/wp\/v2\/posts\/9398\/revisions\/9406"}],"wp:attachment":[{"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.networkpresence.co\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}