Junior
O que é a abordagem declarativa no DevOps?
sobes.tech IA
Resposta da IA
A abordagem declarativa no DevOps concentra-se na descrição do estado final desejado do sistema, em vez de na sequência de passos para o alcançar. As ferramentas que utilizam esta abordagem são responsáveis por definir e executar as operações necessárias para levar o sistema a esse estado.
Principais diferenças em relação à abordagem imperativa:
- Imperativo: Descreve como atingir o objetivo (sequência de comandos).
- Declarativo: Descreve o que deve estar no final (estado final).
Exemplos de ferramentas que usam a abordagem declarativa:
- Kubernetes: Descrição do número desejado de réplicas do pod, configuração do serviço, etc., em ficheiros YAML. O Kubernetes mantém esse estado.
- Terraform: Infraestrutura como código. Descrição da infraestrutura desejada (máquinas virtuais, redes, balanceadores) em ficheiros
.tf. O Terraform cria ou altera recursos de acordo com essa descrição. - Ansible (parcialmente, em playbooks): Nas tarefas (
tasks), muitas vezes descreve o estado final (por exemplo, "assegurar que o pacote está instalado", "assegurar que o ficheiro existe com conteúdo específico").
Vantagens:
- Idempotência: A aplicação repetida da mesma descrição declarativa não provocará alterações imprevistas se o sistema já estiver no estado desejado.
- Resiliência: As ferramentas tentam restaurar o estado desejado em caso de desvios.
- Facilidade de compreensão: A descrição do estado é muitas vezes mais intuitiva do que um script detalhado.
- Melhoria na escalabilidade: É mais fácil gerir sistemas grandes e complexos, concentrando-se no resultado final.
- Redução do desvio de configuração: O sistema é ativamente mantido no estado descrito.
Exemplo (comparação de abordagens):
Criar o ficheiro /etc/myapp.conf com conteúdo "data=value".
Imperativo:
# Verificar se o ficheiro existe
if [ ! -f /etc/myapp.conf ]; then
# Criar diretório se não existir
mkdir -p /etc
# Criar ficheiro
echo "data=value" > /etc/myapp.conf
fi
# Ou simplesmente:
# echo "data=value" > /etc/myapp.conf
Declarativo (princípio, não sintaxe real):
file: /etc/myapp.conf
state: present # O ficheiro deve existir
content: "data=value" # Com esse conteúdo
A ferramenta que utiliza a abordagem declarativa determinará se precisa criar o ficheiro, alterar o seu conteúdo ou simplesmente garantir a sua existência.