Uma ferramenta CLI para provisionar automaticamente novos projetos de dados no Azure DevOps e Databricks com integração completa ao Azure CLI.
Project description
Project Provisioner CLI
Uma ferramenta de linha de comando para automatizar o provisionamento de novos projetos de dados no Azure DevOps e Databricks.
🚀 Instalação
pip install project-provisioner
📖 Uso Simplificado
Modo Interativo (Recomendado)
project-provisioner create-project --interactive
Com Arquivo de Configuração
# 1. Criar arquivo de configuração
project-provisioner init
# 2. Editar o arquivo project-config.yaml
# 3. Executar provisionamento
project-provisioner create-project --config project-config.yaml
Comando Rápido
project-provisioner create-project --project-name "meu-projeto" --organization "https://dev.azure.com/minha-org"
🎯 Principais Melhorias
✅ Antes (Complexo)
project-provisioner create-project \
--project-name "my-new-data-project" \
--azure-devops-organization-url "https://dev.azure.com/your_organization" \
--azure-devops-project-name "YourExistingAzureDevOpsProject" \
--azure-devops-pat "YOUR_AZURE_DEVOPS_PAT" \
--azure-devops-username "your_azure_devops_username" \
--resource-group-name "rg-databricks-projects" \
--location "eastus" \
--databricks-workspace-name "dbr-ws-new-project" \
--databricks-sku "premium" \
--databricks-pat "YOUR_DATABRICKS_PAT" \
--scaffold-source-path "/path/to/your/scaffold/template"
✅ Agora (Simples)
project-provisioner create-project --interactive
🔧 Funcionalidades
Modo Interativo
- ✅ Perguntas guiadas para configuração
- ✅ Valores padrão inteligentes
- ✅ Validação automática
- ✅ Interface amigável
Arquivo de Configuração
- ✅ Template YAML gerado automaticamente
- ✅ Configuração reutilizável
- ✅ Fácil edição e versionamento
Valores Padrão Inteligentes
- ✅ Nomes gerados automaticamente
- ✅ Região padrão:
brazilsouth - ✅ SKU padrão:
premium - ✅ Usuário detectado automaticamente
📋 Exemplo de Arquivo de Configuração
project_name: meu-projeto-dados
azure_devops_organization_url: https://dev.azure.com/sua-organizacao
azure_devops_project_name: DataProjects
azure_devops_pat: SEU_PAT_AQUI
azure_devops_username: seu-usuario
resource_group_name: rg-meu-projeto-dados
location: brazilsouth
databricks_workspace_name: dbr-meu-projeto-dados
databricks_sku: premium
databricks_pat: SEU_DATABRICKS_PAT_AQUI
scaffold_source_path: /caminho/para/seu/scaffold
🎯 Comandos Disponíveis
# Inicializar novo projeto com estrutura scaffold
project-provisioner init
# Inicializar apenas arquivo de configuração
project-provisioner init --config-only
# Pular verificação e configuração do Azure CLI
project-provisioner init --skip-azure-cli
# Mostrar informações do Azure CLI
project-provisioner show-azure-info
# Mostrar informações e salvar no arquivo YAML
project-provisioner show-azure-info --save-config
# Criar projeto (modo interativo)
project-provisioner create-project --interactive
# Criar projeto com arquivo de configuração
project-provisioner create-project --config config.yaml
# Criar projeto com parâmetros mínimos
project-provisioner create-project --project-name "meu-projeto"
# Criar projeto usando dados do Azure CLI
project-provisioner create-project --interactive --user-id "user@domain.com"
# Ver ajuda
project-provisioner --help
🔧 Verificação Automática do Azure CLI
A partir da versão 0.3.0, o comando init inclui verificação e configuração automática do Azure CLI:
✅ O que é verificado automaticamente:
- 🔍 Instalação: Detecta se o Azure CLI está instalado na máquina
- 📦 Instalação Automática: Oferece instalar automaticamente se não estiver presente
- 🔐 Login: Verifica se o usuário está logado no Azure CLI
- 🌐 Login Automático: Oferece fazer login via navegador se necessário
🖥️ Suporte Multi-Plataforma:
- macOS: Instalação via Homebrew ou script oficial
- Linux: Detecção automática de distribuição (Ubuntu/Debian, CentOS/RHEL/Fedora)
- Windows: Instruções para instalação manual ou via winget
📋 Exemplo de Fluxo Automático:
$ project-provisioner init
🚀 Inicializando Novo Projeto
========================================
🔍 Verificando Azure CLI...
❌ Azure CLI não está instalado
Deseja instalar o Azure CLI agora? [Y/n]: y
🔄 Instalando Azure CLI...
📦 Instalando via Homebrew...
✅ Azure CLI instalado com sucesso!
🔐 É necessário fazer login no Azure CLI
Deseja fazer login agora? [Y/n]: y
🔄 Abrindo navegador para login...
✅ Login realizado com sucesso!
📁 Projeto: meu-projeto
📍 Local: /Users/user/meu-projeto
...
⚙️ Opções de Controle:
# Comportamento padrão (com verificação do Azure CLI)
project-provisioner init
# Pular verificação do Azure CLI (se necessário)
project-provisioner init --skip-azure-cli
# Outros comandos existentes continuam funcionando
project-provisioner init --project-name "meu-projeto" --config-only
🚨 Tratamento de Erros:
- ✅ Continua o processo mesmo se a instalação do Azure CLI falhar
- ✅ Funciona normalmente sem Azure CLI (usando configuração padrão)
- ✅ Mensagens informativas sobre o status e próximos passos
- ✅ Graceful fallback para configuração manual quando necessário
🔍 Integração com Azure CLI
A ferramenta agora pode obter automaticamente dados do Azure CLI para preencher configurações:
✅ Dados Obtidos Automaticamente
- Azure Account: Tenant ID, Subscription ID, usuário logado
- Azure DevOps: Organização padrão, projetos disponíveis
- Databricks: Workspaces existentes, localizações, SKUs
- Resource Groups: Grupos de recursos disponíveis
✅ Como Usar
# 1. Inicializar novo projeto (NOVO!)
project-provisioner init
# 2. Verificar e salvar dados do Azure CLI (NOVO!)
project-provisioner show-azure-info --save-config
# 3. Criar projeto usando configuração
project-provisioner create-project --config project-config.yaml
# OU modo interativo com dados do Azure CLI
project-provisioner create-project --interactive
# Com usuário específico
project-provisioner create-project --interactive --user-id "user@domain.com"
✅ Benefícios
- ✅ Scaffold Automático: Criação de estrutura completa de pastas
- ✅ Preenchimento Automático: Dados do Azure CLI salvos no YAML
- ✅ Fluxo Simplificado:
init→show-azure-info --save-config→create-project - ✅ Lista de projetos Azure DevOps disponíveis
- ✅ Lista de workspaces Databricks existentes
- ✅ Detecção automática de localização e SKU
- ✅ Validação de permissões e recursos
🚀 Novo Fluxo de Trabalho Simplificado
1. Inicialização do Projeto
project-provisioner init
O que faz:
- Pergunta o nome do projeto interativamente
- Cria estrutura completa de pastas scaffold:
src/(databricks, python, sql)tests/(unit, integration)config/(ambientes)docs/,scripts/,infrastructure/
- Gera arquivos essenciais (README.md, requirements.txt, .gitignore)
- Tenta obter dados do Azure CLI automaticamente
- Cria arquivo
project-config.yamlpré-preenchido
2. Configuração Automática com Azure CLI
project-provisioner show-azure-info --save-config
O que faz:
- Obtém dados da conta Azure logada
- Lista projetos Azure DevOps disponíveis
- Lista workspaces Databricks existentes
- Salva tudo automaticamente no project-config.yaml
- Mostra quais dados ainda precisam ser configurados
3. Provisionamento Final
project-provisioner create-project --config project-config.yaml
O que faz:
- Usa configuração pré-preenchida
- Cria repositório no Azure DevOps
- Configura workspace Databricks
- Faz deploy do scaffold criado
📋 Exemplo Completo de Uso
# 1. Inicializar novo projeto
$ project-provisioner init
🚀 Inicializando Novo Projeto
========================================
Nome do projeto [data-project-amaro]: meu-projeto-analise
📁 Projeto: meu-projeto-analise
📍 Local: /Users/amaro/meu-projeto-analise
🔍 Tentando obter dados do Azure CLI...
✅ Dados do Azure CLI obtidos com sucesso!
✅ Arquivo de configuração criado: project-config.yaml
Deseja criar a estrutura de pastas do projeto scaffold? [Y/n]: Y
📁 Criando estrutura do projeto em: /Users/amaro/meu-projeto-analise
✅ src/
✅ src/databricks/
✅ src/databricks/notebooks/
✅ src/python/
✅ tests/
✅ config/
✅ docs/
✅ infrastructure/terraform/
... (estrutura completa criada)
🎉 Projeto 'meu-projeto-analise' inicializado com sucesso!
# 2. Verificar e salvar dados do Azure
$ project-provisioner show-azure-info --save-config
🔍 Informações do Azure CLI
========================================
✅ Dados do Azure CLI obtidos com sucesso!
Tenant ID: 37cd273a-1cec-4aae-a297-41480ea54f8d
Organização DevOps: arcelormittal-corp
Projetos disponíveis: 3
✅ Configuração salva em: project-config.yaml
📝 Dados preenchidos automaticamente:
- Localização: brazilsouth
- Usuário: amaro
- Organização Azure DevOps: https://dev.azure.com/arcelormittal-corp
🔑 Ainda é necessário configurar:
- Personal Access Token do Azure DevOps
- Personal Access Token do Databricks
# 3. Editar tokens no arquivo YAML
$ nano project-config.yaml # Adicionar PATs
# 4. Executar provisionamento
$ project-provisioner create-project --config project-config.yaml
🔧 Provisionando projeto: meu-projeto-analise
📦 Criando repositório no Azure DevOps...
📊 Configurando workspace Databricks...
✅ Provisionamento concluído com sucesso!
🔐 Variáveis de Ambiente
Os PATs podem ser fornecidos via variáveis de ambiente:
AZURE_DEVOPS_PAT- Personal Access Token do Azure DevOpsDATABRICKS_PAT- Personal Access Token do Databricks
🧪 Testes
Execução Rápida
# Executar todos os testes
./run_tests.sh
# Ou executar manualmente
pytest tests/ -v
Executar Testes Específicos
# Instalar dependências de desenvolvimento
pip install -e ".[dev]"
# Executar todos os testes
pytest
# Executar testes com cobertura
pytest --cov=project_provisioner --cov-report=term-missing
# Executar testes específicos
pytest tests/test_cli.py
pytest tests/test_core.py
pytest tests/test_config.py
# Executar testes com relatório HTML
pytest --cov=project_provisioner --cov-report=html
Qualidade do Código
# Formatação automática
black project_provisioner/ tests/
# Verificação de estilo
flake8 project_provisioner/ tests/
# Verificação de tipos
mypy project_provisioner/
Estrutura de Testes
tests/
├── __init__.py
├── conftest.py # Configurações e fixtures do pytest
├── test_cli.py # Testes do CLI (36 testes)
├── test_core.py # Testes da lógica principal (6 testes)
└── test_config.py # Testes de configuração (16 testes)
Cobertura de Testes
- Total: 82% de cobertura
- CLI: 75% de cobertura
- Core: 97% de cobertura
- 36 testes executando com sucesso
Tipos de Testes
- ✅ Testes Unitários: Funções individuais
- ✅ Testes de Integração: Fluxos completos
- ✅ Testes de Configuração: Validação de YAML
- ✅ Testes de CLI: Comandos e opções
- ✅ Testes de Mock: Simulação de dependências externas
📝 Próximos Passos
Após o provisionamento:
- Navegue para o diretório do projeto:
cd nome-do-projeto - Configure seu ambiente de desenvolvimento
- Comece a desenvolver!
🤝 Contribuição
Para contribuir com melhorias:
- Fork o projeto
- Crie uma branch para sua feature
git checkout -b feature/nova-funcionalidade
- Commit suas mudanças
git commit -m "Adiciona nova funcionalidade"
- Push para a branch
git push origin feature/nova-funcionalidade
- Abra um Pull Request
Diretrizes de Contribuição
- ✅ Escreva testes para novas funcionalidades
- ✅ Mantenha a compatibilidade com versões anteriores
- ✅ Documente mudanças no README
- ✅ Siga o padrão de código existente
- ✅ Execute
./run_tests.shantes de submeter
Desenvolvimento Local
# Clone o repositório
git clone https://github.com/joseamaro/project-provisioner.git
cd project-provisioner
# Instale em modo desenvolvimento
pip install -e ".[dev]"
# Execute os testes
./run_tests.sh
# Faça suas alterações e teste novamente
pytest tests/ -v
📊 Status do Projeto
- Versão: 0.3.0
- Status: Alpha
- Python: >=3.8
- Dependências: click, PyYAML
- Cobertura de Testes: 82%
- Testes: 36 testes passando
- Nova Funcionalidade: Verificação e instalação automática do Azure CLI
🐛 Reportar Bugs
Se encontrar algum problema:
- Verifique se não foi reportado antes
- Crie uma issue com:
- Descrição detalhada do problema
- Passos para reproduzir
- Versão do Python e sistema operacional
- Logs de erro (se aplicável)
📄 Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file project_provisioner-0.3.0.tar.gz.
File metadata
- Download URL: project_provisioner-0.3.0.tar.gz
- Upload date:
- Size: 38.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4d592981a61599df09048420112a21848b1d234ffe34e8158d72dfe64b85901
|
|
| MD5 |
ebaa26c20245f2840c35ae3d58ed7b05
|
|
| BLAKE2b-256 |
75b6165a2c3a7804cead69c45c6742f57b03030bab914155120f4f309e9e57e4
|
File details
Details for the file project_provisioner-0.3.0-py3-none-any.whl.
File metadata
- Download URL: project_provisioner-0.3.0-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e8b8c1c1bc36235b0c8063aca0af62c4c7406e815d4a11a726580fa17fa6f95
|
|
| MD5 |
3a0271d160018caf4c417bfd1a46704f
|
|
| BLAKE2b-256 |
9fee4bc3a006231fd248737bdbfd215f99230283c818baec63f36580583c60e8
|