Com funciona

Les parts d’una instal·lació, què passa en un llançament i on es desen les dades

  1. Arquitectura
    1. Construït amb
  2. Què passa quan llances un formulari
  3. On es desen les coses

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:

Arquitectura d'AnsibleForms El navegador i un client MCP opcional es comuniquen amb el servidor d'AnsibleForms. El servidor desa les seves dades a MySQL i a la carpeta persistent, i es connecta a fonts de dades, magatzems de secrets, repositoris git, proveïdors d'inici de sessió, canals de notificació, servidors syslog i un proveïdor de models opcional. Els seus runners lliuren cada playbook a un d'un o diversos contenidors RTE, cadascun a través d'un WebSocket, que executen ansible-playbook i retornen la sortida al servidor, i cada plantilla o job a AWX, AAP, Ascender, Semaphore, Rundeck o Jenkins. Navegador formularis, dissenyador, tasques, xat Client MCP opcional Servidor d'AnsibleForms Node.js / Express Aplicació web i API REST Formularis, expressions Workflows, programacions Servidor MCP (opcional) Runners lliuren cada tasca al seu runner Fonts de dades bases de dades, API, fitxers Magatzems de secrets HashiCorp Vault, CyberArk Repositoris git formularis, playbooks, config Inici de sessió LDAP, Entra ID, OIDC Notificacions correu, Slack, Teams, webhooks Servidors syslog el registre, l'auditoria Proveïdor de models opcional, assistent de xat Carpeta persistent config, formularis, playbooks MySQL / MariaDB tasques, usuaris, credencials Contenidors RTE executen ansible-playbook AWX / AAP / Ascender Semaphore, Rundeck, Jenkins playbooks, WebSocket plantilles, jobs

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:

  1. Càrrega : el servidor envia només els formularis que permeten els rols de l’usuari, i avalua les expressions del servidor
  2. Enviament : el navegador converteix els valors dels camps en extravars i els envia amb POST /api/v2/job
  3. 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
  4. Registre : la tasca es desa amb l’estat running, i el seu id s’afegeix a les extravars com a __jobid__
  5. Aprovació : un formulari amb un punt d’approval espera fins que un aprovador accepta la tasca
  6. 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
  7. 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 executa ansible-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
  8. 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
  9. Final : la tasca rep el seu estat final, i les seves notifications s’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.