How to AWX

How to AWX

AWX est une interface web et REST pour l’outil d’automatisation ansible.

Installation

À partir de 18.0 il est recommandé de l’installer à travers AWX Operator qui dépend de kubernetes. Il est aussi possible d’utiliser une image docker.

Kubernetes

Documentation: https://ansible.readthedocs.io/projects/awx-operator/en/latest/installation/basic-install.html

Déploiement de AWX Operator sur un cluster Kubernetes :

  • On utilise kustomize pour assembler et appliquer les configurations yaml Kubernetes.

  • Il faut une storage class fonctionnelle dans le cluster.

Remarques :

  • On peut aussi utiliser un chart helm pour l’opérateur uniquement : https://ansible.readthedocs.io/projects/awx-operator/en/latest/installation/helm-install-on-existing-cluster.html

  • Si vous n’avez pas de cluster Kubernetes, on peut facilement en créer un cluster mono-neud avec k3s par exemple voir HowtoK3s

Nous allons créer un dossier awx contenant la configuration pour l’opérateur, une instance et traefik (ingress) :

$ tree -L 3 awx
awx
├── kustomization.yaml
├── awx-instances
│   ├── demo
│   │   ├── awx-instance.yaml
│   │   ├── kustomization.yaml
│   │   └── traefik-ingressroute.yaml
│   └── kustomization.yaml
└── awx-operator
    └── kustomization.yaml
  • un fichier kustomize qui va assembler tout awx/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ./awx-operator
  - ./awx-instances
  • L’opérateur awx/awx-operator/kustomization.yaml qui va être créé dans le namespace awx
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  # Prendre le dernier release tag : https://github.com/ansible/awx-operator/releases
  - github.com/ansible/awx-operator/config/default?ref=2.10.0
# Set the image tags to match the git version from above
images:
  # le tag de l'image doit etre le meme que celui du release tag ci-dessus
  - name: quay.io/ansible/awx-operator
    newTag: 2.10.0

# Specifier le namespace de awx
namespace: awx
  • Une instance…
# awx/awx-instances/demo/kustomization.yaml 
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - awx-instance.yaml
  - traefik-ingressroute.yaml

# awx/awx-instances/demo/awx-instance.yaml 
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: clusterip

# awx/awx-instances/demo/traefik-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: demo-instance-awx
spec:
  entryPoints:
    - websecure
  routes:                           
  - kind: Rule
    match: Host(`awx.chez-vous.org`)
    services:
    - kind: Service
      name: awx-demo-service
      port: 80
  tls:
    certResolver: letsencrypt

on peut aussi configurer directement les paramètres de l’insgress dans le spec de l’instance, voir documentation : https://ansible.readthedocs.io/projects/awx-operator/en/latest/user-guide/network-and-tls-configuration.html

Lancer le Déploiement :

$ kubectl apply -k awx
namespace/awx created
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
serviceaccount/awx-operator-controller-manager created
role.rbac.authorization.k8s.io/awx-operator-awx-manager-role created
role.rbac.authorization.k8s.io/awx-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding created
rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding created
configmap/awx-operator-awx-manager-config created
service/awx-operator-controller-manager-metrics-service created
deployment.apps/awx-operator-controller-manager created
  • Voir ou en est l’installation
$ kubectl -n awx logs -f deployments/awx-operator-controller-manager
# suivre le lancement d'instance(s)
$ kubectl logs -n awx -f deployments/awx-operator-controller-manager -c awx-manager
# Récuperer le mot de passe d'une instance
$ kubectl get secret -n awx awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo

Si tout se passe bien, on

Docker (Déprécié)

Copier le dépôt sur le serveur a partir d’une version stable: https://github.com/ansible/awx/releases/tag

Il faudra installer les paquets suivants:

  • python3
  • python3-venv
  • python3-setuptools-scm
  • python3-psycopg2
  • ansible
  • docker-compose

Le dépôt devra appartenir a l’usager exécutant, il faut s’assurer que les programmes dans le dossier tools ont bien un droit d’exécution. (Faire attention a noexec qui peut remonter jusqu’au conteneur dans certains cas)

Une fois les prérequis installée et les permissions bien appliquée, on peut continuer avec l’installation:

La documentation complète se situe sur Github

$ make docker-compose-build $ make docker-compose

Suite a la complétion, on peut lancer dans un autre terminal:

$ docker exec tools_awx_1 make clean-ui ui-devel

On peut ensuite accéder a l’interface sur https://localhost:8043/#/home

CLI

Une interface de ligne de commande peut aussi être installé directement sur l’hôte

$ pip3 install awxkit

Doc

La documentation peut être installé en local

$ pip3 install sphinx sphinxcontrib-autoprogram
$ cd awxkit/awxkit/cli/docs
$ TOWER_HOST=https://awx.example.org TOWER_USERNAME=example TOWER_PASSWORD=secret make clean html
$ cd build/html/ && python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ..

Configuration

Créer un nouvel admin

$ docker exec -ti tools_awx_1 awx-manage createsuperuser

Utiliser un postgres externe

Il faut aller indiquer le postgres désiré dans les variables de tools/docker-compose/inventory

Migration

Doc officielle https://ansible.readthedocs.io/projects/awx-operator/en/latest/migration/migration.html

On peut migrer en utilisant la doc officielle au sain d’un même cluster kube. Autrement si on migre en 2 cluster kube q distincs, il faut adapter un peu la documentation :

  • Créer l’instance vierge sur la nouvelle machine avec son dossier d’instance kustomize … puis la détruire (simplement kubectl delete le kind awx)
  • Recréer le secret <resourcename>-secret-key en y mettant celui de l’ancien
  • Éditer/recréer la configmap pour postgres et y mettre celui de l’ancien
  • Copier le datadir de postgres
  • Recréer le kind awx/l’instance, c’est tout bon