Skip to main content

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.

compte

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​

kindPer a què
ProxmoxVmTemplateDesplegar 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
ApplicationTemplateEl tipus lliure: qualsevol altra cosa. Totes les variables es pregunten a l'operador
IsoTemplateUn ú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:

EditorQuè ofereix
cronExpressions habituals, validació i la seva descripció en text
github-releaseEmplena l'última release d'un repositori de GitHub, opcionalment d'una línia concreta (v1.36.)
docker-tagEmplena l'últim tag d'una imatge de Docker Hub
optionsUna llista de valors, oberta o tancada
shared-folder-server, shared-folder-path, mount-pathUna carpeta compartida que la VM pot fer servir, i on es munta
dns-record, dns-record-field, dns-aliasUn 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: