Com funciona
Les parts d’una instal·lació, què passa en un llançament i on es desen les dades
Arquitectura
AnsibleForms és un servidor Node.js que serveix l’aplicació web i una API REST, amb una base de dades MySQL al darrere. Llegeix els formularis de fitxers YAML i no executa res per si mateix: lliura cada tasca a un runner. Un playbook va a un dels teus contenidors RTE (runtime environment, entorn d’execució), que executa ansible-playbook, i una plantilla o un job va a AWX, AAP, Ascender, Semaphore, Rundeck o Jenkins:
Cada component del diagrama té el seu propi paper:
| Component | Paper |
|---|---|
| Navegador | L’aplicació web Vue: els formularis, el Dissenyador, l’historial de tasques i la configuració |
| Servidor d’AnsibleForms | Avalua els formularis, registra les tasques, executa els workflows i les programacions, lliura cada tasca al seu runner i en fa el seguiment, i serveix l’API REST |
| Runners | On s’executen les tasques, afegits a Connexions > Runners: un formulari n’anomena un amb runner: <name>, o fa servir el runner predeterminat del seu tipus (consulta Runners) |
| Contenidors RTE | Un o diversos contenidors d’entorn d’execució, el mateix servidor iniciat amb AF_ROLE=rte: cadascun executa ansible-playbook per als formularis d’Ansible, amb les biblioteques de python i les col·leccions de la seva imatge, i envia la sortida i l’estat final al servidor a través d’un WebSocket, sense credencials de la base de dades (consulta Com s’executa l’RTE) |
| AWX / AAP / Ascender, Semaphore, Rundeck, Jenkins | Runners per a plantilles i jobs: els formularis d’AWX llancen una plantilla de job o de workflow, els formularis de Semaphore, Rundeck i Jenkins llancen un dels seus jobs, i el servidor en segueix la sortida |
| MySQL / MariaDB | Conté les tasques i la seva sortida, els usuaris, les credencials i les connexions; només el servidor hi llegeix i hi escriu |
| Carpeta persistent | Conté config.yaml, els fitxers de formularis, els playbooks, els registres i les còpies de seguretat |
| Fonts de dades | Emplenen els camps: consultes a bases de dades, API REST, fitxers i altres funcions |
| Magatzems de secrets | Proporcionen l’usuari i la contrasenya d’una credencial en el moment d’usar-la, consulta Magatzems de secrets |
| Repositoris git | Mantenen els formularis, els playbooks i config.yaml sota control de versions |
| Proveïdors d’inici de sessió | Inicien la sessió dels usuaris: LDAP, Entra ID i OIDC, a més dels usuaris locals |
| Canals de notificació | Porten les notificacions i les sol·licituds d’aprovació: correu, Slack, Microsoft Teams, Telegram o un webhook |
| Servidors syslog | Reben el registre i la traça d’auditoria a mesura que s’escriuen, consulta Syslog |
| Client MCP, xat | Opcionals, tots dos desactivats per defecte: el servidor MCP i l’assistent de xat, que necessita un proveïdor de models |
Per defecte, un contenidor executa alhora el servidor, l’aplicació web i la feina en segon pla, al costat d’un RTE. Per a diversos nodes d’aplicació darrere d’un balancejador de càrrega, un worker que executa la feina en segon pla i més RTE, consulta Escalat.
Construït amb
El servidor i la interfície web es basen en aquests components:
| Part | Tecnologia |
|---|---|
| Servidor | Node.js i Express |
| Base de dades | MySQL o MariaDB |
| Interfície web | Vue 3, amb Bootstrap 5 i Font Awesome |
Què passa quan llances un formulari
Un llançament passa pels mateixos passos tant si ve del navegador com de l’API REST:
- Càrrega : el servidor envia només els formularis que permeten els rols de l’usuari, i avalua les expressions del servidor
- Enviament : el navegador converteix els valors dels camps en extravars i els envia amb
POST /api/v2/job - Comprovació : el servidor torna a carregar el formulari per als rols de l’usuari i, amb la validació del llançament activada, comprova els valors
- Registre : la tasca es desa amb l’estat
running, i el seu id s’afegeix a les extravars com a__jobid__ - Aprovació : un formulari amb un punt d’
approvalespera fins que un aprovador accepta la tasca - Credencials : per a un playbook, l’aplicació (mai l’RTE) llegeix les credencials del formulari de la base de dades o d’un magatzem de secrets
- Execució : la tasca va al seu runner, el que el formulari anomena amb
runner:o el predeterminat del seu tipus. Per a un playbook, l’aplicació envia la tasca al seu RTE pel WebSocket de l’RTE, amb les credencials segellades per a ell, i l’RTE executaansible-playbook(consulta Com s’executa l’RTE), i AWX, AAP, Ascender, Semaphore, Rundeck o Jenkins executa una plantilla o un job. Un workflow executa els seus nodes, cadascun com una tasca pròpia al seu propi runner - Seguiment : el servidor desa la sortida a la base de dades a mesura que arriba, enviada per l’RTE a través del seu socket en el cas d’un playbook, o llegida dels altres runners. La pàgina del formulari torna a llegir la tasca cada dos segons, i la pàgina Tasques la segueix en directe a mesura que el servidor anuncia cada canvi
- Final : la tasca rep el seu estat final, i les seves
notificationss’envien per correu i als seus canals de notificació quan el formulari les demana
On es desen les coses
AnsibleForms desa el seu estat en dos llocs: la base de dades MySQL i la carpeta persistent. Fes còpia de seguretat de tots dos.
A la base de dades
La base de dades, AnsibleForms, es crea en el primer inici (tret que ALLOW_SCHEMA_CREATION sigui 0) i conté:
- les tasques, les seves extravars i la seva sortida, les programacions i les tasques desades
- els usuaris locals, els grups i els tokens d’API
- les credencials, xifrades amb
ENCRYPTION_SECRET, i les connexions als magatzems de secrets - els runners, els canals de notificació (inclòs el correu), els servidors syslog, i la configuració de LDAP, SSO, repositoris i assistent de xat
- el registre d’auditoria
A la carpeta persistent
És /app/dist/persistent a la imatge i server/persistent des del codi font; cada ruta té la seva pròpia variable:
| Ruta predeterminada | Variable | Contingut |
|---|---|---|
config.yaml | CONFIG_PATH | Les categories, els rols i les constants |
forms/ | FORMS_FOLDER_PATH | Els fitxers de formularis, .yaml o .yml, en subcarpetes si vols |
playbooks/ | ANSIBLE_PATH | Els playbooks dels formularis ansible, i el seu directori de treball |
repositories/ | REPO_PATH | Els clons dels repositoris git |
forms_backups/ | FORMS_BACKUP_PATH | Les còpies que fa el Dissenyador abans de desar |
backups/ | BACKUP_PATH | Les còpies de seguretat de la base de dades |
uploads/ | UPLOAD_PATH | Els fitxers pujats mitjançant camps file |
logs/ | LOG_PATH | ansibleforms.log i ansibleforms.errors.log |
certificates/ | HTTPS_CERT, HTTPS_KEY | El certificat i la clau, quan HTTPS és 1 |
.env | Les variables d’entorn desades des de les pàgines de configuració (tret que ALLOW_ENV_EDIT sigui 0) |
La clau SSH generada és a HOME_PATH, fora de la carpeta persistent per defecte.