Ascender (AAP alternative)

Ascender is an alternative for the ansible automation platform from RedHat. It is developed as opensource and forked from the AWX v22 project.

For small and medium sized businesses a full implementation of the Redhat automation platform can become quite expensive, therefore it can be a good option to look for an alternative.

Ascender is such an alternative and is based on AWX.
Ascender can be used without a license, but this is only supported by the community. For a business this can be a breaking point. The other option is to get a license for Ascender pro from cicq to get support ( I do not have any connection to any of the products mentioned ).

In this document we will install and test this platform, just as we did with the ansible automation platform.

Table Of Contents

Requirements

For the controller:

System: Rocky Linux 9
memory: 8 GB (4GB minimal)
CPU: 2 cores
disk: 20GB free (24GB)

We installed a base system with Rocky linux as defined in our AAP inventory.

For the execution nodes:

System: Rocky Linux 9
memory: 4 GB
CPU: 2 cores
disk: 20GB free (24GB)

This will also be a standard system with Rocky Linux 9 as defined in my infrastructure as code.

Expectations

As we are used to the automation platform, we have a number of expectations:

  • UI should be intuitive
  • configuration as code should work
  • minimal changes to the ansible code
  • connection to LDAP should work
  • playbooks and schedules should work

Installation for controller

Documentation can be found here:
Ascender documentation

Installing ascender is not that hard, just create a vm with the correct specs and run the following commands:

sudo dnf install git -y

git clone https://github.com/ctrliq/ascender-install.git
cd ascender-install

./config_vars.sh

This wil install the product and starts the script for the basic configuration, if your want to configure ascender by modifying the configuration vars yourself, be my guest, I didn't.

Ascender runs on kubernetes and the installer will install and configure this for you if needed, great job by the guys who created the installer.
The configuration script will ask a number of questions, see below.
Configure the following values:

Select the number of the Kubernetes platform you are using to install Ascender:
1 - k3s
2 - eks
3 - aks
4 - gke
5 - rke2
6 - dkp
7 - ocp
8 - tkgi
Enter your selection [eks]: 1

Boolean indicating whether to set up a new k3s/k8s on premise cluster (true) or use an existing k3s/k8s on premise cluster (false):
1 - true
2 - false
Enter your selection [false]: 1

Boolean indicating whether to use local assets to complete an OFFLINE install (true) or perform a traditional install using internet resources (false):
1 - true
2 - false
Enter your selection [false]: 2

Do you wish to pull container images to serve as additional Execution Environments? If unsure, choose false:
1 - true
2 - false
Enter your selection [false]: 2

Boolean indicating whether or not the kubeconfig file needs to be downloaded to the Ansible controller:
1 - true
2 - false
Enter your selection [false]: 1

Select the number of the protocol you want to support. Selecting 'https' requires the SSL certificate being present:
1 - http
2 - https
Enter your selection [http]: 1

Routable IP address for the K3s Master/Worker node
Enter your selection [127.0.0.1]: 10.1.1.202

Boolean indicating whether to use the local /etc/hosts file for DNS resolution to access Ascender:
1 - true
2 - false
Enter your selection [true]: 2

Where will install artifacts be stored
Enter your selection [{{ playbook_dir }}/../ascender_install_artifacts]: 

DNS resolvable hostname for Ascender service
Enter your selection [ascender.example.com]: ascender.dev.lab

Namespace for Ascender Kubernetes objects
Enter your selection [ascender]: 

Administrator username for Ascender
Enter your selection [admin]: 

Administrator password for Ascender
Enter your selection [hidden]: 

The image tag indicating the version of Ascender you wish to install
Enter your selection [25.6.2]: 

The version of the Ascender Operator used to install Ascender
Enter your selection [25.6.2]: 

Boolean indicating whether to keep the secrets required to encrypt within Ascender (important when backing up):
1 - true
2 - false
Enter your selection [true]: 1

Boolean indicating whether to use an external PostgreSQL database for Ascender:
1 - true
2 - false
Enter your selection [false]:
2

Number of replicas for the Ascender web container
Enter your selection [1]: 

Select the Ascender web container image pull policy:
1 - IfNotPresent
2 - Always
3 - Never
Enter your selection [Always]: 1

Boolean indicating whether to add standard playbooks into Ascender after installation:
1 - true
2 - false
Enter your selection [true]: 1

Boolean indicating whether to install Ledger:
1 - true
2 - false
Enter your selection [false]: 2

Boolean indicating whether to install the Ascender Galaxy Proxy:
1 - true
2 - false
Enter your selection [false]: 2

Edit the resultiong file custom_vars.sh

Ensure the value ASCENDER_MESH_HOSTNAME variable is present in the custom_vars.yml, so the automation mesh is present after installation.

I stopped the firewall because the script failed when the firewall was running (in my test setup):

sudo systemctl stop firewalld
sudo systemctl disable firewalld

This is probably a bug.

run ./setup.sh to install ascender.

After installation completes, go to: https://your-ascender-host-fqdn

ascender-login

After login, you will be directed to the dashboard:

ascender-dashboard

top

Installation for execution nodes

the first step in adding an execution node to the ascender installation is the deployment of the virtual machine.
When the machine is deployed we can login onto the machine using the ansible account.

Now we login to the UI of ascender and start creating a new instance:

ascender-instance

We need to provide the following details:

hostname:      executor01.dev.lab
description:   some description of this host
listener port: leave blank or 27199
instance_type: executor

Click 'SAVE' to save the instance information, the installation bundle will be generated anmd ready for download.

Login on the executor node using a normal user with sudo rights (like ansible):

Run the following command to download and untar the package:

curl -k -o node_install_bundle.tar.gz -u "admin:password" http://<your-ascender-fqdn>/api/v2/instances/3/install_bundle/
tar xvzf node_install_bundle.tar.gz

Create a ssh key for the ansible user and install ansible-core additionally open the firewall for 72199/tcp:

ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

sudo dnf install ansible-core bind-utils

sudo firewall-cmd --zone=public --add-port=27199/tcp --permanent
sudo firewall-cmd --reload

Change the working directory to the extracted package.
Edit and update the inventory.yml file.

---
all:
  hosts:
    remote-execution:
      ansible_host: excution-node-hostname
      ansible_user: ansible # user provided
      ansible_ssh_private_key_file: ~/.ssh/id_rsa

Now run the playbook to install the receptor service:

ansible-playbook -i inventory.yml install_receptor.yml

When all is working as it should, the executor node should become 'ready' in the ascender UI.

ascenter-topology

top

Configuration as code

Working on this..

top