Skip to content

chore(infra): migrate Bicep -> Terraform (NL naming, ADR-0027, eastus2)#79

Merged
JustAGhosT merged 3 commits into
mainfrom
chore/convolens-bicep-flip
May 17, 2026
Merged

chore(infra): migrate Bicep -> Terraform (NL naming, ADR-0027, eastus2)#79
JustAGhosT merged 3 commits into
mainfrom
chore/convolens-bicep-flip

Conversation

@JustAGhosT

Copy link
Copy Markdown
Collaborator

Summary

Two coupled changes in one PR (per follow-up to the omnipost/convolens rename audit):

  1. Project rename: bicep projectName default + scripts + workflows flip from whatssummarize to convolens.
  2. Resource naming convention migrates from the legacy <type>-<project>-<env> (rg-whatssummarize-dev, kvwhatssummarizedev, cosmos-whatssummarize-dev, etc.) to the NL Azure Naming Standard with the region suffix dropped per mystira ADR-0027 — applied here for cross-project consistency with the omnipost rename (content_creation #128):
{org}-{env}-{project}-{type}     (hyphens for most resources)
{org}{env}{project}{type}        (alphanumeric only — Storage Account)

Region is expressed by the resource group's location property and the region resource tag, not in the resource name.

Worked examples (dev)

Resource Old name New name
Resource Group rg-whatssummarize-dev nl-dev-convolens-rg
Key Vault kvwhatssummarizedev nl-dev-convolens-kv
Storage Account stwhatssummarizedev nldevconvolensst
Cosmos DB cosmos-whatssummarize-dev nl-dev-convolens-cosmos
Azure OpenAI oai-whatssummarize-dev nl-dev-convolens-oai
Redis Cache redis-whatssummarize-dev nl-dev-convolens-redis
App Insights appi-whatssummarize-dev nl-dev-convolens-appi
Container App Env cae-whatssummarize-dev nl-dev-convolens-cae
API Container App ca-whatssummarize-dev-api nl-dev-convolens-api
Static Web App stapp-whatssummarize-dev nl-dev-convolens-swa

All names verified against Azure length + character constraints for dev/staging/prod variants.

Surfaces touched

  • infra/bicep/main.bicep — added org param (default 'nl'); replaced resourcePrefix/resourcePrefixClean with base/baseAlphanumeric; rewrote every module's name interpolation; tags object grew an org field.
  • infra/parameters/{dev,staging,prod}.bicepparamprojectName flipped to convolens; org = 'nl' added; tags include org; adminEmail defaults updated to convolens.com placeholders.
  • infra/scripts/deploy.{sh,ps1}ORG/Org + BASE/Base + BASE_ALPHANUMERIC/BaseAlphanumeric introduced; RG + KV name from ${BASE}.
  • infra/scripts/validate-resources.{sh,ps1} — every resource lookup retargets to the NL-pattern names.
  • .github/workflows/infrastructure.ymlAZURE_RESOURCE_GROUP_* env vars + dynamic RG_NAME use nl-${env}-convolens-rg.
  • .github/workflows/release-validation.yml — full rebuild of name construction inside the validate step.
  • infra/README.md — leading note rewritten; full Naming Convention section + 10 worked examples; az-cli examples updated.

Cutover plan (separate manual ops, not in this PR)

  1. Land this PR — code retargets, no Azure resources are touched.
  2. Fix the AAD federated-credential subjects (AADSTS700213 failure on Preview Changes (dev) since 2025-12-07 — same bug as on omnipost PR #128). See org-meta handoff 2026-05-10-azure-rename-plan-omnipost-convolens.md.
  3. Run the dev infrastructure workflow → creates nl-dev-convolens-rg and child resources cleanly.
  4. Verify with infra/scripts/validate-resources.sh dev.
  5. No old resources to decommission — convolens has nothing deployed under any historical name (verified across all subscriptions during the rename audit).

Test plan

  • az bicep build succeeds for infra/bicep/main.bicep
  • AAD federated credential subjects updated (dev/staging/prod)
  • Dev infrastructure workflow creates nl-dev-convolens-rg cleanly
  • infra/scripts/validate-resources.sh dev passes against the new RG

Out of scope

  • .github/settings.yml repo name field — handled with the GitHub repo rename, not this PR.
  • .github/whatssummarize-mcp-app.json — webhook live/stale decision (deferred).
  • convolens.* domain registration — open question 2 in the rename audit.

🤖 Generated with Claude Code

…-0027

Two coupled changes in one PR (per follow-up to audit + rename plan):

1. Project rename: bicep projectName default + scripts + workflows flip
   from 'whatssummarize' to 'convolens'.
2. Resource naming convention migrates from the legacy
   `<type>-<project>-<env>` (`rg-whatssummarize-dev`, `kvwhatssummarizedev`,
   `cosmos-whatssummarize-dev`, etc.) to the NL Azure Naming Standard
   with the region suffix dropped per mystira ADR-0027 — applied here
   for cross-project consistency:

       {org}-{env}-{project}-{type}    (hyphens for most resources)
       {org}{env}{project}{type}        (alphanumeric only — Storage)

   Region is now expressed by the resource group's `location` property
   and the `region` resource tag.

Surfaces touched:

- `infra/bicep/main.bicep` — added `org` parameter (default `'nl'`,
  allowed `nl|pvc|tws|mys`); replaced `resourcePrefix`/`resourcePrefixClean`
  with `base`/`baseAlphanumeric`; rewrote every module's `name`
  interpolation to the new pattern (`${base}-kv`, `${baseAlphanumeric}st`,
  `${base}-oai`, `${base}-cosmos`, `${base}-redis`, `${base}-appi`,
  `${base}-cae`, `${base}-api`, `${base}-swa`, `${base}-budget`).
  Tags object grew an `org` field.
- `infra/parameters/{dev,staging,prod}.bicepparam` — `projectName` flipped
  to `convolens`; `org = 'nl'` added explicitly; tags include `org`;
  `adminEmail` defaults updated to `convolens.com` placeholders (note:
  the convolens.* domain is **not yet registered** — these are inert
  until the domain question is resolved, same as the previous
  `whatssummarize.com` placeholders were).
- `infra/scripts/deploy.{sh,ps1}` — added `ORG`/`Org`, derived `BASE` /
  `Base` and `BASE_ALPHANUMERIC` / `BaseAlphanumeric`; resource group
  + key-vault names rebuilt from `BASE`.
- `infra/scripts/validate-resources.{sh,ps1}` — same pattern; every
  resource lookup retargets to the NL-pattern names.
- `.github/workflows/infrastructure.yml` — `AZURE_RESOURCE_GROUP_*`
  env vars + dynamic `RG_NAME` use `nl-${env}-convolens-rg`.
- `.github/workflows/release-validation.yml` — full rebuild of resource
  name construction inside the validate step (`BASE`, `${BASE}-kv`,
  `${ORG}${ENV}${PROJECT}st`, etc.).
- `infra/README.md` — leading note rewritten to describe both renames;
  Naming Convention section rewritten with the new pattern + 10
  worked examples; Azure CLI examples (`az group create --name
  nl-dev-convolens-rg`, `az keyvault set-policy --name
  nl-dev-convolens-kv`) and post-deployment endpoints updated.

Cutover plan (separate manual ops, not in this PR):

1. Land this PR — code retargets; no Azure resources are touched.
2. Fix the AAD federated-credential subjects (`AADSTS700213` failure on
   `Preview Changes (dev)` since 2025-12-07 — same bug as on omnipost
   PR #128). See org-meta handoff
   `2026-05-10-azure-rename-plan-omnipost-convolens.md`.
3. Run the dev infrastructure workflow → creates `nl-dev-convolens-rg`
   and child resources cleanly.
4. Verify with `infra/scripts/validate-resources.sh dev`.
5. No old resources to decommission — convolens has nothing deployed
   under any historical name (verified across all subscriptions).

Out of scope (deferred):

- `.github/settings.yml` repo `name` field — handled with the GitHub
  repo rename, not this PR.
- `.github/whatssummarize-mcp-app.json` — webhook live/stale decision.
- `convolens.*` domain registration — open question 2 in the rename
  audit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 10, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@JustAGhosT has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 27 minutes and 32 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a1228b45-fd95-4355-a018-3132e44f71ff

📥 Commits

Reviewing files that changed from the base of the PR and between 55700c7 and be0f0a2.

📒 Files selected for processing (11)
  • .github/workflows/infrastructure.yml
  • .github/workflows/release-validation.yml
  • infra/README.md
  • infra/bicep/main.bicep
  • infra/parameters/dev.bicepparam
  • infra/parameters/prod.bicepparam
  • infra/parameters/staging.bicepparam
  • infra/scripts/deploy.ps1
  • infra/scripts/deploy.sh
  • infra/scripts/validate-resources.ps1
  • infra/scripts/validate-resources.sh
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/convolens-bicep-flip

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud

Copy link
Copy Markdown

@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 2 medium

Alerts:
⚠ 2 issues (≤ 0 issues of at least minor severity)

Results:
2 new issues

Category Results
ErrorProne 2 medium

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

- release-validation.yml: fix CAE/CA names to use ${BASE}-cae and
  ${BASE}-api so they match what bicep deploys (nl-{env}-convolens-*);
  align MISSING tags (container-app-api -> container-apps-api) with
  the report-table 'container-apps' substring lookup.
- deploy.sh, infrastructure.yml: add org tag to RG creation;
  standardise managedBy=bicep across all paths (workflow was using
  managedBy=github-actions).
- deploy.sh, deploy.ps1: remove dead BASE_ALPHANUMERIC /
  $BaseAlphanumeric variable (unused after storage name moved into
  bicep template).
- validate-resources.sh: support COSMOS_DATABASE_NAME env override
  so the Cosmos check no longer assumes databaseName == projectName.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the bicep tree (main + 9 modules + 3 .bicepparam + 4 deploy /
validate scripts) with an equivalent Terraform stack at
infra/terraform/env/dev/.

Why: bicep deployment in eastus repeatedly failed with ServiceUnavailable
on Cosmos DB AZ-redundant accounts despite the template requesting
non-AZ mode. Rather than chase a region-specific bicep workaround,
switch to the AzureRM Terraform pattern already used by sluice; easier
cross-project state hygiene and a single tool to teach.

Stack (env/dev/main.tf):
- RG, Log Analytics, App Insights, Storage Account + 3 blob containers,
  Cosmos serverless + 3 SQL containers, Key Vault + 5 secrets,
  Container Apps Environment + API Container App, Static Web App.
- Redis and OpenAI flag-gated (off by default in dev). Budget alerts
  auto-skip when admin_email is empty.
- Naming follows ADR-0027: {org}-{env}-{project}-{type}, no region suffix.
- Region: eastus2 (healthier Cosmos capacity than eastus).

Remote state:
- nl-tfstate-rg / nltfstateconvolens / tfstate container.
- Key convolens-dev.tfstate. Default azurerm backend (access keys via
  Contributor RBAC).

Auth (configured in tenant 9530cd32-9e33-47f0-9247-ed964730b580):
- AAD app convolens-sp (clientId 8f57a349-eb88-40fd-81eb-1065f84e668b).
- Federated cred subject: repo:neuralliquid/convolens:environment:dev.
- Sub-scoped Contributor for the SP on bb4e3882-...
- env-scoped AZURE_CREDENTIALS GitHub secret on environment dev.

Workflow:
- .github/workflows/infrastructure.yml rewritten: validate (fmt-check +
  validate), plan (with PR comment), apply (push to main / dispatch),
  verify.
- release-validation.yml: comment-only update referencing TF instead
  of bicep.

Verified locally: terraform apply succeeded; all 23 resources up in
nl-dev-convolens-rg.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@JustAGhosT JustAGhosT changed the title chore(infra): rename to convolens + adopt NL naming standard (ADR-0027) chore(infra): migrate Bicep -> Terraform (NL naming, ADR-0027, eastus2) May 11, 2026
@github-actions

Copy link
Copy Markdown

Terraform Plan (dev)

Click to expand
Acquiring state lock. This may take a few moments...
data.azurerm_client_config.current: Reading...
azurerm_resource_group.rg: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg]
data.azurerm_client_config.current: Read complete after 0s [id=Y2xpZW50Q29uZmlncy9jbGllbnRJZD04ZjU3YTM0OS1lYjg4LTQwZmQtODFlYi0xMDY1Zjg0ZTY2OGI7b2JqZWN0SWQ9ZDQ4NzYyOWQtMDc1OC00MTkyLWJmMDAtZGZkNGYyMTRhNzM4O3N1YnNjcmlwdGlvbklkPWJiNGUzODgyLTIwNzktNGJhYi04OTc0LTYxMWJjMGI4YmI1ODt0ZW5hbnRJZD05NTMwY2QzMi05ZTMzLTQ3ZjAtOTI0Ny1lZDk2NDczMGI1ODA=]
azurerm_static_web_app.swa[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Web/staticSites/nl-dev-convolens-swa]
azurerm_log_analytics_workspace.law: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.OperationalInsights/workspaces/nl-dev-convolens-law]
azurerm_key_vault.kv: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.KeyVault/vaults/nl-dev-convolens-kv]
azurerm_storage_account.st: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Storage/storageAccounts/nldevconvolensst]
azurerm_cosmosdb_account.cosmos[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos]
azurerm_application_insights.ai: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Insights/components/nl-dev-convolens-appi]
azurerm_container_app_environment.cae[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.App/managedEnvironments/nl-dev-convolens-cae]
azurerm_key_vault_access_policy.deployer: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.KeyVault/vaults/nl-dev-convolens-kv/objectId/99b63adb-8f1a-4d7a-a98c-5bfe9c7fcd96]
azurerm_key_vault_secret.cosmos_endpoint[0]: Refreshing state... [id=https://nl-dev-convolens-kv.vault.azure.net/secrets/cosmos-db-endpoint/83825780119644b2bc46d5a75da2b552]
azurerm_key_vault_secret.cosmos_key[0]: Refreshing state... [id=https://nl-dev-convolens-kv.vault.azure.net/secrets/cosmos-db-key/9f5c0fca48b048ff97f93e9099863eb1]
azurerm_cosmosdb_sql_database.db[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens]
azurerm_key_vault_secret.cosmos_connection_string[0]: Refreshing state... [id=https://nl-dev-convolens-kv.vault.azure.net/secrets/cosmos-db-connection-string/257323432daf46b0bea651cb955280b4]
azurerm_storage_container.containers["user-uploads"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Storage/storageAccounts/nldevconvolensst/blobServices/default/containers/user-uploads]
azurerm_storage_container.containers["summaries"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Storage/storageAccounts/nldevconvolensst/blobServices/default/containers/summaries]
azurerm_storage_container.containers["chat-exports"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Storage/storageAccounts/nldevconvolensst/blobServices/default/containers/chat-exports]
azurerm_key_vault_secret.storage_connection_string: Refreshing state... [id=https://nl-dev-convolens-kv.vault.azure.net/secrets/storage-connection-string/f437ca08a54d46ebbf12b9a39387efa2]
azurerm_cosmosdb_sql_container.containers["summaries"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/summaries]
azurerm_cosmosdb_sql_container.containers["users"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/users]
azurerm_cosmosdb_sql_container.containers["chats"]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/chats]
azurerm_key_vault_secret.appinsights_connection_string: Refreshing state... [id=https://nl-dev-convolens-kv.vault.azure.net/secrets/appinsights-connection-string/b49878c8df8c451986ff9d02d8905090]
azurerm_container_app.api[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.App/containerApps/nl-dev-convolens-api]
azurerm_key_vault_access_policy.container_app[0]: Refreshing state... [id=/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.KeyVault/vaults/nl-dev-convolens-kv/objectId/801ba185-32e1-4a45-a385-629c79cb6a4c]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  ~ update in-place
-/+ destroy and then create replacement

Terraform planned the following actions, but then encountered a problem:

  # azurerm_container_app.api[0] will be updated in-place
  ~ resource "azurerm_container_app" "api" {
        id                            = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.App/containerApps/nl-dev-convolens-api"
        name                          = "nl-dev-convolens-api"
        tags                          = {
            "costCenter"  = "development"
            "environment" = "dev"
            "managedBy"   = "terraform"
            "org"         = "nl"
            "project"     = "convolens"
        }
        # (10 unchanged attributes hidden)

      ~ template {
            # (6 unchanged attributes hidden)

          ~ container {
              ~ memory            = "1Gi" -> "1.0Gi"
                name              = "api"
                # (5 unchanged attributes hidden)

                # (8 unchanged blocks hidden)
            }

            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # azurerm_cosmosdb_sql_container.containers["chats"] will be updated in-place
  ~ resource "azurerm_cosmosdb_sql_container" "containers" {
        id                  = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/chats"
        name                = "chats"
        # (5 unchanged attributes hidden)

      ~ indexing_policy {
            # (1 unchanged attribute hidden)

          + excluded_path {
              + path = "/\"_etag\"/?"
            }

            # (1 unchanged block hidden)
        }

        # (1 unchanged block hidden)
    }

  # azurerm_cosmosdb_sql_container.containers["summaries"] will be updated in-place
  ~ resource "azurerm_cosmosdb_sql_container" "containers" {
        id                  = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/summaries"
        name                = "summaries"
        # (5 unchanged attributes hidden)

      ~ indexing_policy {
            # (1 unchanged attribute hidden)

          + excluded_path {
              + path = "/\"_etag\"/?"
            }

            # (1 unchanged block hidden)
        }

        # (1 unchanged block hidden)
    }

  # azurerm_cosmosdb_sql_container.containers["users"] will be updated in-place
  ~ resource "azurerm_cosmosdb_sql_container" "containers" {
        id                  = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.DocumentDB/databaseAccounts/nl-dev-convolens-cosmos/sqlDatabases/convolens/containers/users"
        name                = "users"
        # (5 unchanged attributes hidden)

      ~ indexing_policy {
            # (1 unchanged attribute hidden)

          + excluded_path {
              + path = "/\"_etag\"/?"
            }

            # (1 unchanged block hidden)
        }

        # (1 unchanged block hidden)
    }

  # azurerm_key_vault_access_policy.deployer must be replaced
-/+ resource "azurerm_key_vault_access_policy" "deployer" {
      - certificate_permissions = [] -> null
      ~ id                      = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.KeyVault/vaults/nl-dev-convolens-kv/objectId/99b63adb-8f1a-4d7a-a98c-5bfe9c7fcd96" -> (known after apply)
      - key_permissions         = [] -> null
      ~ object_id               = "99b63adb-8f1a-4d7a-a98c-5bfe9c7fcd96" -> "d487629d-0758-4192-bf00-dfd4f214a738" # forces replacement
      - storage_permissions     = [] -> null
        # (4 unchanged attributes hidden)
    }

  # azurerm_storage_account.st will be updated in-place
  ~ resource "azurerm_storage_account" "st" {
        id                                 = "/subscriptions/bb4e3882-2079-4bab-8974-611bc0b8bb58/resourceGroups/nl-dev-convolens-rg/providers/Microsoft.Storage/storageAccounts/nldevconvolensst"
        name                               = "nldevconvolensst"
        tags                               = {
            "costCenter"  = "development"
            "environment" = "dev"
            "managedBy"   = "terraform"
            "org"         = "nl"
            "project"     = "convolens"
        }
        # (97 unchanged attributes hidden)

      + network_rules {
          + bypass                     = [
              + "AzureServices",
            ]
          + default_action             = "Allow"
          + ip_rules                   = (known after apply)
          + virtual_network_subnet_ids = (known after apply)
        }

        # (3 unchanged blocks hidden)
    }

Plan: 1 to add, 5 to change, 1 to destroy.
Releasing state lock. This may take a few moments...
::error::Terraform exited with code 1.

Run ID: 25652430440

@JustAGhosT
JustAGhosT merged commit d4cafe7 into main May 17, 2026
4 checks passed
@JustAGhosT
JustAGhosT deleted the chore/convolens-bicep-flip branch May 17, 2026 09:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant