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) │
└─────────────┘ └─────────────┘ └─────────────┘- Template: Configuração base (imutável após criada)
- Definition: Template + parâmetros do usuário
- 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
- sqlTaxonomia
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: IfNotPresentUser 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: 16Profiles
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: 1GVolumes
volumes:
- name: data
mount_path: /var/lib/mysql
size: 10Gi
- name: config
mount_path: /etc/mysql/conf.d
type: configPorts
ports:
- name: mysql
container_port: 3306
expose: true
protocol: TCPHealth Check
health_check:
type: tcp
port: 3306
initial_delay: 30
interval: 10
timeout: 5
retries: 3Templates Locais vs Remotos
Templates Remotos (Padrão)
Baixados da API centralizada:
deployally list --source remote
deployally deploy --species mysql --source remoteVantagens:
- Sempre atualizados
- Validados e testados
- Versionamento automático
Templates Locais
Armazenados em ~/.config/deployally/templates/:
deployally list --source local
deployally deploy --species mysql --source localVantagens:
- 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-v3O 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.yamlEstrutura 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: truePróximos Passos
- DPL Language - Referência completa da sintaxe
- Taxonomia - Entenda a hierarquia de recursos
- Definitions - Como templates viram containers
- Referência CLI - Comandos para trabalhar com templates