# /morph-infra - Infrastructure Management

Gerencia infraestrutura Azure usando Bicep templates.

## Uso

```
/morph-infra [action] [options]
```

### Actions

| Action | Descrição |
|--------|-----------|
| `init` | Inicializa estrutura IaC no projeto |
| `validate` | Valida templates Bicep |
| `plan` | Mostra what-if de mudanças |
| `deploy` | Executa deploy dos recursos |
| `destroy` | Remove todos os recursos |

---

## Workflow

### 1. INIT - Inicializar IaC

Quando o usuário solicitar `/morph-infra init`:

1. Criar estrutura `infra/` no projeto:
   ```
   infra/
   ├── main.bicep
   ├── parameters.dev.json
   ├── parameters.prod.json
   └── modules/
       ├── container-app.bicep
       ├── container-app-env.bicep
       ├── sql-database.bicep
       ├── storage.bicep
       ├── key-vault.bicep
       └── app-insights.bicep
   ```

2. Copiar templates de `.morph/templates/infra/`

3. Substituir placeholders:
   - `{{APP_NAME}}` → nome do projeto
   - `{{SUBSCRIPTION_ID}}` → solicitar ao usuário
   - `{{RESOURCE_GROUP}}` → sugerir padrão `rg-{app}-{env}`

4. Documentar no `decisions.md` a estrutura criada

---

### 2. VALIDATE - Validar Templates

Quando o usuário solicitar `/morph-infra validate`:

1. Executar validação Bicep:
   ```bash
   az bicep build --file infra/main.bicep
   ```

2. Verificar parâmetros necessários

3. Reportar erros ou sucesso

---

### 3. PLAN - Preview de Mudanças

Quando o usuário solicitar `/morph-infra plan [env]`:

1. Verificar se Azure CLI está autenticado:
   ```bash
   az account show
   ```

2. Executar what-if:
   ```bash
   az deployment group what-if \
     --resource-group rg-{app}-{env} \
     --template-file infra/main.bicep \
     --parameters @infra/parameters.{env}.json
   ```

3. Apresentar resumo de mudanças:
   - Recursos a criar
   - Recursos a modificar
   - Recursos a deletar
   - Custos estimados

4. ⛔ **PARE e aguarde aprovação** para deploy

---

### 4. DEPLOY - Executar Deploy

Quando o usuário solicitar `/morph-infra deploy [env]`:

1. Verificar aprovação do plan

2. Criar resource group se não existir:
   ```bash
   az group create --name rg-{app}-{env} --location brazilsouth
   ```

3. Executar deploy:
   ```bash
   az deployment group create \
     --resource-group rg-{app}-{env} \
     --template-file infra/main.bicep \
     --parameters @infra/parameters.{env}.json
   ```

4. Capturar outputs:
   - Container App URL
   - SQL Connection String
   - Key Vault URI

5. Atualizar documentação com informações do deploy

---

### 5. DESTROY - Remover Recursos

Quando o usuário solicitar `/morph-infra destroy [env]`:

1. ⚠️ **ALERTAR** que esta ação é irreversível

2. Listar recursos que serão deletados

3. ⛔ **PARE e aguarde confirmação explícita** ("sim, deletar")

4. Executar:
   ```bash
   az group delete --name rg-{app}-{env} --yes --no-wait
   ```

---

## Regras de Segurança

### NUNCA:
- Expor secrets em logs
- Commitar arquivos com secrets
- Deletar recursos de produção sem confirmação explícita
- Criar recursos fora do Bicep (zero portal)

### SEMPRE:
- Usar Key Vault para secrets
- Validar Bicep antes de deploy
- Executar what-if antes de deploy
- Documentar custos estimados
- Manter parameters.json separados por ambiente

---

## Cost Guardian Integration

Antes de qualquer deploy, verificar com Cost Guardian:

1. Estimar custos mensais dos recursos
2. Verificar se está dentro dos limites aprovados:
   - Free tier: sem aprovação
   - Até $10/mês: requer confirmação
   - Acima de $10: requer ADR

---

## Exemplo de Uso

```
Usuário: /morph-infra init
Claude: Criando estrutura IaC...
        - infra/main.bicep
        - infra/parameters.dev.json
        - infra/modules/*.bicep
        Pronto! Execute /morph-infra validate para verificar.

Usuário: /morph-infra plan dev
Claude: Analisando mudanças para ambiente dev...

        CRIAR:
        + Container App Environment
        + Container App
        + SQL Server (Free)
        + Storage Account (LRS)
        + Key Vault
        + Application Insights

        CUSTO ESTIMADO: ~$0/mês (Free tier)

        Aprovar deploy? (sim/não)

Usuário: sim
Claude: Executando deploy...
        ✓ Resource Group criado
        ✓ Deploy concluído em 3m 45s

        OUTPUTS:
        - URL: https://myapp-dev.azurecontainerapps.io
        - SQL: tcp:myapp-dev-sql.database.windows.net
        - Key Vault: https://myapp-dev-kv.vault.azure.net
```

---

*MORPH-SPEC by Polymorphism Tech*
