Containeriza o Combodo Azure Data Collector para sincronizar recursos do Azure (VMs, Discos, App Services, AKS, Resource Groups, Subscriptions) com o iTop via REST API.
- Pré-requisitos
- Variáveis de ambiente
- Configuração
- Execução local
- Deploy no Azure Container Instances
- Estrutura do projeto
- Troubleshooting
- Licença
| Requisito | Versão mínima |
|---|---|
| Docker | 20+ |
| Azure CLI | 2.50+ |
| Conta Azure | Service Principal com Reader no(s) subscription(s) |
| iTop | 3.x com módulo combodo-azure-data-collector instalado |
Crie um arquivo .env na raiz do projeto (nunca comite este arquivo):
ITOP_URL=https://seu-itop.exemplo.com/
ITOP_LOGIN=data_collector
ITOP_PASSWORD=senha_segura
MS_CLIENTID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
MS_CLIENTSECRET=seu_client_secret
MS_TENANTID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SYNCHRO_USER=data_collector
CONTACT_TO_NOTIFY=admin@exemplo.comPermissões Azure necessárias: o Service Principal (
MS_CLIENTID) precisa da role Reader nas subscriptions que serão coletadas.
O arquivo params.local.xml usa placeholders ${VAR} que são substituídos pelas variáveis de ambiente na inicialização do container via envsubst. Não é necessário editar o XML diretamente — basta ajustar o .env.
Para customizações avançadas (org_id, status padrão dos objetos, etc.), edite params.local.xml antes de fazer o build.
docker build -t ci-itop-azure-sync:latest .docker run --rm --env-file .env ci-itop-azure-sync:latestO container executa o collector e termina (sem daemon). O PHP roda com memory_limit=1G para suportar ambientes Azure grandes.
- Azure Container Registry (ACR) com a imagem publicada
- Resource Group destino criado
O arquivo deploy.ps1 (não versionado — ver .gitignore) contém o pipeline completo:
docker build— gera a imagem localmenteaz acr login+docker push— publica no ACRaz container create— recria o ACI com a nova imagem
.\deploy.ps1az container create `
--resource-group rg-itop `
--name ci-itop-azure-sync `
--image <acr>.azurecr.io/ci-itop-azure-sync:latest `
--os-type Linux `
--cpu 1 --memory 1.5 `
--restart-policy Never `
--registry-login-server <acr>.azurecr.io `
--registry-username <acr> `
--registry-password "<acr_password>" `
--environment-variables `
ITOP_URL=https://seu-itop.exemplo.com/ `
ITOP_LOGIN=data_collector `
MS_CLIENTID=<client_id> `
MS_TENANTID=<tenant_id> `
SYNCHRO_USER=data_collector `
--secure-environment-variables `
ITOP_PASSWORD="<senha>" `
MS_CLIENTSECRET="<secret>"
--restart-policy Neveré obrigatório — o collector é uma tarefa pontual, não um serviço contínuo.
Use uma Azure Logic App com trigger de recorrência apontando para a API de start do ACI para executar a sincronização periodicamente.
.
├── Dockerfile # Build da imagem PHP 8.1-cli + collector
├── params.local.xml # Template de configuração com placeholders ${VAR}
├── combodo-azure-data-collector-2_0_1.zip # Pacote do collector (não versionado no git)
├── .env # Credenciais locais (não versionado)
├── deploy.ps1 # Script de build + push + deploy ACI (não versionado)
├── .gitignore
└── Readme.md
O container precisa receber as variáveis de ambiente. Certifique-se de usar --env-file .env no docker run.
O container não consegue resolver o hostname do iTop. Verifique conectividade de rede do ambiente onde o container está rodando.
Este erro é do servidor iTop, não do collector. O iTop está com problema na conexão com seu banco de dados MySQL. Verifique o serviço de banco no servidor iTop.
O PHP padrão usa 128 MB. A imagem já configura memory_limit=1G no CMD. Se o problema persistir, aumente o valor no Dockerfile:
CMD ["/bin/sh", "-c", "envsubst < conf/params.local.xml.template > conf/params.local.xml && php -d memory_limit=2G exec.php"]| Erro | Causa | Fix |
|---|---|---|
InvalidOsType |
--os-type ausente |
Adicionar --os-type Linux |
ResourceRequestsNotSpecified |
CPU/memória ausentes | Adicionar --cpu 1 --memory 1.5 |
InaccessibleImage |
Credenciais ACR ausentes | Adicionar --registry-* |
GPL License — baseado no combodo-azure-data-collector.