Aplicando Princípios GitOps para Manter a Configuração de Estado Desejado usando VMware vSphere Configuration Profile – Parte 3

Bem-vindos de volta ao terceiro post da série sobre a automação de fluxos de trabalho do vSphere Configuration Profile (VCP). No primeiro post, exploramos as APIs do VCP e o conjunto de APIs necessárias para trabalhar com os perfis de configuração do vSphere. O segundo post focou no consumo dessas APIs usando PowerCLI e o Unified SDK para Python, demonstrando como elas podem ser integradas aos seus scripts Python e PowerCLI. Recomendo fortemente a leitura de ambos os posts para construir uma compreensão fundamental do VCP e seus casos de uso no mundo real.
O que é Infrastructure as Code (IaC)?
Manter a configuração da infraestrutura é uma prioridade máxima para arquitetos e administradores de cloud. Embora o vSphere Client ofereça uma excelente visão de alto nível do seu ambiente, torna-se difícil manter a consistência ao gerenciar configurações em escala, especialmente em múltiplos locais e clusters. Infrastructure as Code (IaC) resolve esse problema, permitindo que você defina e documente a infraestrutura usando código, em vez de operações manuais na interface do usuário.
Com o IaC, você pode:
- Versionar suas configurações
- Aplicar configurações consistentes em todo o SDDC
- Rastrear desvios de configuração
Em resumo, sua infraestrutura se torna repetível, auditável e automatizada.
O Cenário
Como administrador de cloud, você provavelmente gerencia múltiplas instâncias do VMware Cloud Foundation (VCF), cada uma com vários domínios de workload e clusters. Seu objetivo é simples, mas crítico:
- Manter uma configuração desejada consistente em todos os clusters
- Documentar a configuração para referência futura
- Garantir que as mudanças sejam controladas e rastreáveis
A Solução: GitOps com o Poder das APIs VCP
As APIs VCP são baseadas em REST e funcionam com documentos de configuração JSON. Elas fornecem recursos como:
- Validação de esquema
- Versionamento de documentos de configuração
- Importação e exportação de fluxos de trabalho
- Operações de ciclo de vida para gerenciar configurações
Ao combinar essas APIs com o Git, você desbloqueia um fluxo de trabalho impulsionado por GitOps. Para conseguir isso, você precisa de um controle de versão confiável, apoiado por um repositório Git.
- Repositório GitHub → Armazena documentos de configuração (controle de versão)
- GitHub Actions → Automatiza fluxos de trabalho quando ocorrem mudanças
- Scripts PowerShell → Interagem com as APIs VCP e orquestram operações
Sempre que uma configuração é atualizada no Git, a automação é acionada e a aplica de forma controlada. Para implementar um verdadeiro modelo GitOps, o repositório deve separar claramente:
- Intenção Global → Quais servidores vCenter e clusters devem ser gerenciados
- Estado Específico → O JSON real do perfil de configuração do vSphere para cada cluster
Estrutura do Repositório GitHub
/configprofile
│ README.md
│ vcp_managed_clusters.yaml #Adicione o Cluster que você deseja gerenciar usando VCP
│
├───.github
│ └───workflows #Fluxos de Trabalho do Github Action
│ Initialize_Configprofile.yml #Fluxo de Trabalho de Habilitação do VCP
│ Update_ConfigProfile.yml #Fluxo de Trabalho de Atualização de Configuração
│
├───scripts #Scripts PowerShell usados pelo fluxo de trabalho
│ enable_vcp.ps1 #Script para habilitar o VCP
│ update_config.ps1 #Script para atualizar o perfil de configuração do VCP
│
├───template #Pasta de Modelo
│ clusterAdd.yaml #Exemplo de Esquema Yaml para adicionar clusters
│
├───vc-mgmt-a.site-a.vcf.lab #Pasta VC gerada automaticamente
│ cluster-mgmt-01a.json #Configuração do Cluster para cluster-mgmt-01
│ cluster-mgmt-02a.json #Configuração do Cluster para cluster-mgmt-02
│ cluster-mgmt-03a.json #Configuração do Cluster para cluster-mgmt-03
│ cluster-mgmt-04a.json #Configuração do Cluster para cluster-mgmt-04
│
└───vc-wld01-a.site-a.vcf.lab
cluster-wld01-01a.json #Configuração do Cluster para cluster-wld01-a-01
cluster-wld01-02a.json #Configuração do Cluster para cluster-wld01-a-02
/configprofile
│ README.md
│ vcp_managed_clusters.yaml #Adicione o Cluster que você deseja gerenciar usando VCP
│
├───.github
│ └───workflows #Fluxos de Trabalho do Github Action
│ Initialize_Configprofile.yml #Fluxo de Trabalho de Habilitação do VCP
│ Update_ConfigProfile.yml #Fluxo de Trabalho de Atualização de Configuração
│
├───scripts #Scripts PowerShell usados pelo fluxo de trabalho
│ enable_vcp.ps1 #Script para habilitar o VCP
│ update_config.ps1 #Script para atualizar o perfil de configuração do VCP
│
├───template #Pasta de Modelo
│ clusterAdd.yaml #Exemplo de Esquema Yaml para adicionar clusters
│
├───vc-mgmt-a.site-a.vcf.lab #Pasta VC gerada automaticamente
│ cluster-mgmt-01a.json #Configuração do Cluster para cluster-mgmt-01
│ cluster-mgmt-02a.json #Configuração do Cluster para cluster-mgmt-02
│ cluster-mgmt-03a.json #Configuração do Cluster para cluster-mgmt-03
│ cluster-mgmt-04a.json #Configuração do Cluster para cluster-mgmt-04
│
└───vc-wld01-a.site-a.vcf.lab
cluster-wld01-01a.json #Configuração do Cluster para cluster-wld01-a-01
cluster-wld01-02a.json #Configuração do Cluster para cluster-wld01-a-02
Entendendo o Repositório GitHub
Arquivo de Intenção Global (vcp_managed_clusters.yaml)
Este arquivo define a intenção de alto nível de quais clusters você deseja gerenciar usando VCP e GitOps.
vcName:
clusters:
- name: "clusterName"
managedByVCP: true
refHost: "reference ESX Hostname"
vcName:
clusters:
- name: "clusterName"
managedByVCP: true
refHost: "reference ESX Hostname"
Atualize vcp_managed_clusters.yaml usando o esquema definido em /template/clusterAdd.yaml conforme acima.
Pastas Gerenciadas (vc-*/)
Essas pastas são geradas automaticamente e nomeadas de acordo com os FQDNs do vCenter para facilitar a análise.
JSON de Configuração (*.json)
São exportações brutas das APIs VCP, uma vez que o perfil de configuração é habilitado.
Perfil de Configuração
Eles representam a configuração exata aplicada a cada cluster.
Nos Bastidores: Como a Automação Funciona
Vamos detalhar o que acontece nos bastidores.
Detecção Inteligente de Mudanças
O fluxo de trabalho é inteligentemente ajustado para atualizar apenas as configurações de cluster que foram modificadas. Fazemos isso entendendo a diferença no repositório git e buscando os arquivos *.json que foram modificados.
$changedFiles = git diff --name-only HEAD^ HEAD | Where-Object { $_ -like "vc-*/*.json" }
$changedFiles = git diff --name-only HEAD^ HEAD | Where-Object { $_ -like "vc-*/*.json" }
Isso permite que o GitHub Actions acione o Update_ConfigProfile.yaml nos clusters necessários.
Gerenciamento Assíncrono do Ciclo de Vida
As operações VCP são assíncronas. O script enable_vcp.ps1 segue um ciclo de vida:
- Verificação de Elegibilidade
Invoke-CheckEligibilityClusterConfigurationTransitionAsync - Importar Configuração
Invoke-ImportFromHostClusterConfigurationTransitionAsync - Exportar Configuração
Extrai o JSON bruto e o armazena no Git usando:
[System.IO.File]::WriteAllTextIsso evita problemas de formatação ou escape.
Segurança em Primeiro Lugar: Executar Validação de Rascunho
O mecanismo de segurança já está integrado aos fluxos de trabalho da API VCP. Você não pode aplicar uma configuração de rascunho sem uma pré-verificação e validação da configuração de rascunho. O fluxo de trabalho de atualização é executado da seguinte forma:
- Cria um rascunho de configuração temporário no vCenter
- Valida-o usando:
Invoke-ValidateClusterConfigurationDraftAsync - Se a validação falhar:
- O GitHub Action falha
- A produção permanece intocada
- Se a validação for bem-sucedida
- Aplica a configuração de rascunho
Exemplo de Execução: Fluxo de Trabalho de Ponta a Ponta
Onboarding de um Cluster
Adicione uma entrada de cluster em vcp_managed_clusters.yaml e envie as alterações para a branch main.
O que acontece em seguida:
- O fluxo de trabalho
Initialize_ConfigProfile.yamlé acionado - O VCP é habilitado no cluster
- Uma nova pasta para o vCenter Server e o arquivo JSON de configuração do Cluster são gerados automaticamente
- O bot do GitHub os commita de volta ao repositório
- O cluster está agora sob gerenciamento GitOps.
Operações do Dia 2 – Atualizar/Modificar a Configuração do Cluster
Vamos supor que você queira atualizar ou modificar a configuração atual do cluster.
- Abra
cluster-04.jsonno VS Code - Modifique a configuração
- Envie as alterações
- Crie um Pull Request (PR) e mescle o código na
main
Resultado:
- O fluxo de trabalho
Update_ConfigProfile.yamlé acionado - Um rascunho de configuração é criado no vCenter
- A validação é executada
- A configuração de rascunho é aplicada
Nota de Implementação
Para implementar o GitOps, este repositório utiliza o GitHub Action Self-Hosted Runner. Com um runner auto-hospedado, você tem acesso seguro ao seu ambiente VCF, sem exposição à internet pública, e também pode aplicar políticas de segurança corporativas aos seus runners. Você pode configurar Windows, Linux e macOS como um runner do GitHub Action.
Certifique-se de ter os seguintes componentes instalados em sua máquina runner:
- PowerShell 7
- PowerCLI 13+
- Módulo
powershell-yaml - Git CLI
Siga as instruções do GitHub para saber mais sobre como configurar os runners do GitHub.
Conclusão
Ao aplicar o GitOps aos vSphere Configuration Profiles, passamos de um gerenciamento de infraestrutura reativo para operações automatizadas e orientadas por intenção. Com o GitOps, sua infraestrutura se torna:
- Versionada
- Auditável
- Consistente em todos os ambientes
- Segura para atualizar
- Totalmente automatizada
Em vez de gerenciar configurações manualmente, você agora gerencia a intenção no Git e deixa a automação cuidar do resto. O exemplo aqui demonstra o uso de PowerCLI e GitHub Action. Você pode implementar soluções semelhantes em Python, Java e Terraform, já que os bindings da API VCP estão disponíveis em todas essas linguagens e prontos para uso. O VCP é um exemplo de como o VCF está entregando uma stack de private cloud moderna com uma abordagem API-first. Você pode replicar a mesma abordagem para outros serviços VCF, prontos para uso, integrando as APIs VCF com as ferramentas que você já usa em seu ambiente.
Demonstração
Links Importantes
- Config Profile – Repositório GitHub Action
- Automating Desired State Configuration using vSphere Configuration Profile APIs – Part 1
- Automating vSphere Configuration Profile APIs – Part 2 – PowerCLI and Python Sample Code
- Descubra mais no Blog VMware Cloud Foundation (VCF)
Assine para receber os posts mais recentes por e-mail. Digite seu e-mail… Assinar
Como parceiro certificado e especialista em soluções VMware, a VirtuAllIT pode auxiliar sua empresa na implementação e otimização de estratégias de Infrastructure as Code (IaC) utilizando vSphere Configuration Profiles e GitOps, garantindo que sua infraestrutura seja consistente, segura e automatizada.
Precisa de ajuda com suas soluções de TI?
A VirtuAllIT Solutions oferece consultoria especializada em virtualização, cloud computing e infraestrutura tecnológica.

