Plantilles
Les plantilles formen el catàleg del que es pot desplegar. Cadascuna descriu un tipus d'aplicació ("Ubuntu VM", "PostgreSQL", "Kubernetes cluster") com un document YAML que compon projectes de Terraform i scripts, cadascun llegit del seu repositori Git.
Les plantilles oficials de Sora són a sora-project-infrastructure.
Gestionar el catàleg
Importar
Hi ha tres maneres d'afegir una plantilla:
- Des de Git, amb un escaneig que troba les plantilles d'un repositori.
- Pujant un fitxer.
- Amb l'assistent, que dibuixa el pipeline mentre es construeix i llegeix les variables de cada Terraform o script en el moment d'escollir-lo.
Sigui quina sigui la manera, Horizon llegeix el Terraform i els scripts, en descobreix les variables i sortides, i guarda la plantilla completa a la seva base de dades.
Sincronitzar
Una plantilla importada des de Git s'actualitza amb Sync, i només canvia així: el repositori és la font de veritat. Les pujades i les de l'assistent s'editen directament a Horizon.
Sync només torna a llegir les variables d'un projecte quan el camp version de la plantilla és més gran que el desat. Un canvi en un .tf o en un script sense pujar la versió no arriba a Horizon.
Retirar i esborrar
Una plantilla retirada continua funcionant als seus stacks, però no permet crear-ne de nous. És reversible. Només es pot esborrar una plantilla retirada i sense stacks actius.
Tipus
kind | Per a què |
|---|---|
ProxmoxVmTemplate | Desplegar VMs de Proxmox. Horizon en reconeix el vocabulari de variables i emplena ell mateix el host, la ISO, la clau SSH, el registre DNS, la MAC i la monitorització, de manera que l'operador només respon el que realment li correspon |
ApplicationTemplate | El tipus lliure: qualsevol altra cosa. Totes les variables es pregunten a l'operador |
IsoTemplate | Un únic projecte de Terraform que deixa una imatge d'instal·lació a Proxmox |
Estructura
Una plantilla és una llista ordenada de fases, cadascuna amb un o diversos treballs:
- Els treballs d'una fase s'executen en paral·lel; la fase següent comença quan tots han acabat bé.
- Un treball és un projecte de Terraform o un script que s'executa per SSH a la VM d'un treball anterior.
- Cada treball indica el seu repositori, branca i ruta. Una plantilla pot fer servir diversos repositoris.
- Un treball pot permetre múltiples execucions (
multiple_runs), opcionalment en sèrie (serial) i creant abans de destruir (replace_order: create_first). - Un treball llegeix les sortides d'un altre amb
steps.<treball>.<sortida>.
Un exemple simplificat:
apiVersion: horizon/v1
kind: ProxmoxVmTemplate
name: La meva aplicació
version: 1.0.0
phases:
- name: infra
jobs:
- id: vm
kind: terraform
terraform:
repository: https://gitlab.com/ReiIzumi/sora-project-infrastructure.git
name: linux/terraform
- name: app
jobs:
- id: app
kind: shell
target: vm # s'executa a la VM del treball "vm"
script:
repository: https://gitlab.com/usuari/la-meva-app.git
name: jobs/20-install.sh
actions:
- id: rotate
kind: shell
target: vm
script:
repository: https://gitlab.com/usuari/la-meva-app.git
name: actions/rotate.sh
Scripts
Un script declara les seves variables i sortides en un bloc a l'inici, i informa de les sortides imprimint nom=valor:
#!/usr/bin/env bash
# horizon:begin
# lifecycle: [create]
# variables:
# - name: cluster_token
# type: string
# required: true
# sensitive: true
# outputs:
# - name: join_command
# horizon:end
set -euo pipefail
echo "join_command=kubeadm join ${HORIZON_MASTER_K8S_MASTER_IP}:6443 --token ${cluster_token}"
Un script que no imprimeix alguna de les sortides que promet fa fallar el seu treball. Amb run_on: [create, destroy] també s'executa en eliminar la màquina o l'stack.
Checks de Nagios
El bloc nagios: llista els checks de cada VM. Horizon els publica al seu servidor Nagios en acabar un desplegament correcte i els treu en destruir:
nagios:
- job: vm
checks:
- name: PING
service_template: sora-service
command: check_ping!100.0,20%!500.0,60%
- name: Hard disk - Root
service_template: sora-hdd
command: check_nrpe_disk_root
- name: Prometheus Node Exporter
service_template: sora-metrics
http: steps.vm.metrics_urls.node
content: node_exporter_build_info
Horizon valida les ordres i plantilles contra el catàleg del servidor Nagios en sincronitzar i abans de cada desplegament.
Editors de variables
Una variable lliure pot demanar un editor concret al formulari:
| Editor | Què ofereix |
|---|---|
cron | Expressions habituals, validació i la seva descripció en text |
github-release | Emplena l'última release d'un repositori de GitHub, opcionalment d'una línia concreta (v1.36.) |
docker-tag | Emplena l'últim tag d'una imatge de Docker Hub |
options | Una llista de valors, oberta o tancada |
shared-folder-server, shared-folder-path, mount-path | Una carpeta compartida que la VM pot fer servir, i on es munta |
dns-record, dns-record-field, dns-alias | Un registre DNS de l'inventari (reservat o només referenciat), un dels seus camps o un dels seus àlies |
Plantilles ISO
Una plantilla ISO embolcalla un únic projecte de Terraform que deixa una imatge a Proxmox. Per la resta, es comporta igual: importació, sincronització, retirada i esborrat.
Contractes
Tot el que una plantilla ha de complir està documentat a docs/contracts:
- application-template.md: el manifest (fases, treballs, accions, binds).
- application-template-lifecycle.md: què passa en desplegar, editar, reintentar i destruir.
- proxmox-vm-template.md: el vocabulari de variables d'una VM de Proxmox.
- shell-script.md: el bloc d'un script i l'entorn que rep.
- application-template-nagios.md: els checks de Nagios.
- application-template-ui.md: els editors de variables.
- iso-template.md: les plantilles ISO.