Skip to content

Ansible Setup

Projectstructuur

Onderstaande weergeeft de Project Folderstructuur in de Root Directory.
Let op: Individuele Files zijn hier nog niet allemaal included.

text
├───ci                       # Lint Scripts voor Playbooks/Inventories/Roles
├───inventory                # Bevat Dev/Staging & Production Inventories + Variables.
│   ├───dev                  # Development Inventory + Variabelen
│   │   ├───hosts.yml        # Inventory File
│   │   ├───group_vars       # De Group_Vars:
│   │   │   ├───all          # Bevat Globale Variables
│   │   │   ├───backend      # Bevat Backend Variables
│   │   │   ├───frontend     # Bevat Frontend Variables
│   │   │   └───proxy        # Bevat Proxy Variables 
│   │   │       └───files    # & SSL Cert + Key voor HTTPS.
│   │   └───host_vars        # De Host_Vars:
│   │       └───controlhost  # Bevat Variables voor de Controlhost;
│   ├───staging              # Idem als Dev maar voor Staging.
│   └───production           # Idem als Dev maar voor Production.
└───roles                    # Roles:
    ├───backend              # Folder voor Backend Roles:
    │   ├───api              # Bevat Tasks/Handlers/Etc...
    │   └───database         # Bevat Tasks/Handlers/Etc...
    ├───frontend             # Folder voor Frontened Roles:
    │   ├───adminportal      # Bevat Tasks/Handlers/Etc...
    │   └───viewer           # Bevat Tasks/Handlers/Etc...
    ├───other                # Folder voor Other Roles:
    │   ├───common           # Bevat Tasks/Handlers/Etc...
    │   └───ssh              # Bevat Tasks/Handlers/Etc...
    └───proxy                # Bevat Tasks/Handlers/Etc...

Daaarnaast bevat de Root-Directory ook nog enkele andere files:

ansible.cfg            # Config: Aanpassingen aan Ansible & Rol-Structuur.
requirements.yml       # Bevat Vereiste Ansible-Collections.

backend.yml            # Playbook om enkel Backend te Deployen.
frontend.yml           # Playbook om enkel Frontend te Deployen.
full.yml               # Playbook om enkel Alles Tegelijk te Deployen.

Dockerfile             # Ansible Image die gebruikt word als Controlhost.
Ansible.gitlab-ci.yml  # Pipeline die Ansible uiteindelijk Deployed.

De ansible.cfg file draait alleen wanneer een Directory niet World-Writable is.
Daarom dat we ook in de Pipeline voorzien dat de CI-Directory ingesteld word met chmod 700 $CI_PROJECT_DIR. Anders geeft Ansible fouten, en volgt deze niet de zelf opgegeven Ansible Config.

Bij ons is die Config van vooral van belang omdat we ervoor kozen om de rollen te herstructureren onder subfolders. Om deze te kunnen includen/vinden in Ansible, moeten we deze meegeven in de ansible.cfg. Ansible lees deze standaard niet.

Belangrijkste ansible.cfg Instellingen

  • (Lijn: 33) Force Color:
    • force_color=true
    • Anders is de output in de Pipeline echt onleesbaar, vertrouw mij.
  • (Lijn: 140) Inventories:
    • inventory=['inventory/dev/hosts.yml', 'inventory/staging/hosts.yml', 'inventory/production/hosts.yml']
    • Dit moet, omdat de Inventory-Locaties afwijken van de Default Ansible-Structuur
  • (Lijn: 229) Roles:
    • roles_path=roles:roles/frontend:roles/backend:roles/other
    • Dit moet, omdat de Roles-Locaties soms afwijken van de Default Ansible-Structuur

Vereisten

  • Python 3.10+ & Ansible‑core 2.15/2.16+
  • Galaxy Collections (Zoals te vinden in requirements.yml):
yaml
collections:
  - name: ansible.posix
    version: 2.1.0
  - name: community.docker
    version: 5.0.4
  - name: community.general
    version: 12.2.0

Installatie:

Note:

Ansible is niet supported voor Windows.

Enkel de Controlhost heeft Ansible nodig. Ansible hoeft dus niet geinstalleerd te worden op de Nodes die automatisch geconfigureerd moeten worden.

Wel moeten de Nodes voorzien worden van de Public Key die tot de Private Key van de Ansible Controlhost behoort. De Private Key veranderd automatisch via Ansible. Deze kan dus veranderd worden in inventory/<ENV>/host_vars/controlhost/vault.yml, waar <ENV> uiteraard dev, staging of production is.

Ansible zelf kan op verschillende manieren geinstalleerd worden voor local development.
De manier die wij zelf hanteerde is de volgende uit de Ansible Documentatie:

bash
python3 -m pip install --user ansible-core
python3 -m pip install --user ansible-lint

Zelf deed ik bovenstaande stappen in een WSL AlmaLinux-10. Maar dit kan zeker anders zijn, afhankelijk van Operating System.

Fire Management System Documentation