Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(deps): update terraform hashicorp/terraform to v1.10.3 #834

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Aug 28, 2024

This PR contains the following updates:

Package Type Update Change
hashicorp/terraform required_version minor 1.8.1 -> 1.10.3

Release Notes

hashicorp/terraform (hashicorp/terraform)

v1.10.3

Compare Source

1.10.3 (December 18, 2024)

BUG FIXES:

  • Terraform could panic when encountering an error during plan encoding (#​36212)

v1.10.2

Compare Source

1.10.2 (December 11, 2024)

BUG FIXES:

  • cli: variables in an auto-loaded tfvars file which were overridden during plan incorrectly show as changed during apply [GH-36180]

v1.10.1

Compare Source

1.10.1 (December 4, 2024)

BUG FIXES:

  • cli: Complex variables values set via environment variables were parsed incorrectly during apply (#​36121)
  • config: templatefile would panic if given and entirely unknown map of variables (#​36118)
  • config: templatefile would panic if the variables map contains marked values (#​36127)
  • config: Remove constraint that an expanded resource block must only be used in conjunction with imports using for_each (#​36119)
  • backend/s3: Lock files could not be written to buckets with object locking enabled (#​36120)

v1.10.0

Compare Source

1.10.0 (November 27, 2024)

NEW FEATURES:

  • Ephemeral resources: Ephemeral resources are read anew during each phase of Terraform evaluation, and cannot be persisted to state storage. Ephemeral resources always produce ephemeral values.
  • Ephemeral values: Input variables and outputs can now be defined as ephemeral. Ephemeral values may only be used in certain contexts in Terraform configuration, and are not persisted to the plan or state files.
    • ephemeralasnull function: a function takes a value of any type and returns a similar value of the same type with any ephemeral values replaced with non-ephemeral null values and all non-ephemeral values preserved.

BUG FIXES:

  • The secret_suffix in the kubernetes backend now includes validation to prevent errors when the secret_suffix ends with a number (#​35666).
  • The error message for an invalid default value for an input variable now indicates when the problem is with a nested value in a complex data type. (#​35465)
  • Sensitive marks could be incorrectly transferred to nested resource values, causing erroneous changes during a plan (#​35501)
  • Allow unknown error_message values to pass the core validate step, so variable validation can be completed later during plan
    (#​35537)
  • Unencoded slashes within GitHub module source refs were being truncated and incorrectly used as subdirectories in the request path (#​35552)
  • Terraform refresh-only plans with output only changes are now applyable. (#​35812)
  • Postconditions referencing self with many instances could encounter an error during evaluation (#​35895)
  • The plantimestamp() function would return an invalid date during validation (#​35902)
  • Updates to resources which were forced to use create_before_destroy could lose that flag in the state temporarily and cause cycles if immediately removed from the configuration (#​35966)
  • backend/cloud: Prefer KV tags, even when tags are defined as set (#​35937)
  • Simplify config generation (plan -generate-config-out) for string attributes that contain primitive types (e.g. numbers or booleans) (#​35984)
  • config: issensitive could incorrectly assert that an unknown value was not sensitive during plan, but later became sensitive during apply, causing failures where changes did not match the planned result (#​36012)
  • config: The evaluation of conditional expressions and for expression in HCL could lose marks with certain combinations of unknown values (#​36017)

ENHANCEMENTS:

  • The element function now accepts negative indices (#​35501)
  • Import block validation has been improved to provide more useful errors and catch more invalid cases during terraform validate (#​35543)
  • Performance enhancements for resource evaluation, especially when large numbers of resource instances are involved (#​35558)
  • The plan, apply, and refresh commands now produce a deprecated warning when using the -state flag. Instead use the path attribute within the local backend to modify the state file. (#​35660)
  • backend/cos: Add new auth for Tencent Cloud backend (#​35888)

UPGRADE NOTES:

  • backend/s3: Removes deprecated attributes for assuming IAM role. Must use the assume_role block (#​35721)
  • backend/s3: The s3 backend now supports S3 native state locking. When used with DynamoDB-based locking, locks will be acquired from both sources. In a future minor release of Terraform the DynamoDB locking mechanism and associated arguments will be deprecated. (#​35661)
  • moved: Moved blocks now respect reserved keywords when parsing resource addresses. Configurations that reference resources with type names that match top level blocks and keywords from moved blocks will need to prepend the resource. identifier to these references. (#​35850)
  • config: In order to ensure consistency in results from HCL conditional expressions, marks must be combined from all values within the expression to avoid losing mark information. This typically improves accuracy when validating configuration, but users may see sensitive results where they were lost previously.

Previous Releases

For information on prior major and minor releases, refer to their changelogs:

v1.9.8

Compare Source

1.9.8 (October 16, 2024)

BUG FIXES:

  • init: Highlight missing subdirectories of registry modules in error message (#​35848)
  • init: Prevent crash when loading provider_meta blocks with invalid names (#​35842)
  • config generation: Escape all invalid syntax in generate map keys with quotes (#​35837)
  • plan: also validate provider requirements from state (#​35864)

v1.9.7

Compare Source

1.9.7 (October 2, 2024)

BUG FIXES:

  • config generation: escape map keys with whitespaces (#​35754)

v1.9.6

Compare Source

1.9.6 (September 18, 2024)

BUG FIXES:

  • plan renderer: Render complete changes within unknown nested blocks. (#​35644)
  • plan renderer: Fix crash when attempting to render unknown nested blocks that contain attributes forcing resource replacement. (#​35644)
  • plan renderer: Fix crash when rendering a plan that contains null attributes being update to unknown values. (#​35709)

v1.9.5

Compare Source

1.9.5 (August 20, 2024)

ENHANCEMENTS:

  • cloud: The cloud block can now interact with workspaces that have HCP resource IDs. (#​35495)

BUG FIXES:

  • core: removed blocks with provisioners were not executed when the resource was in a nested module. (#​35611)

v1.9.4

Compare Source

1.9.4 (August 7, 2024)

BUG FIXES:

  • core: Unneeded variable validations were being executed during a destroy plan, which could cause plans starting with incomplete state to fail. (#​35511)
  • init: Don't crash when discovering invalid syntax in duplicate required_providers blocks. (#​35533)

v1.9.3

Compare Source

1.9.3 (July 24, 2024)

ENHANCEMENTS:

  • Terraform now returns a more specific error message in the awkward situation where an input variable validation rule is known to have failed (condition returned false) but the error message is derived from an unknown value. (#​35400)

BUG FIXES:

  • core: Terraform no longer performs an unnecessary refresh when removing an instance targeted by a removed block. (#​35458)
  • config generation: Fix validation error when using nested computed or deprecated attributes. (#​35484)
  • Updated to newer github.com/hashicorp/go-retryablehttp version, addressing CVE-2024-6104, and bringing in updates for several indirect dependencies. (#​35473)
  • Moved to building with Go 1.22.5, which addresses CVE-2024-24791 and several other non-security bugs. (#​35494)

v1.9.2

Compare Source

1.9.2 (July 10, 2024)

BUG FIXES:

  • core: Fix panic when self-referencing direct instances from count and for_each meta attributes. (#​35432)

v1.9.1

Compare Source

1.9.1 (July 3, 2024)

UPGRADE NOTES:

  • Library used by Terraform (hashicorp/go-getter) for installing/updating modules was upgraded from v1.7.4 to v1.7.5. This addresses CVE-2024-6257. This change may have a negative effect on performance of terraform init or terraform get in case of larger git repositories. Please do file an issue if you find the performance difference noticable. (#​35376)

BUG FIXES:

  • terraform test: Removed additional erroneous error message when referencing attributes that don't exist. (#​35408)
  • import blocks: Fix crash that occurs when incorrectly referencing the to resource from the id attribute. (#​35420)

v1.9.0

Compare Source

1.9.0 (June 26, 2024)

If you are upgrading from an earlier minor release, please refer to the Terraform v1.9 Upgrade Guide.

NEW FEATURES:

  • Input variable validation rules can refer to other objects: Previously input variable validation rules could refer only to the variable being validated. Now they are general expressions, similar to those elsewhere in a module, which can refer to other input variables and to other objects such as data resources.
  • templatestring function: a new built-in function which is similar to templatefile but designed to render templates obtained dynamically, such as from a data resource result.

ENHANCEMENTS:

  • terraform plan: Improved presentation of OPA and Sentinel policy evaluations in HCP Terraform remote runs, for logical separation.
  • terraform init now accepts a -json option. If specified, enables the machine readable JSON output. (#​34886)
  • terraform test: Test runs can now pass sensitive values to input variables while preserving their dynamic sensitivity. Previously sensitivity would be preserved only for variables statically declared as being sensitive, using sensitive = true. (#​35021)
  • config: Input variable validation rules can now refer to other objects in the same module. (#​34955)
  • config: templatestring function allows rendering a template provided as a string. (#​34968, #​35224, #​35285)
  • core: Performance improvement during graph building for configurations with an extremely large number of resource blocks. (#​35088)
  • built-in terraform provider: Allows moved block refactoring from the hashicorp/null provider null_resource resource type to the terraform_data resource type. (#​35163)
  • terraform output with cloud block: Terraform no longer suggests that data loss could occur when outputs are not available. (#​35143)
  • terraform console: Now has basic support for multi-line input in interactive mode. (#​34822)
    If an entered line contains opening parentheses/etc that are not closed, Terraform will await another line of input to complete the expression. This initial implementation is primarily intended to support pasting in multi-line expressions from elsewhere, rather than for manual multi-line editing, so the interactive editing support is currently limited.
  • cli: Reduced copying of state to improve performance with large numbers of resources. (#​35164)
  • removed blocks can now declare destroy-time provisioners which will be executed when the associated resource instances are destroyed. (#​35230)

BUG FIXES:

  • remote-exec provisioner: Each remote connection will now be closed immediately after use. (#​34137)
  • backend/s3: Fixed the digest value displayed for DynamoDB/S3 state checksum mismatches. (#​34387)
  • terraform test: Fix bug in which non-Hashicorp providers required by testing modules and initialised within the test files were assigned incorrect registry addresses. (#​35161)
  • config: The templatefile function no longer returns a "panic" error if the template file path is marked as sensitive. Instead, the template rendering result is also marked as sensitive. (#​35180)
  • config: import blocks which referenced resources in non-existent modules were silently ignored when they should have raised an error (#​35330)
  • terraform init: When selecting a version for a provider that has both positive and negative version constraints for the same prerelease -- e.g. 1.2.0-beta.1, !1.2.0-beta.1 -- the negative constraint will now overrule the positive, for consistency with how negative constraints are handled otherwise. Previously Terraform would incorrectly treat the positive as overriding the negative if the specified version was a prerelease. (#​35181)
  • import: import blocks could block a destroy operation if the target resource was already deleted (#​35272)
  • cli: plan output was missing blocks which were entirely unknown (#​35271)
  • cli: fix crash when running providers mirror with an incomplete lock file (#​35322)
  • core: Changing create_before_destroy when replacing an instance, then applying with -refresh=false would order the apply operations incorrectly (#​35261)
  • core: Resource addresses that start with the optional resource. prefix will now be correctly parsed when used as an address target. (#​35333)

UPGRADE NOTES:

  • terraform test: It is no longer valid to specify version constraints within provider blocks within .tftest.hcl files. Instead, version constraints must be supplied within the main configuration where the provider is in use.
  • import: Invalid import blocks pointing to nonexistent modules were mistakenly ignored in prior versions. These will need to be fixed or removed in v1.9.
Previous Releases

For information on prior major and minor releases, see their changelogs:

v1.8.5

Compare Source

1.8.5 (June 5, 2024)

BUG FIXES:

  • terraform test: Remove duplicate warning diagnostic when providing values for unknown variables in run blocks. (#​35172)

v1.8.4

Compare Source

1.8.4 (May 22, 2024)

BUG FIXES:

  • core: Fix exponential slowdown in some cases when modules are using depends_on. (#​35157)
  • import blocks: Fix bug where resources with nested, computed, and optional id attributes would fail to generate configuration. (#​35220)
  • Updated to new golang.org/x/net release, which addressed CVE-2023-45288 (#​35165)

v1.8.3

Compare Source

1.8.3 (May 8, 2024)

BUG FIXES:

  • terraform test: Providers configured within an overridden module could panic. (#​35110)
  • core: Fix crash when a provider incorrectly plans a nested object when the configuration is null (#​35090)

v1.8.2

Compare Source

1.8.2 (April 24, 2024)

BUG FIXES:

  • terraform apply: Prevent panic when a provider erroneously provides unknown values. (#​35048)
  • terraform plan: Replace panic with error message when self-referencing resources and data sources from the count and for_each meta attributes. (#​35047)
  • terraform test: Restore TF_ENV_* variables being made available to testing modules. (#​35014)
  • terraform test: Prevent crash when referencing local variables within overridden modules. (#​35030)

ENHANCEMENTS:

  • Improved performance by removing unneeded additional computation for a disabled experimental feature. (#​35066)

OTHER CHANGES:

  • Update all references to Terraform Cloud to refer to HCP Terraform, the service's new name. This only affects display text; the cloud block and environment variables like TF_CLOUD_ORGANIZATION remain unchanged. (#​35050)

NOTE:

Starting with this release, we are including a copy of our license file in all packaged versions of our releases, such as the release .zip files. If you are consuming these files directly and would prefer to extract the one terraform file instead of extracting everything, you need to add an extra argument specifying the file to extract, like this:

unzip terraform_1.8.2_linux_amd64.zip terraform

Configuration

📅 Schedule: Branch creation - "after 7am and before 11am every weekday" in timezone Europe/London, Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot requested a review from a team as a code owner August 28, 2024 09:27
@renovate renovate bot added the dependencies Pull requests that update a dependency file label Aug 28, 2024
@renovate renovate bot enabled auto-merge (rebase) August 28, 2024 09:27
Copy link

Terraform Version Update

Updating Terraform to 1.9.5 is generally a positive move towards leveraging new features, bug fixes, and improvements in the Terraform ecosystem. However, there are additional improvements and recommendations to consider in this context:

  1. Verify Provider Compatibility: With the update to Terraform 1.9.5, ensure that all providers used in the Terraform configuration are compatible with the new version. This could involve pinning provider versions as well, which should be explicitly defined within the required_providers block for each component. Additionally, reviewing the Terraform Registry for each provider's version compatibility is advised.

    hcl
    required_providers {
    azurerm = {
    source = "hashicorp/azurerm"
    version = "~>2.56.0" # Example version, replace with actual compatible version
    }
    }

    
    
  2. Consistent Formatting and Documentation: Utilize terraform fmt across all Terraform configurations to ensure consistent formatting. This aids in readability and maintainability of the code. Additionally, comprehensive documentation within the files, describing purpose and design decisions, can significantly enhance the maintainability of the infrastructure as code.

  3. Sensitive Data Management: The diff indicates the use of a hardcoded subscription_id within the AzureRM backend configuration. For enhanced security, consider using environment variables or Terraform Cloud/Enterprise for sensitive data to avoid potential exposure.

    backend \"azurerm\" {
      subscription_id = var.subscription_id  # Assuming var.subscription_id is defined and populated securely
    }
  4. State File Security and Management: Ensure that the Terraform state file, especially given it’s stored in an AzureRM backend, is secured appropriately through encryption, access controls, and possibly state locking. The AzureRM backend supports these features, but it's crucial to explicitly configure and review them to prevent unauthorized access and potential state corruption.

  5. Version Constraints for Future-Proofing: Consider using more flexible version constraints for the required_version to automatically include patch updates which often contain important security and bug fixes, without automatically upgrading to new minor versions, which might introduce breaking changes.

    terraform {
      required_version = \"~> 1.9.0\" # This will allow all versions >= 1.9.0 and < 1.10.0
    }

Cost and Carbon Usage Considerations

  • Direct cost or carbon usage implications from this specific Terraform version update are minimal, assuming the updated Terraform version doesn't lead to changes in the provisioned resources.

  • Indirectly, making use of newer Terraform features or providers could lead to more efficient infrastructure provisioning, potentially translating into cost and carbon usage optimizations. For example, adopting newer, more efficient Azure services or configurations could reduce runtime costs and the environmental impact of the deployed infrastructure.

Final Note

  • Always test upgrades in a controlled environment before applying them to production to ensure that there are no unexpected behaviors or compatibility issues.

@hmcts-platform-operations

Plan Result (dev_trafficmanager)

No changes. Your infrastructure matches the configuration.

@hmcts-platform-operations

Plan Result (sbox_appgateway)

Plan: 0 to add, 2 to change, 0 to destroy.
  • Update
    • module.appgateway.azurerm_application_gateway.ag[0]
    • module.appgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0]
Change Result (Click me)
  # module.appgateway.azurerm_application_gateway.ag[0] will be updated in-place
  ~ resource "azurerm_application_gateway" "ag" {
        id                                = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw"
        name                              = "aks-fe-00-sbox-agw"
        tags                              = {
            "application"  = "core"
            "autoShutdown" = "true"
            "builtFrom"    = "hmcts/sds-azure-platform"
            "businessArea" = "Cross-Cutting"
            "criticality"  = "Low"
            "environment"  = "sandbox"
            "expiresAfter" = "3000-01-01"
            "startupMode"  = "always"
        }
        # (8 unchanged attributes hidden)

      - probe {
          - host                                      = "darts.sandbox.apps.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/darts-portal" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "darts-portal" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-frontend.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/pip-frontend" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-frontend" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "portal-sbox.pre-recorded-evidence.justice.gov.uk" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/portal-sbox" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "portal-sbox" -> null
          - path                                      = "/SignIn?ReturnUrl=%2F" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pre-portal.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/pre-portal" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pre-portal" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "sds-api-mgmt.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/sds-api-mgmt" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "sds-api-mgmt" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "toffee.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/toffee" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "toffee" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-admin-web.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/vh-admin-web" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-admin-web" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-test-web.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/vh-test-web" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-test-web" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-video-web.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw/probes/vh-video-web" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-video-web" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      + probe {
          + host                                      = "darts.sandbox.apps.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "darts-portal"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-frontend.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-frontend"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "portal-sbox.pre-recorded-evidence.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "portal-sbox"
          + path                                      = "/SignIn?ReturnUrl=%2F"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pre-portal.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pre-portal"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "sds-api-mgmt.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "sds-api-mgmt"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "toffee.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "toffee"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-admin-web.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-admin-web"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-test-web.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-test-web"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-video-web.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-video-web"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }

        # (44 unchanged blocks hidden)
    }

  # module.appgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostics_access_logs_sa" {
        id                             = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-sbox-agw|app-gw-storage-account"
        name                           = "app-gw-storage-account"
        # (6 unchanged attributes hidden)

      - metric {
          - category = "AllMetrics" -> null
          - enabled  = false -> null

          - retention_policy {
              - days    = 0 -> null
              - enabled = false -> null
            }
        }

        # (5 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

@hmcts-platform-operations

Plan Result (sbox_apim_appgw)

Plan: 0 to add, 2 to change, 0 to destroy.
  • Update
    • module.app-gw.azurerm_application_gateway.ag[0]
    • module.app-gw.azurerm_monitor_diagnostic_setting.diagnostic_settings[0]
Change Result (Click me)
  # module.app-gw.data.azurerm_monitor_diagnostic_categories.diagnostic_categories will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "azurerm_monitor_diagnostic_categories" "diagnostic_categories" {
      + id                  = (known after apply)
      + log_category_groups = (known after apply)
      + log_category_types  = (known after apply)
      + logs                = (known after apply)
      + metrics             = (known after apply)
      + resource_id         = "/subscriptions/ea3a8c1e-af9d-4108-bc86-a7e2d267f49c/resourceGroups/hmcts-hub-sbox-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-sandbox-agw"
    }

  # module.app-gw.azurerm_application_gateway.ag[0] will be updated in-place
  ~ resource "azurerm_application_gateway" "ag" {
        id                                = "/subscriptions/ea3a8c1e-af9d-4108-bc86-a7e2d267f49c/resourceGroups/hmcts-hub-sbox-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-sandbox-agw"
        name                              = "sdshmcts-apim00-sandbox-agw"
        tags                              = {
            "application"  = "core"
            "builtFrom"    = "hmcts/sds-azure-platform"
            "businessArea" = "Cross-Cutting"
            "criticality"  = "Low"
            "environment"  = "sandbox"
            "expiresAfter" = "3000-01-01"
            "startupMode"  = "always"
        }
        # (8 unchanged attributes hidden)

      - probe {
          - host                                      = "sds-api-mgmt-appgw.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/ea3a8c1e-af9d-4108-bc86-a7e2d267f49c/resourceGroups/hmcts-hub-sbox-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-sandbox-agw/probes/sds-api-mgmt-appgw-probe" -> null
          - interval                                  = 10 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "sds-api-mgmt-appgw-probe" -> null
          - path                                      = "/status-0123456789abcdef" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      + probe {
          + host                                      = "sds-api-mgmt-appgw.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 10
          + minimum_servers                           = 0
          + name                                      = "sds-api-mgmt-appgw-probe"
          + path                                      = "/status-0123456789abcdef"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }

        # (15 unchanged blocks hidden)
    }

  # module.app-gw.azurerm_monitor_diagnostic_setting.diagnostic_settings[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostic_settings" {
        id                             = "/subscriptions/ea3a8c1e-af9d-4108-bc86-a7e2d267f49c/resourceGroups/hmcts-hub-sbox-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-sandbox-agw|AppGw"
        name                           = "AppGw"
        # (5 unchanged attributes hidden)

      ~ metric {
          + eventhub_authorization_rule_id = (known after apply)
          + eventhub_name                  = (known after apply)
          + id                             = (known after apply)
          + log_analytics_destination_type = (known after apply)
          + log_analytics_workspace_id     = (known after apply)
          + name                           = (known after apply)
          + partner_solution_id            = (known after apply)
          + storage_account_id             = (known after apply)
          + target_resource_id             = (known after apply)
        } -> (known after apply)

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

@hmcts-platform-operations

Plan Result (sbox_backendappgateway)

Plan: 0 to add, 2 to change, 0 to destroy.
  • Update
    • module.backendappgateway.azurerm_application_gateway.ag[0]
    • module.backendappgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0]
Change Result (Click me)
  # module.backendappgateway.azurerm_application_gateway.ag[0] will be updated in-place
  ~ resource "azurerm_application_gateway" "ag" {
        id                                = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw"
        name                              = "aks00-sbox-agw"
        tags                              = {
            "application"  = "core"
            "autoShutdown" = "true"
            "builtFrom"    = "hmcts/sds-azure-platform"
            "businessArea" = "Cross-Cutting"
            "criticality"  = "Low"
            "environment"  = "sandbox"
            "expiresAfter" = "3000-01-01"
            "startupMode"  = "always"
        }
        # (8 unchanged attributes hidden)

      - probe {
          - host                                      = "darts-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/darts-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "darts-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "darts-gateway.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/darts-gateway" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "darts-gateway" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "darts-stub-services.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/darts-stub-services" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "darts-stub-services" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "labs-mokainos.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/labs-mokainos" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "labs-mokainos" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-account-management.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pip-account-management" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-account-management" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-channel-management.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pip-channel-management" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-channel-management" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-data-management.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pip-data-management" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-data-management" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-publication-services.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pip-publication-services" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-publication-services" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pip-subscription-management.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pip-subscription-management" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pip-subscription-management" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pre-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pre-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pre-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "pre-portal.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/pre-portal" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "pre-portal" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "test-override.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/test-override" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "test-override" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "toffee-recipe-backend.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/toffee-recipe-backend" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "toffee-recipe-backend" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-bookings-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/vh-bookings-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-bookings-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-notification-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/vh-notification-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-notification-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-test-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/vh-test-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-test-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-user-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/vh-user-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-user-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "vh-video-api.sandbox.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw/probes/vh-video-api" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-video-api" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      + probe {
          + host                                      = "darts-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "darts-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "darts-gateway.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "darts-gateway"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "darts-stub-services.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "darts-stub-services"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "labs-mokainos.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "labs-mokainos"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-account-management.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-account-management"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-channel-management.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-channel-management"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-data-management.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-data-management"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-publication-services.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-publication-services"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pip-subscription-management.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pip-subscription-management"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pre-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pre-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pre-portal.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pre-portal"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "test-override.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "test-override"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "toffee-recipe-backend.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "toffee-recipe-backend"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-bookings-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-bookings-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-notification-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-notification-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-test-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-test-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-user-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-user-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "vh-video-api.sandbox.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-video-api"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }

      ~ ssl_policy {
          + min_protocol_version = "TLSv1_2"
            # (4 unchanged attributes hidden)
        }

        # (99 unchanged blocks hidden)
    }

  # module.backendappgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostics_access_logs_sa" {
        id                             = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/ss-sbox-network-rg/providers/Microsoft.Network/applicationGateways/aks00-sbox-agw|app-gw-storage-account"
        name                           = "app-gw-storage-account"
        # (6 unchanged attributes hidden)

      - metric {
          - category = "AllMetrics" -> null
          - enabled  = false -> null

          - retention_policy {
              - days    = 0 -> null
              - enabled = false -> null
            }
        }

        # (5 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

@hmcts-platform-operations

Plan Result (sbox_apim)

No changes. Your infrastructure matches the configuration.

@hmcts-platform-operations
Copy link

hmcts-platform-operations commented Aug 28, 2024

Plan Result (sbox_shutter_static_webapp)

Plan: 0 to add, 1 to change, 0 to destroy.
  • Update
    • module.static_webapp.azurerm_dns_txt_record.zone_validate["toffee"]
Change Result (Click me)
  # module.static_webapp.azurerm_dns_txt_record.zone_validate["toffee"] will be updated in-place
  ~ resource "azurerm_dns_txt_record" "zone_validate" {
        id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformMgmtRG/providers/Microsoft.Network/dnsZones/sandbox.platform.hmcts.net/TXT/_dnsauth.toffee"
        name                = "_dnsauth.toffee"
        tags                = {}
        # (4 unchanged attributes hidden)

      - record {
          # At least one attribute in this block is (or was) sensitive,
          # so its contents will not be displayed.
        }
      + record {
          # At least one attribute in this block is (or was) sensitive,
          # so its contents will not be displayed.
        }
    }

Plan: 0 to add, 1 to change, 0 to destroy.

@hmcts-platform-operations
Copy link

hmcts-platform-operations commented Aug 28, 2024

Plan Result (sbox_frontdoor)

Plan: 0 to add, 1 to change, 0 to destroy.
  • Update
    • module.premium_front_door.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0]
Change Result (Click me)
  # module.premium_front_door.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostics_access_logs_sa" {
        id                             = "/subscriptions/a8140a9e-f1b0-481f-a4de-09e2ee23f7ab/resourceGroups/lz-sbox-rg/providers/Microsoft.Cdn/profiles/sdshmcts-sbox|fd-log-analytics-logs-sa"
        name                           = "fd-log-analytics-logs-sa"
        # (6 unchanged attributes hidden)

      - metric {
          - category = "AllMetrics" -> null
          - enabled  = false -> null

          - retention_policy {
              - days    = 0 -> null
              - enabled = false -> null
            }
        }

        # (4 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

@hmcts-platform-operations

Plan Result (prod_appgateway)

Plan: 0 to add, 2 to change, 0 to destroy.
  • Update
    • module.appgateway.azurerm_application_gateway.ag[0]
    • module.appgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0]
Change Result (Click me)
  # module.appgateway.azurerm_application_gateway.ag[0] will be updated in-place
  ~ resource "azurerm_application_gateway" "ag" {
        id                                = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw"
        name                              = "aks-fe-00-prod-agw"
        tags                              = {
            "application"  = "core"
            "builtFrom"    = "hmcts/sds-azure-platform"
            "businessArea" = "Cross-Cutting"
            "criticality"  = "High"
            "environment"  = "production"
            "startupMode"  = "always"
        }
        # (8 unchanged attributes hidden)

      - probe {
          - host                                      = "admin.hearings.reform.hmcts.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/vh-admin-web" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "vh-admin-web" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "administrativeappeals.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-admin-appeals" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-admin-appeals" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "c100-application.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/c100-application" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "c100-application" -> null
          - path                                      = "/status" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "carestandards.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-care-standards" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-care-standards" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "cicap.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-cicap" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-cicap" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "darts.apps.hmcts.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/darts-portal" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "darts-portal" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "ejudiciary.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/ejudiciary-home-apex" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "ejudiciary-home-apex" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "employmentappeals.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-employment-appeals" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-employment-appeals" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "financeandtax.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-finance-tax" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-finance-tax" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "home.ejudiciary.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/ejudiciary-home" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "ejudiciary-home" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "immigrationservices.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-immigration-svcs" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-immigration-svcs" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "informationrights.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-info-rights" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-info-rights" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "juror-bureau.justice.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/jd-bureau" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "jd-bureau" -> null
          - path                                      = "/" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "juror.apps.hmcts.net" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/juror-bureau" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "juror-bureau" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "landregistrationdivision.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-land-reg-division" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-land-reg-division" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "landschamber.decisions.tribunals.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/trib-lands-chamber" -> null
          - interval                                  = 20 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "trib-lands-chamber" -> null
          - path                                      = "/health/liveness" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      - probe {
          - host                                      = "portal.pre-recorded-evidence.justice.gov.uk" -> null
          - id                                        = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw/probes/portal" -

# ...
# ... The maximum length of GitHub Comment is 65536, so the content is omitted by tfcmt.
# ...

                                = "home.ejudiciary.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "ejudiciary-home"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "immigrationservices.decisions.tribunals.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "trib-immigration-svcs"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "informationrights.decisions.tribunals.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "trib-info-rights"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "juror-bureau.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "jd-bureau"
          + path                                      = "/"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "juror.apps.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "juror-bureau"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "landregistrationdivision.decisions.tribunals.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "trib-land-reg-division"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "landschamber.decisions.tribunals.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "trib-lands-chamber"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "portal.pre-recorded-evidence.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "portal"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "pre-portal.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "pre-portal"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "proxywaf.digital.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---redirect-service"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "reply-jury-summons.service.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "juror-public"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "sds-api-mgmt.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "sds-api-mgmt"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "sds-build.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "sds-build"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "sds-sandbox-build.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "sds-sandbox-build"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "sign-in.court-tribunal-hearings.service.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "court-tribunal-hearings-b2c-sign-in"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "staff.court-tribunal-hearings.service.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "court-tribunal-hearings-b2c-staff"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "static-sds-sandbox-build.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "static-sds-sandbox-build"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "toffee.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "toffee"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "transportappeals.decisions.tribunals.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "trib-tansport-appeals"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "video.hearings.reform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "vh-video-web"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "waf.casetracker.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---civilappeals-casetracker"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "waf.certificatedbailiffs.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---certificatedbailiffs"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "waf.courtfines.direct.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---courtfines"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "waf.immigrationappealsonline.justice.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---immigration-appeals-iacfees"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "waf.tribunalsdecisions.service.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "dts-legacy-apps---utiac"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "www.court-tribunal-hearings.service.gov.uk"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "court-tribunal-hearings"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }
      + probe {
          + host                                      = "www.ejudiciary.net"
          + id                                        = (known after apply)
          + interval                                  = 20
          + minimum_servers                           = 0
          + name                                      = "ejudiciary-home-www"
          + path                                      = "/health/liveness"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }

        # (152 unchanged blocks hidden)
    }

  # module.appgateway.azurerm_monitor_diagnostic_setting.diagnostics_access_logs_sa[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostics_access_logs_sa" {
        id                             = "/subscriptions/5ca62022-6aa2-4cee-aaa7-e7536c8d566c/resourceGroups/ss-prod-network-rg/providers/Microsoft.Network/applicationGateways/aks-fe-00-prod-agw|app-gw-storage-account"
        name                           = "app-gw-storage-account"
        # (6 unchanged attributes hidden)

      - metric {
          - category = "AllMetrics" -> null
          - enabled  = false -> null

          - retention_policy {
              - days    = 0 -> null
              - enabled = false -> null
            }
        }

        # (5 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

@hmcts-platform-operations

Plan Result (prod_trafficmanager)

No changes. Your infrastructure matches the configuration.

@hmcts-platform-operations

Plan Result (stg_apim_appgw)

Plan: 0 to add, 2 to change, 0 to destroy.
  • Update
    • module.app-gw.azurerm_application_gateway.ag[0]
    • module.app-gw.azurerm_monitor_diagnostic_setting.diagnostic_settings[0]
Change Result (Click me)
  # module.app-gw.data.azurerm_monitor_diagnostic_categories.diagnostic_categories will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "azurerm_monitor_diagnostic_categories" "diagnostic_categories" {
      + id                  = (known after apply)
      + log_category_groups = (known after apply)
      + log_category_types  = (known after apply)
      + logs                = (known after apply)
      + metrics             = (known after apply)
      + resource_id         = "/subscriptions/0978315c-75fe-4ada-9d11-1eb5e0e0b214/resourceGroups/hmcts-hub-prod-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-stg-agw"
    }

  # module.app-gw.azurerm_application_gateway.ag[0] will be updated in-place
  ~ resource "azurerm_application_gateway" "ag" {
        id                                = "/subscriptions/0978315c-75fe-4ada-9d11-1eb5e0e0b214/resourceGroups/hmcts-hub-prod-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-stg-agw"
        name                              = "sdshmcts-apim00-stg-agw"
        tags                              = {
            "application"  = "core"
            "builtFrom"    = "hmcts/sds-azure-platform"
            "businessArea" = "Cross-Cutting"
            "criticality"  = "High"
            "environment"  = "staging"
            "startupMode"  = "always"
        }
        # (8 unchanged attributes hidden)

      - probe {
          - host                                      = "sds-api-mgmt-appgw.staging.platform.hmcts.net" -> null
          - id                                        = "/subscriptions/0978315c-75fe-4ada-9d11-1eb5e0e0b214/resourceGroups/hmcts-hub-prod-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-stg-agw/probes/sds-api-mgmt-appgw-probe" -> null
          - interval                                  = 10 -> null
          - minimum_servers                           = 0 -> null
          - name                                      = "sds-api-mgmt-appgw-probe" -> null
          - path                                      = "/status-0123456789abcdef" -> null
          - pick_host_name_from_backend_http_settings = false -> null
          - port                                      = 0 -> null
          - protocol                                  = "Http" -> null
          - timeout                                   = 15 -> null
          - unhealthy_threshold                       = 3 -> null

          - match {
              - status_code = [
                  - "200-399",
                ] -> null
                # (1 unchanged attribute hidden)
            }
        }
      + probe {
          + host                                      = "sds-api-mgmt-appgw.staging.platform.hmcts.net"
          + id                                        = (known after apply)
          + interval                                  = 10
          + minimum_servers                           = 0
          + name                                      = "sds-api-mgmt-appgw-probe"
          + path                                      = "/status-0123456789abcdef"
          + pick_host_name_from_backend_http_settings = false
          + protocol                                  = "Http"
          + timeout                                   = 15
          + unhealthy_threshold                       = 3
        }

        # (15 unchanged blocks hidden)
    }

  # module.app-gw.azurerm_monitor_diagnostic_setting.diagnostic_settings[0] will be updated in-place
  ~ resource "azurerm_monitor_diagnostic_setting" "diagnostic_settings" {
        id                             = "/subscriptions/0978315c-75fe-4ada-9d11-1eb5e0e0b214/resourceGroups/hmcts-hub-prod-int/providers/Microsoft.Network/applicationGateways/sdshmcts-apim00-stg-agw|AppGw"
        name                           = "AppGw"
        # (5 unchanged attributes hidden)

      ~ metric {
          + eventhub_authorization_rule_id = (known after apply)
          + eventhub_name                  = (known after apply)
          + id                             = (known after apply)
          + log_analytics_destination_type = (known after apply)
          + log_analytics_workspace_id     = (known after apply)
          + name                           = (known after apply)
          + partner_solution_id            = (known after apply)
          + storage_account_id             = (known after apply)
          + target_resource_id             = (known after apply)
        } -> (known after apply)

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

Copy link

Terraform Version Update

The update from Terraform 1.8.1 to 1.9.8 across various components is a good practice, ensuring compatibility with new features and bug fixes. Make sure to test all your configurations with the new version, as some Terraform updates may introduce changes that could impact your infrastructure.

Use of Subscription ID

All the Terraform configurations for different components include a hardcoded Azure subscription ID. This practice is not flexible and poses a risk if the subscription ID needs to be changed or if different environments (e.g., development, staging, production) require different subscriptions.

Improvement Suggestion:

Make use of Terraform variables to define your Azure subscription ID. This allows you to manage and switch between different subscriptions more easily and securely without altering the main configuration. For instance:

hcl
variable "subscription_id" {
description = "Azure Subscription ID"
type = string
}

backend "azurerm" {
subscription_id = var.subscription_id
}


You can then pass the subscription ID as a variable in your CI/CD pipeline or Terraform cli.

### Missing Provider Version Constraints

The `shutter_static_webapp` component specifies `required_providers` but does not include any version constraints. This could lead to unexpected behavior or errors if a newer version of a provider introduces breaking changes.

**Improvement Suggestion:**

Always specify version constraints for your required providers to ensure your infrastructure is predictable and stable. For example:

```hcl
required_providers {
  azurerm = {
    source  = \"hashicorp/azurerm\"
    version = \"~> 2.46.0\"
  }
}

Consistency in Configuration

The configurations across different components are consistent, which is good practice. However, ensure that all components are updated and maintained to reflect such consistency, including version specifications and structure. Any deviation might indicate an area of configuration drift that could be problematic.

Security & Best Practices

While the provided diff does not include sensitive information beyond the subscription ID (which has been recommended to be parameterized), always review configurations for potential exposure of sensitive data (e.g., secrets or credentials) and use secure storage options like Azure Key Vault or Terraform Cloud's variable management for sensitive information.

Cost and Carbon Usage

  • Cost Implication: The Terraform version upgrade itself does not directly influence Azure costs. However, adopting newer infrastructure features and optimizations available in 1.9.8 might lead to cost savings. It's essential to review Azure's pricing regularly to adapt and optimize your infrastructure for cost.

  • Carbon Usage: There is no direct impact on carbon usage by upgrading Terraform versions. Nonetheless, effective and efficient use of cloud resources can contribute to lower carbon usage. Consider optimizing your infrastructure deployment to use fewer or more efficient resources where applicable.

In terms of GBP cost, there's no direct cost associated with the Terraform upgrade, but improved infrastructure management and the use of new features could lead to long-term savings. However, the exact amount would depend on the specific optimizations and usage patterns.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from c924449 to 40c182a Compare October 31, 2024 11:16
Copy link

Improvements can be considered in several areas based on the git diff provided for the Terraform files. Below are the identified areas for enhancement:

Code Quality & Best Practices

1. Use of Latest Terraform Versions

Upgrading from version 1.8.1 to 1.9.8 is a positive step but considering Terraform rapidly evolves, adopting the latest stable version might bring in new features, security patches, and performance improvements.

Example:
hcl

  • required_version = "1.9.8"
  • required_version = ">= 1.9.8"
(Note: Replacing with the actual latest version at the time of your upgrade.)

#### 2. Parameterization and Reusability
The `subscription_id` is hardcoded in multiple places, making it less flexible and reusable. Using variables for such configurations could enhance reusability and ease of management.

Example: Define a variable in a `variables.tf` file,
```hcl
variable \"subscription_id\" {
  type = string
  description = \"Azure subscription ID\"
}

And use it in your configs,

subscription_id = var.subscription_id

3. Consistency in Configuration

For shutter_static_webapp/init.tf, the azurerm backend configuration is empty, which might be intentional but warrants a review to ensure consistency or intentional design.

Security

Ensure that the subscription_id is not hardcoded in terraform files for confidentiality reasons. Consider using a secret manager or environmental variables.

Cost & Carbon Usage

  • Cost: This code change itself does not directly incur costs, but utilizing the latest features or performance improvements in Terraform could indirectly affect the cost efficiency of the cloud resources being provisioned. For example, more efficient resource utilization could lead to lower costs.

    Estimation on cost change is not straightforward without knowing the specifics of the resources managed by Terraform. However, ensuring you are using the most cost-efficient resources and configurations can contribute to savings.

  • Carbon Usage: Similar to cost, optimizations in code and using efficient resources can contribute to reduced carbon usage. By maintaining infrastructure as code efficiently, you ensure that only necessary resources are provisioned and idle resources are eliminated, contributing to lower carbon emissions.

Recommendations:

  • Evaluate the latest stable versions of Terraform regularly for potential upgrades.
  • Implement proper version constraints to allow for compatible updates.
  • Use variables and modules for better code reusability and management.
  • Review security practices around sensitive information handling.

Copy link

github-actions bot commented Nov 6, 2024

The git diff shows updates to the required_version for Terraform in multiple init.tf files across various components. Here are additional improvements that could be made:

Code Quality

  • Consistency in Versioning: Ensure all components use the same Terraform version unless there's a specific reason not to. This reduces the cognitive load on developers and the chance of version-specific bugs or inconsistencies.
  • Documenting Reason for Version Bump: It would be beneficial to include comments explaining why the version was bumped, especially if it's to leverage new features or address specific issues.

Security

  • Sensitive Data Handling: The subscription_id is hardcoded in several .tf files. Consider using a secure method to inject these values, such as Terraform's input variables or environment variables, and reference them using var.subscription_id or a similar approach. This prevents sensitive data from being stored directly in version control.

Best Practice

  • Use of Latest Stable Terraform Version: Ensure that the version 1.9.8 is the latest stable version that supports all required features. It's generally advisable to use the latest stable release to benefit from improved functionality, bug fixes, and security patches.
  • Variable File for Common Values: Extract common configurations, like the subscription_id, into a variables file or use Terraform workspaces for different environments. This promotes reusability and maintainability.

Cost Implications

Switching to a newer Terraform version in itself may not directly affect costs in GBP. However, it might enable the use of new, more cost-effective resources or configurations that were not available or stable in the older version.

  • Potential Cost Savings: Using new features or resources made available by the Terraform update could lead to more efficient architecture, potentially reducing costs. An example might be the utilization of newly supported auto-scaling features or more cost-effective resource types.

Carbon Usage

  • Efficiency in Resource Utilization: By potentially enabling the use of more recent and efficient Azure services or features, the updated Terraform version can indirectly contribute to reduced carbon usage. Efficiently managed and scaled resources mean less waste and lower power usage.

In Summary: The updates reflect good maintenance practice by keeping the Terraform version up to date. To further improve, consider the security of sensitive data, maintain consistency and rationale in versioning, adopt best practices for managing common configurations, and stay informed about potential cost and carbon usage implications based on the changes enabled by the newer Terraform version.

Copy link

github-actions bot commented Nov 7, 2024

The git diff provided shows updates to the required_version of Terraform across multiple Terraform configuration files within what seems like a multi-component architecture. Each configuration file has been updated from requiring Terraform version 1.8.1 to 1.9.8. Below are some additional improvements that could be made, focusing on code quality, security, best practices, cost, and carbon usage:

Code Quality

  1. Consistency in Resource Naming: There's no direct evidence from the diff provided on how resources are named within the configurations. However, ensuring that resource names follow a consistent and meaningful convention can improve readability and manageability. (Example changes cannot be provided as the resource names are not part of the diff).

  2. Version Constraints: Moving from a hard version required_version = \"1.9.8\" to a more flexible but controlled version constraint might offer a balance between stability and access to new features or important fixes. Example:
    hcl
    terraform {
    required_version = ">= 1.9.8, < 2.0.0"
    }

    This change ensures you can use minor updates and patches within `1.9.x` without automatically upgrading to a potentially breaking `2.0.0` release.
    
    

Security

  1. Sensitive Data in State Files: While not visible in the diff, ensure that any sensitive values (like subscription_id in Azure backend configurations) are treated securely. Use of backend \"azurerm\" {} with sensitive values implies these should be moved out of the configuration files and injected via secure environment variables or vault secrets.

  2. Review Permissions: Regularly review and apply the principle of least privilege to all resources, ensuring that only necessary permissions are granted for operation. This is not visible in the given diff but is an important practice.

Best Practices

  1. DRY Principle: If there's repetition across the Terraform configurations (like the backend configuration), consider abstracting common configurations into a shared module or using Terraform workspaces to handle environment-specific configurations more elegantly.

  2. State Locking: The configurations for the backend don't specify if state locking is enabled. Ensure to enable state locking to prevent conflicts during concurrent Terraform runs. Example addition (specific syntax might vary based on backend used):

    backend \"azurerm\" {
      ... # Existing configuration
      features {}
    }

Cost and Carbon Usage

  1. Infrastructure as Code (IaC) Analysis Tools: Integrate IaC scanning tools that can analyze Terraform plans to estimate costs and suggest optimizations. Tools like Infracost can provide insights into potential cost changes based on the Terraform configurations.

  2. Energy-efficient Resources: When configuring resources, opt for energy-efficient options where available. For services running in the cloud (like Azure services shown in the configuration), selecting regions powered by renewable energy or configuring scaling to match load can reduce carbon footprint (note: specific resource configurations for this are not included in the given diff).

Estimated Price Changes: The git diff does not include information on resources being provisioned or modified, so estimating price changes in GBP is not possible based on the provided details.

These recommendations aim to improve the manageability, security, and efficiency of your Terraform configurations. Careful consideration of version constraints and adherence to best practices like these can contribute significantly to the overall success of infrastructure management efforts.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from 12b0a0e to cdc3be9 Compare November 8, 2024 13:06
Copy link

github-actions bot commented Nov 8, 2024

Additional Improvements on Terraform Version Update

Updating the required version of Terraform in several modules is a good practice for staying up-to-date with new features and improvements. However, several other aspects can be enhanced in these code changes:

  1. Use of Version Constraints:

    • Instead of hardcoding to a specific Terraform version (1.9.8), consider using version constraints to allow more flexibility and compatibility. For instance, using >= 1.9.8 would mean any Terraform version from 1.9.8 upwards is acceptable, accommodating future non-breaking updates without changing the code.
    • Example:
      terraform
      required_version = ">= 1.9.8"
      
      
  2. Centralizing the Configuration for Reusability:

    • The Terraform version is updated across multiple files in a repetitive manner. If your infrastructure grows, this approach can be error-prone and hard to maintain. Consider centralizing common configurations such as Terraform version and Azure subscription IDs using a shared configuration or Terraform modules.
    • Example: Creating a versions.tf file in a common directory that all modules can reference for the required version.
  3. Review Backend Configuration:

    • The subscription_id is hard-coded in your backend configuration, which is a security concern and lacks flexibility. It's a better practice to use environment variables for such sensitive information.
    • Example:
      backend \"azurerm\" {
        subscription_id = \"${env(\"ARM_SUBSCRIPTION_ID\")}\"
      }
  4. Variable Validation:

    • Since you are updating Terraform to a later version, you can leverage new features like variable validation. This enhances the code by ensuring input variables meet certain criteria before Terraform applies the configuration.
    • Example:
      variable \"subscription_id\" {
        type        = string
        description = \"Azure Subscription ID\"
        validation {
          condition     = length(var.subscription_id) == 36
          error_message = \"The subscription ID must be exactly 36 characters.\"
        }
      }
  5. Cost, Security, and Carbon Usage:

    • Cost: There might not be a direct cost increase from changing the Terraform version and correcting the mentioned issues. However, adopting new Terraform features could optimize resource management, indirectly saving costs.
    • Security: Enhancing security by avoiding hard-coded sensitive information (e.g., subscription_id) and using environment variables or securely stored secrets.
    • Carbon Usage: Optimizing resource usage by leveraging the latest Terraform features for efficient infrastructure management can contribute to reduced carbon usage. More efficient infrastructure translates to lower power consumption and thus, a smaller carbon footprint.

Conclusion

These improvements can significantly enhance maintainability, security, and efficiency of your Terraform configuration changes. By adopting these best practices, you ensure that your infrastructure as code approach remains robust, flexible, and scalable.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from cdc3be9 to 6044164 Compare November 13, 2024 09:52
Copy link

Code Review Assessment

General Observations:

  • The update to the required Terraform version (1.8.1 to 1.9.8) across multiple components suggests an effort to maintain currency with Terraform versions, which is good practice for leveraging new features and optimizations, as well as addressing any security vulnerabilities patched in newer versions.

Specific Recommendations:

  1. Consolidate Terraform Backend Configuration:

    • Across all the init.tf files, the azurerm backend configuration is repeated with the same subscription_id. Consider consolidating this configuration to a single file or module to promote DRY (Don't Repeat Yourself) principles, making it easier to manage and update when necessary.
      Example:
      terraform
      backend "azurerm" {
      subscription_id = "04d27a32-7a07-48b3-95b8-3c8691e1a263"
      }
    This could potentially be extracted to a standalone `backend.tf` file that is symlinked or otherwise reused across components.
    
    
  2. Version Pinning for azurerm Provider:

    • It's observed that required_providers block is missing in most of the diffs except for the shutter_static_webapp/init.tf file, which did not show its contents in the diff. Ensuring that the azurerm provider (or any other providers in use) has a specified version range is crucial for avoiding unexpected changes due to provider updates.
      Example:
    required_providers {
      azurerm = {
        source  = \"hashicorp/azurerm\"
        version = \"~> 2.46\"
      }
    }

    Specifying versions helps in achieving predictable behavior across different environments and Terraform runs.

  3. Review and Address Any Deprecated Features:

    • With the update to a newer Terraform version, review the Terraform Changelog and the AzureRM Provider Release Notes to identify any deprecated features or syntax changes. Refactor your Terraform code accordingly to use updated features and syntax to avoid warnings or errors in future versions.
  4. Security Best Practices:

    • Ensure that the subscription_id and any other sensitive values are not hardcoded into the init.tf files. Instead, use Terraform variables or Azure Key Vault to securely manage these values.
      Example modification for using a variable:
    backend \"azurerm\" {
      subscription_id = var.azure_subscription_id
    }
  5. Cost and Carbon Usage Considerations:

    • Since the changes are primarily related to Terraform version updates and backend configurations, direct cost implications are minimal. However, maintaining efficient and well-organized Terraform code can contribute to more streamlined deployments. This can indirectly help manage costs and carbon footprint by avoiding unnecessary resource provisioning and enabling efficient resource usage.

By addressing these points, code quality, security, maintainability, and operational efficiency can be further enhanced.

@renovate renovate bot changed the title chore(deps): update terraform hashicorp/terraform to v1.9.8 chore(deps): update terraform hashicorp/terraform to v1.10.0 Nov 27, 2024
@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from 6044164 to ee43433 Compare November 27, 2024 14:32
Copy link

Additional Improvements

  1. Consistency in Backend Configuration:

    • For the most part, you refer to an azurerm backend with a specific subscription ID. However, in the components/shutter_static_webapp/init.tf, the subscription_id is missing. For consistency and to prevent potential misconfigurations that could lead to security or operational issues, consider specifying the subscription_id across all your configurations.
      diff
      diff --git a/components/shutter_static_webapp/init.tf b/components/shutter_static_webapp/init.tf
      @@ -3,3 +3,4 @@ terraform {
      backend "azurerm" {
    • subscription_id = "04d27a32-7a07-48b3-95b8-3c8691e1a263"
      }
    
    
  2. Use of Terraform Version Constraints:

    • While upgrading to a specific version of Terraform is good, consider using version constraints to allow for more flexibility and future-proofing. This approach ensures that you automatically benefit from patches within the specified version range without potentially breaking compatibility.
    diff --git a/components/apim/init.tf b/components/apim/init.tf
    @@ -1,5 +1,5 @@ terraform {
    - required_version = \"1.10.0\"
    + required_version = \"~> 1.10.0\"
  3. Environment Separation:

    • It’s not explicitly shown in the diff if there are different environments (e.g., staging, production). If not yet implemented, it's advisable to keep your configurations DRY (Don't Repeat Yourself) by leveraging Terraform workspaces or modules for environment segregation. This can help reduce errors and manage costs by providing clear separations of environments. Example advice but without direct code change suggestion due to lack of specific environment code in the diff.
  4. Sensitive Data Handling:

    • The subscription ID is hardcoded in your Terraform files, which might not be a significant security concern but is not best practice for sensitive data management. Consider using environment variables or Terraform variables with proper secrets management practices (e.g., Azure Key Vault) for such pieces of information to increase security.
    variable \"subscription_id\" {
      description = \"The Subscription ID to use.\"
      type        = string
    }
    backend \"azurerm\" {
      subscription_id = var.subscription_id
    }

    Note: The implementation will vary and requires adjustments outside of Terraform configuration, such as setting the environment variables or passing variables during runtime.

  5. Review and Update Dependencies:

    • After updating the required Terraform version, ensure all Terraform providers and any referenced modules are compatible with the new version. This step is crucial to prevent runtime errors or unexpected behavior. This is a general practice recommendation without specific code as it depends on external factors.

Cost and Carbon Usage:

Updating Terraform versions and aligning practices as mentioned generally doesn’t directly impact costs or carbon usage. However, better management, such as using environment variables for subscription details, can lead to better security and efficiency in managing resources across environments. Ensuring that your infrastructure is managed as code efficiently can have long-term benefits in operational cost savings and reduce the potential for over-provisioning or mismanagement of resources.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from ee43433 to 20b01a8 Compare November 28, 2024 10:17
Copy link

Terraform Code Review

Below are recommendations for improvements based on the provided git diff content. These suggestions focus on enhancing the quality, security, and best practices. Specific examples are also provided.

General Observations

  1. Consistency in Backend Definition:
    • The backend \"azurerm\" block is consistently used across components with the same subscription ID, except in the shutter_static_webapp component where the subscription ID is not defined. Is this intentional? If not, consider adding the subscription ID for consistency and clarity.
      terraform
      backend "azurerm" {
      subscription_id = "04d27a32-7a07-48b3-95b8-3c8691e1a263"
      }
    
    
  2. Terraform Version Upgrade:
    • Upgrading the Terraform version from 1.8.1 to 1.10.0 is a good practice to leverage new features and fixes. Ensure all team members and CI/CD pipelines are updated to this version to avoid compatibility issues.

Specific Recommendations

  1. Version Constraints on Required Providers:

    • It's observed that only the shutter_static_webapp component explicitly mentions required_providers but without any version constraints. Defining version constraints ensures consistent and predictable behavior across different environments.
    required_providers {
        azurerm = {
            source  = \"hashicorp/azurerm\"
            version = \"~> 2.46.0\"
        }
    }
  2. Review and Update Subscription IDs:

    • The same subscription ID is used across multiple components. If these components are meant to be deployed into different environments (development, staging, production), consider parameterizing the subscription ID or segregating the infrastructure code by environment to improve maintainability and reduce the risk of deploying to the wrong environment.
  3. Use of Latest Features and Best Practices:

    • Given the upgrade to Terraform 1.10.0, review the release notes for versions 1.9.0 and 1.10.0 to identify any new features or best practices that can be incorporated into your configurations.
    • For instance, if new data sources or improved syntaxes are available, adopting them could simplify the code or enhance performance.
  4. Security and Cost Considerations:

    • The provided diff doesn't reveal direct security or cost implications. However, ensuring that the Azure resources are being deployed with security and cost optimization in mind is crucial. Utilize Azure Policy and review the Azure Advisor recommendations regularly.
  5. Documentation and Descriptions:

    • The diff does not show any usage of comments or documentation within the Terraform configurations. While this might be outside the scope of the diff, it's generally advised to maintain well-documented code, including descriptions for variables, resources, and modules to facilitate understanding and maintenance.
  6. Cost and Carbon Usage:

    • There are no direct changes affecting cost or carbon usage visible in the diff. However, keeping infrastructure as code (IaC) aligned with cost optimization practices (like shutting down unnecessary resources or choosing appropriate sizes) is beneficial. Tools such as the Azure Pricing Calculator and sustainable software engineering principles can guide these efforts.

Conclusion

The upgrade of Terraform versions across components is a positive change, reflecting an intention to stay current and leverage improvements. However, ensure this upgrade is tested thoroughly to identify any potential issues with existing code. Additionally, focus on maintaining consistency, security, and documentation across your IaC to facilitate better maintainability, security adherence, and cost efficiency.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from 20b01a8 to 6c12701 Compare December 4, 2024 14:44
@renovate renovate bot changed the title chore(deps): update terraform hashicorp/terraform to v1.10.0 chore(deps): update terraform hashicorp/terraform to v1.10.1 Dec 4, 2024
Copy link

github-actions bot commented Dec 4, 2024

Recommendations

1. Consistency in Backend Configuration

The diff indicates an update in the required_version of Terraform across multiple modules (apim, appgateway, backendappgateway, trafficmanager, and shutter_static_webapp). However, there's an inconsistency noticed in how the backend configuration is managed, specifically within shutter_static_webapp/init.tf where the backend block is empty {}.

  • Recommendation: Ensure that all modules follow a consistent approach towards backend configuration. For shutter_static_webapp/init.tf, include necessary backend parameters (such as subscription_id) to align with other modules if applicable. This facilitates easier management and avoids potential deployment issues due to missing configuration.

Example:

hcl
backend "azurerm" {
subscription_id = "04d27a32-7a07-48b3-95b8-3c8691e1a263"
}


#### 2. Version Pinning for Providers

The diff shows an update to Terraform's `required_version`, but there's no mention or update related to provider versions in the provided code segments. Pinning provider versions is a best practice to ensure consistent and predictable deployments.

- **Recommendation**: Use the `required_providers` block to specify exact or minimum required versions for your providers (e.g., `azurerm`). This practice helps in avoiding unexpected changes when providers are updated.

#### Example:

```hcl
required_providers {
  azurerm = {
    source  = \"hashicorp/azurerm\"
    version = \"~> 2.56.0\"
  }
}

3. Terraform State Storage and Security

While the backend is specified as azurerm, there are no details on the configuration of state storage, specifically around security aspects like encryption, state locking, or access control.

  • Recommendation: Ensure that the Terraform state file (terraform.tfstate) is stored in a secure, encrypted, and versioned storage account. Implement state locking to prevent simultaneous state file writes that can lead to state corruption.

Example:

backend \"azurerm\" {
  resource_group_name   = \"myResourceGroup\"
  storage_account_name  = \"mystorageaccount\"
  container_name        = \"tfstate\"
  key                   = \"prod.terraform.tfstate\"
  encrypt               = true
}

Cost, and Carbon Usage Considerations

  • Cost: There's no direct information regarding cost impact. However, standardizing configurations and utilizing Terraform efficiently could lead to decreased management overhead and thus indirect cost savings.

  • Carbon Usage: Proper resource management and efficient configuration directly contribute to reduced energy consumption in the cloud, thereby potentially lowering the carbon footprint. Ensuring that resources are only provisioned as needed and are right-sized can help in this aspect, though specific to the broader context of your infrastructure setup.

By addressing these recommendations, your Terraform configurations will be more robust, secure, and maintainable, aligning with best practices and potentially contributing to cost savings and reduced carbon usage in the long run.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from 6c12701 to aa3d4bc Compare December 11, 2024 13:08
@renovate renovate bot changed the title chore(deps): update terraform hashicorp/terraform to v1.10.1 chore(deps): update terraform hashicorp/terraform to v1.10.2 Dec 11, 2024
Copy link

Terraform Version Requirement Update

The update in Terraform version from 1.8.1 to 1.10.2 across multiple Terraform configurations indicates an effort to standardize the Terraform version being used. This is a good practice for ensuring compatibility and making use of new features or bug fixes.

Recommendations:

  1. Use Version Constraints: Instead of hardcoding a specific version, consider using version constraints to allow for more flexibility while ensuring compatibility. For example, required_version = \">= 1.10.2, < 2.0\". This allows the use of newer versions within the specified major version while preventing automatic upgrades to a potentially incompatible major version.

    diff
    terraform {

    • required_version = "1.10.2"
    • required_version = ">= 1.10.2, < 2.0"
      }
    
    
  2. Centralize Version Management: If the same version requirement applies to multiple Terraform configurations, consider centralizing the Terraform version management. This could be achieved through a shared configuration file or through CI/CD pipeline configurations to ensure consistency across all environments without modifying each file individually.

  3. Review and Update Required Providers: Alongside updating Terraform itself, review the required_providers block in each module to ensure that provider versions are up to date and compatible with the new Terraform version. Consider adding version constraints to providers as well.

    terraform {
      required_providers {
        azurerm = {
    -     version = \"~>2.45\"
    +     version = \">= 2.45, < 3.0\"
        }
      }
    }
  4. Security and Best Practices: Ensure that the azurerm backend configurations do not contain hard-coded sensitive information (e.g., subscription_id). Instead, utilize environment variables or secured variables within a CI/CD pipeline for sensitive values to enhance security.

    backend \"azurerm\" {
    - subscription_id = \"04d27a32-7a07-48b3-95b8-3c8691e1a263\"
    + subscription_id = var.subscription_id
    }

Add a variable definition elsewhere in your Terraform configuration for subscription_id.

  1. Consistency in Backend Configuration: The shutter_static_webapp backend configuration does not specify a subscription_id while others do. If this is intentional due to a different subscription context, it's fine, but ensure consistency where applicable to avoid configuration drifts and potential access issues.

Cost and Carbon Usage

  • Version upgrades: Generally, there's no direct cost impact in upgrading Terraform versions in terms of GBP, assuming you manage version control internally. However, ensuring that your cloud resources are managed with updated versions could indirectly lead to cost optimizations by leveraging new features or more efficient resource management.

  • Carbon usage: Upgrades or changes in Terraform versions themselves do not have a direct impact on carbon usage. However, the practice of maintaining up-to-date configurations can indirectly influence carbon usage by enabling more efficient management of cloud resources, potentially leading to less resource waste.

In summary, while these updates represent a step in the right direction for maintaining modern infrastructure as code practices, these additional recommendations aim to further enhance flexibility, security, and maintainability of your Terraform configurations.

@renovate renovate bot force-pushed the renovate/terraform-monorepo branch from aa3d4bc to 0a2a9f8 Compare December 18, 2024 15:44
@renovate renovate bot changed the title chore(deps): update terraform hashicorp/terraform to v1.10.2 chore(deps): update terraform hashicorp/terraform to v1.10.3 Dec 18, 2024
Copy link

Recommendations for Improvement

While the update of Terraform's required version is a step in the right direction for staying up to date with features, security, and bug fixes, there are several additional improvements and best practices that could further optimize the code and your infrastructure management:

  1. Use Variable for Subscription ID

    Repeating the subscription_id in every Terraform configuration increases the risk of error and makes updates cumbersome. Consider using a variable for the subscription_id to make it easy to update and manage:

    hcl
    variable "subscription_id" {
    description = "Azure subscription ID"
    type = string
    }

    backend "azurerm" {
    subscription_id = var.subscription_id
    }

    
    This approach promotes DRY principles and makes your code more maintainable.
    
    
  2. Version Pinning for Providers

    The update lacks specification for the version(s) of the azurerm provider. Pinning provider versions ensures consistency across environments, aiding in reducing the "it works on my machine" problem. Consider specifying a version constraint for each required provider:

    + required_providers {
    +   azurerm = {
    +     version = \"~> 2.45.0\"
    +   }
    + }

    Adjust the version according to your project requirements and testing.

  3. Enhance State File Security

    The backend configuration points to an AzureRM backend without mentioning any state file encryption, access control, or locking. Ensure that:

    • State Encryption: State files can contain sensitive data, making encryption at rest a best practice.
    • State Locking: Prevent concurrent operations that could result in state corruption.
    • Fine-grained Access Control: Limit who can access the state file, adhering to the principle of least privilege.
    backend \"azurerm\" {
      ...
      resource_group_name  = \"your-resource-group\"
      storage_account_name = \"tfstatestorage123\"
      container_name       = \"tfstate\"
      key                  = \"yourstatefile.terraform.tfstate\"
    
      # Enable state file encryption
      use_msi              = true
    }
  4. Optimize for Cost and Carbon Usage

    While the changes in your submission primarily deal with version updates, it's also essential to consider cost optimization and carbon footprint in your infrastructure. However, without specifics on the resources being deployed, here are general recommendations:

    • Evaluate Resource Sizing: Ensure that the resources provisioned are right-sized for your workload demands. Over-provisioning leads to unnecessary costs and a larger carbon footprint.
    • Use Managed Services: Favor managed services where possible, as they can offer better utilization rates and efficiency at scale, translating to cost savings and potentially lower carbon usage.
    • Review and Optimize Frequently: Regularly review your infrastructure for opportunities to optimize, whether through reserved instances, scaling down during off-peak hours, or consolidating underutilized resources.

These improvements are focused on maintainability, security, and efficiency. While specific cost savings or carbon usage reductions are not quantifiable without more context (types and scale of resources being deployed), applying these best practices can lead to a more manageable and optimized Terraform setup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
demo_apim - TerraformPlanApply/no-changes demo_apim_appgw - TerraformPlanApply/add-or-update demo_apim_appgw/add-or-update demo_apim/no-changes demo_appgateway - TerraformPlanApply/add-or-update demo_appgateway/add-or-update demo_backendappgateway/add-or-update demo_frontdoor - TerraformPlanApply/add-or-update demo_frontdoor/add-or-update dependencies Pull requests that update a dependency file dev_apim - TerraformPlanApply/no-changes dev_apim_appgw - TerraformPlanApply/add-or-update dev_apim_appgw/add-or-update dev_apim/no-changes dev_appgateway - TerraformPlanApply/add-or-update dev_appgateway/add-or-update dev_backendappgateway/add-or-update dev_frontdoor - TerraformPlanApply/add-or-update dev_frontdoor/add-or-update dev_trafficmanager - TerraformPlanApply/no-changes dev_trafficmanager/no-changes ithc_apim - TerraformPlanApply/no-changes ithc_apim_appgw - TerraformPlanApply/add-or-update ithc_apim_appgw/add-or-update ithc_apim/no-changes ithc_appgateway - TerraformPlanApply/add-or-update ithc_appgateway/add-or-update ithc_backendappgateway/add-or-update ithc_frontdoor - TerraformPlanApply/add-or-update ithc_frontdoor/add-or-update prod_apim - TerraformPlanApply/no-changes prod_apim_appgw - TerraformPlanApply/add-or-update prod_apim_appgw/add-or-update prod_apim/no-changes prod_appgateway - TerraformPlanApply/add-or-update prod_appgateway/add-or-update prod_backendappgateway/add-or-update prod_frontdoor - TerraformPlanApply/add-or-update prod_frontdoor/add-or-update prod_shutter_static_webapp/add-or-update prod_trafficmanager/no-changes sbox_apim - TerraformPlanApply/no-changes sbox_apim_appgw - TerraformPlanApply/add-or-update sbox_apim_appgw/add-or-update sbox_apim/no-changes sbox_appgateway - TerraformPlanApply/add-or-update sbox_appgateway/add-or-update sbox_backendappgateway/add-or-update sbox_frontdoor - TerraformPlanApply/add-or-update sbox_frontdoor/add-or-update sbox_shutter_static_webapp/add-or-update stg_apim - TerraformPlanApply/no-changes stg_apim_appgw - TerraformPlanApply/add-or-update stg_apim_appgw/add-or-update stg_apim/no-changes stg_appgateway - TerraformPlanApply/add-or-update stg_appgateway/add-or-update stg_backendappgateway/add-or-update stg_frontdoor - TerraformPlanApply/add-or-update stg_frontdoor/add-or-update test_apim - TerraformPlanApply/no-changes test_apim_appgw - TerraformPlanApply/add-or-update test_apim_appgw/add-or-update test_apim/no-changes test_appgateway - TerraformPlanApply/add-or-update test_appgateway/add-or-update test_backendappgateway/add-or-update test_frontdoor - TerraformPlanApply/add-or-update test_frontdoor/add-or-update
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant