Domínios e ações
Configurar domínios e ações
Um domínio é um perímetro funcional (uma aplicação, um serviço, uma categoria de operações). Cada domínio contém ações: os comandos autorizados.
Adicionar um domínio de implementação
[domains.minhaapp]
description = "Aplicação web principal"
[domains.minhaapp.actions.deploy]
description = "Implementar uma versão"
level = "ops"
timeout = 300
execute = "sudo /usr/local/bin/deploy-minhaapp.sh {tag}"
[domains.minhaapp.actions.deploy.args]
tag = { type = "enum", values = ["latest", "stable", "canary"], default = "latest" }
[domains.minhaapp.actions.status]
description = "Verificar o estado do serviço"
level = "read"
timeout = 30
execute = "/usr/local/bin/status-minhaapp.sh"
[domains.minhaapp.actions.restart]
description = "Reiniciar o serviço"
level = "ops"
timeout = 60
execute = "sudo /usr/local/bin/restart-minhaapp.sh"
Utilização:
# Implementar a versão stable
{ echo "minhaapp deploy version=stable"; echo "."; } | ssh ops@servidor
# Verificar o estado
{ echo "minhaapp status"; echo "."; } | ssh monitoring@servidor
# Reiniciar
{ echo "minhaapp restart"; echo "."; } | ssh ops@servidor
Adicionar um domínio de salvaguarda
[domains.backup]
description = "Salvaguardas automatizadas"
[domains.backup.actions.full]
description = "Salvaguarda completa"
level = "ops"
timeout = 1800
execute = "sudo /usr/local/bin/backup-full.sh {domain}"
[domains.backup.actions.config-only]
description = "Salvaguarda da configuração"
level = "ops"
timeout = 600
execute = "sudo /usr/local/bin/backup-config.sh {domain}"
Adicionar um domínio de notificação
[domains.notify]
description = "Notificações"
[domains.notify.actions.slack]
description = "Enviar uma notificação Slack"
level = "ops"
timeout = 30
execute = "/usr/local/bin/notify-slack.sh {channel} {message}"
[domains.notify.actions.slack.args]
channel = { type = "enum", values = ["general", "ops", "alerts"], default = "ops" }
message = { free = true }
O argumento message é declarado com free = true: aceita qualquer valor textual.
{ echo 'notify slack channel=ops message="Implementação concluída"'; echo "."; } | ssh ops@servidor
Adicionar um domínio de manutenção
[domains.infra]
description = "Infraestrutura do servidor"
[domains.infra.actions.healthcheck]
description = "Verificação de saúde dos serviços"
level = "read"
timeout = 30
execute = "/usr/local/bin/healthcheck.sh"
[domains.infra.actions.disk-usage]
description = "Espaço em disco"
level = "read"
timeout = 10
execute = "/usr/bin/df -h"
[domains.infra.actions.logs]
description = "Últimos logs de sistema"
level = "ops"
timeout = 30
execute = "sudo /usr/bin/journalctl -n 100 --no-pager"
Checklist após adicionar uma ação
- Verificar a sintaxe TOML (um erro = fail-fast, código 129)
- Criar o script de execução se necessário
- Adicionar nos sudoers se o comando utiliza
sudo - Testar com
ssh user@servidora partir de outro terminal - Verificar os logs em
/var/log/ssh-frontiere/commands.json
Descoberta
Os comandos help e list permitem ver as ações disponíveis:
# Lista completa com descrições (texto legível via #>)
{ echo "help"; echo "."; } | ssh user@servidor
# Detalhes de um domínio (texto legível via #>)
{ echo "help minhaapp"; echo "."; } | ssh user@servidor
# Lista curta em JSON (domínio + ação)
{ echo "list"; echo "."; } | ssh user@servidor
help devolve texto legível (prefixo #>). list devolve JSON estruturado — mais adequado ao parsing automático. Ambos mostram apenas as ações acessíveis ao nível efetivo do cliente.
Seguinte: Tokens e níveis de segurança — controlar quem pode fazer o quê.