Sobes.tech
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.