Sistema de Templates

Templates são configurações pré-definidas que descrevem como criar e executar um serviço.

Nota: Templates usam a sintaxe DPL (DeployAlly Playbook Language). Consulte a referência DPL para sintaxe completa de inputs, validações, interpolação e condicionais.

O que é um Template

Um template contém:

  • Imagem Docker: Qual imagem usar (ex: mysql:8.4)
  • Metadata: Nome, descrição, versão, tags
  • Parâmetros: Inputs que o usuário deve fornecer
  • Volumes: Onde persistir dados
  • Redes: Como o container se comunica
  • Dependências: Outros serviços necessários

Fluxo de Uso

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Template  │ ──▶ │  Definition │ ──▶ │   Instance  │
│   (Spec)    │     │ (Preenchido)│     │ (Rodando)   │
└─────────────┘     └─────────────┘     └─────────────┘
  1. Template: Configuração base (imutável após criada)
  2. Definition: Template + parâmetros do usuário
  3. Instance: Container em execução

Estrutura de um Template

Metadata

metadata:
  name: MySQL Database Server
  description: Banco de dados relacional MySQL
  version: "8.4"
  tags:
    - database
    - mysql
    - sql

Taxonomia

taxonomy:
  kingdom: assets
  family: database
  species: mysql
  variant: standard
  specimen: "8.4"

A taxonomia define onde o template se encaixa na hierarquia. Veja Taxonomia para detalhes.

Image

image:
  repository: mysql
  tag: "8.4"
  pull_policy: IfNotPresent

User Inputs

Parâmetros que o usuário deve fornecer:

user_inputs:
  root_password:
    type: password
    label: Senha do root
    required: true
    generate:
      type: password
      length: 24

  database_name:
    type: string
    label: Nome do banco
    required: true
    validation:
      pattern: "^[a-z_][a-z0-9_]*$"
      message: "Use apenas letras minúsculas, números e underscore"

  user_name:
    type: string
    label: Usuário do banco
    required: true

  user_password:
    type: password
    label: Senha do usuário
    required: true
    generate:
      type: password
      length: 16

Profiles

Configurações pré-definidas para diferentes cenários:

profiles:
  minimal:
    description: Configuração mínima para testes
    resources:
      memory: 256Mi
      cpu: 0.25

  development:
    description: Configuração para desenvolvimento
    resources:
      memory: 512Mi
      cpu: 0.5

  production:
    description: Configuração para produção
    resources:
      memory: 2Gi
      cpu: 2
    environment:
      MYSQL_INNODB_BUFFER_POOL_SIZE: 1G

Volumes

volumes:
  - name: data
    mount_path: /var/lib/mysql
    size: 10Gi

  - name: config
    mount_path: /etc/mysql/conf.d
    type: config

Ports

ports:
  - name: mysql
    container_port: 3306
    expose: true
    protocol: TCP

Health Check

health_check:
  type: tcp
  port: 3306
  initial_delay: 30
  interval: 10
  timeout: 5
  retries: 3

Templates Locais vs Remotos

Templates Remotos (Padrão)

Baixados da API centralizada:

deployally list --source remote
deployally deploy --species mysql --source remote

Vantagens:

  • Sempre atualizados
  • Validados e testados
  • Versionamento automático

Templates Locais

Armazenados em ~/.config/deployally/templates/:

deployally list --source local
deployally deploy --species mysql --source local

Vantagens:

  • Funcionam offline
  • Personalizáveis
  • Úteis para desenvolvimento

Versionamento

Templates são imutáveis após criação. Cada alteração cria uma nova versão:

mysql:8.4-v1  →  mysql:8.4-v2  →  mysql:8.4-v3

O hash SHA256 da spec garante que você sabe exatamente qual configuração foi usada.

Criando Templates Customizados

Para criar templates locais, crie um arquivo YAML em:

~/.config/deployally/templates/meu-template.yaml

Estrutura mínima:

metadata:
  name: Meu Serviço
  description: Descrição do serviço
  version: "1.0"

taxonomy:
  kingdom: applications
  family: custom
  species: meu-servico
  variant: standard
  specimen: "1.0"

image:
  repository: minha-imagem
  tag: latest

user_inputs:
  config_value:
    type: string
    label: Valor de configuração
    required: true

ports:
  - name: http
    container_port: 8080
    expose: true

Próximos Passos

By Borlot.com.br on 13/02/2026