Conversation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
azurerm has no environment-only config path (unlike aws), so the bare module can't be planned against the emulator directly — a fixture with its own provider block is the only option, same shape as GCP's. The plan still fails at provider configuration: floci-az's self-signed TLS cert fails Go's x509 validation, a floci-az bug outside this repo's control. continue-on-error keeps it from blocking unrelated PRs while it's outstanding. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The README still said "no fixture directory" after the emulator fixture landed, and didn't mention the known TLS failure. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Garinlu
marked this pull request as draft
September 16, 2026 12:24
…rrides Real-sandbox validation (first tofu apply against a live subscription) surfaced a genuine perpetual-diff bug: AKS assigns default_node_pool's upgrade_settings server-side defaults regardless of whether the block is declared, so an undeclared block produced a permanent plan diff. Declared it explicitly, matching Azure's own default, so plan converges. Also surfaced that examples/minimal had no way to override zones or the system node pool's vm_size without editing the file — both are subscription/region-specific in practice (VM family quota and AZ support vary per subscription), so exposed them as passthrough variables like every other module input. Fixed a pre-existing tofu fmt drift in tests/emulator/main.tf found along the way. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
RBAC (AZU-0042): already the provider's default and has been mandatory on AKS for years — declared explicitly so the scanner sees what the API already returns, no behavior change. Network policy (AZU-0043) and disk encryption set (AZU-0067): both structurally out of scope for this empty-shell module. network_policy has no valid value under BYO CNI (network_plugin = "none" only pairs with "azure"); Cilium is the real enforcement once the factory installs it. A customer-managed disk encryption key is a client's own compliance choice on their own Key Vault, the same class of call as Defender for Containers. Both suppressed with #trivy:ignore and argued inline, matching the pattern already used in opentofu/aws/cluster.tf and opentofu/gcp/cluster.tf. Verified locally with trivy config: 0 misconfigurations. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Garinlu
marked this pull request as ready for review
September 17, 2026 09:58
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
opentofu/azure/— VNet, AKS Standard + Node Auto-Provisioning cluster, identities, built on the sprint's four research docs (docs(azure): decide Standard + NAP over AKS Automatic #21, docs(azure): decide the managed scope for upgrades, add-ons, identity #22, docs(azure): decide network & security baseline #23, docs(azure): cloud observability — supervision hors K8s (offre B) #24, all merged).sku_tier = "Standard"+node_provisioning_profile { mode = "Auto" },network_plugin = "none"(BYO CNI, Cilium installed later by the factory),automatic_upgrade_channel = "stable"+KubernetesOfficialsupport plan, private cluster with the public FQDN disabled, Entra Workload ID, Managed Prometheus + Container Insights.azurermattribute (4.x series) and no open-source GitOps equivalent, so it's left out of this empty-shell module rather than guessed at viaazapi; Microsoft Defender for Containers is a subscription-level singleton (same shape as AWS's GuardDuty), so it's excluded entirely rather than exposed as a variable.examples/minimal,tests/(12tofu testruns — mocked, sinceazurermhas no offline-plan path the wayaws/googledo), andtests/emulator(a fixture wrapping the module for CI, required becauseazurermhas no environment-only configuration path either).integration.yaml's azure leg points at the fixture and enables TLS on floci-az. Known red, not blocking (continue-on-error): floci-az's self-signed certificate fails Go's x509 validation, so the plan fails at provider configuration, before any resource — a floci-az bug, not something this repo can fix.examples/minimal, francecentral): full apply succeeded — resource group, VNet, NAT Gateway, private AKS cluster, Container Insights, Managed Prometheus. Surfaced and fixed one genuine bug:default_node_pool.upgrade_settingsgets server-side defaults from AKS regardless of whether it's declared, producing a perpetual plan diff — now declared explicitly. Also exposedzonesandsystem_node_pool_vm_sizeas passthrough variables onexamples/minimal, since both are subscription/region-specific in practice (VM family quota and AZ support vary per subscription — hit both during this validation).#trivy:ignore+ inline rationale, matching the pattern already used inopentofu/aws/cluster.tfandopentofu/gcp/cluster.tf(network_policy has no valid value under BYO CNI; a customer-managed disk encryption key is a client's own compliance choice, same class as Defender).Test plan
tofu fmt -check -recursive,tofu validate— module root andexamples/minimaltofu test— 12/12 passingtflint(realtflint-ruleset-azurerm 0.32.0) — cleanterraform-docs --output-check— clean, both locationsactionlint/yamllintonintegration.yaml— cleantrivy config— 0 misconfigurations (verified locally and in CI)tofu apply/destroyagainst a live subscription — succeeded, one real bug found and fixed🤖 Generated with Claude Code