DTSPO-9743 - Update keyvault group members

JIRA link (if applicable)
https://tools.hmcts.net/jira/browse/DTSPO-9743
Change description
Add service connection sp to subscription contributors group to allow keyvault access
Does this PR introduce a breaking change? (check one with "x")
[ ] Yes
[x] No

Plan Result (sandbox-enterprise)
Plan: 25 to add, 7 to change, 0 to destroy.

Create

module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.aks_admin_group_id
module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.aks_user_group_id
module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_app_id
module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_object_id
module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_token
module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.aks_admin_group_id
module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.aks_user_group_id
module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_app_id
module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_object_id
module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_token
module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.aks_admin_group_id
module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.aks_user_group_id
module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_app_id
module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_object_id
module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_token
module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.aks_admin_group_id
module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.aks_user_group_id
module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_app_id
module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_object_id
module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_token
module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.aks_admin_group_id
module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.aks_user_group_id
module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_app_id
module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_object_id
module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_token

Update

module.acme["DTS-Terraform-Dev-Test3"].azurerm_windows_function_app.funcapp
module.acme["DTS-Terraform-Dev-Test4"].azurerm_windows_function_app.funcapp
module.subscription["DTS-RBAC-NONPRODUCTION"].azuread_group.groups["Contributor"]
module.subscription["DTS-RBAC-SBOX"].azuread_group.groups["Contributor"]
module.subscription["DTS-Terraform-Dev-Test3"].azuread_group.groups["Contributor"]
module.subscription["DTS-Terraform-Dev-Test4"].azuread_group.groups["Contributor"]
module.subscription["DTS-Terraform-Prod-Test1"].azuread_group.groups["Contributor"]

Change Result (Click me)

  # module.acme["DTS-Terraform-Dev-Test3"].azurerm_windows_function_app.funcapp will be updated in-place
  ~ resource "azurerm_windows_function_app" "funcapp" {
      ~ app_settings                      = {
          + "APPINSIGHTS_INSTRUMENTATIONKEY"             = (sensitive)
          + "APPLICATIONINSIGHTS_CONNECTION_STRING"      = (sensitive)
          + "AzureWebJobsStorage"                        = (sensitive)
            # (10 unchanged elements hidden)
        }
        id                                = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/enterprise-dev-rg/providers/Microsoft.Web/sites/acmedtsterraformdevtest3"
        name                              = "acmedtsterraformdevtest3"
        tags                              = {
            "application"  = "core"
            "builtFrom"    = "hmcts/azure-enterprise"
            "businessArea" = "CFT"
            "criticality"  = "Low"
            "environment"  = "development"
        }
        # (25 unchanged attributes hidden)

      ~ site_config {
          - application_insights_connection_string = (sensitive value)
          - application_insights_key               = (sensitive value)
            # (23 unchanged attributes hidden)
        }

        # (2 unchanged blocks hidden)
    }

  # module.acme["DTS-Terraform-Dev-Test4"].azurerm_windows_function_app.funcapp will be updated in-place
  ~ resource "azurerm_windows_function_app" "funcapp" {
      ~ app_settings                      = {
          + "APPINSIGHTS_INSTRUMENTATIONKEY"             = (sensitive)
          + "APPLICATIONINSIGHTS_CONNECTION_STRING"      = (sensitive)
          + "AzureWebJobsStorage"                        = (sensitive)
            # (10 unchanged elements hidden)
        }
        id                                = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/enterprise-dev-rg/providers/Microsoft.Web/sites/acmedtsterraformdevtest4"
        name                              = "acmedtsterraformdevtest4"
        tags                              = {
            "application"  = "core"
            "builtFrom"    = "hmcts/azure-enterprise"
            "businessArea" = "CFT"
            "criticality"  = "Low"
            "environment"  = "development"
        }
        # (25 unchanged attributes hidden)

      ~ site_config {
          - application_insights_connection_string = (sensitive value)
          - application_insights_key               = (sensitive value)
            # (23 unchanged attributes hidden)
        }

        # (2 unchanged blocks hidden)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azuread_group.groups["Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
        id                         = "50b70fc9-77a5-4f66-8e93-64a3a554bf67"
      ~ members                    = [
          + "1c81de61-e810-47e5-b2fe-30c6ae0dedfd",
            # (2 unchanged elements hidden)
        ]
        # (18 unchanged attributes hidden)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.aks_admin_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_admin_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c06069648ed8e38bckv"
      + name                    = "aks-admin-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.aks_user_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_user_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c06069648ed8e38bckv"
      + name                    = "aks-user-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_app_id will be created
  + resource "azurerm_key_vault_secret" "sp_app_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c06069648ed8e38bckv"
      + name                    = "sp-application-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_object_id will be created
  + resource "azurerm_key_vault_secret" "sp_object_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c06069648ed8e38bckv"
      + name                    = "sp-object-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-NONPRODUCTION"].azurerm_key_vault_secret.sp_token will be created
  + resource "azurerm_key_vault_secret" "sp_token" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c06069648ed8e38bckv"
      + name                    = "sp-token"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-SBOX"].azuread_group.groups["Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
        id                         = "9dcfd92a-2e3a-48ed-b985-81d33df9b465"
      ~ members                    = [
          + "1c81de61-e810-47e5-b2fe-30c6ae0dedfd",
            # (2 unchanged elements hidden)
        ]
        # (18 unchanged attributes hidden)
    }

  # module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.aks_admin_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_admin_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-sbox-rg/providers/Microsoft.KeyVault/vaults/cefd1f81277156ff9kv"
      + name                    = "aks-admin-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.aks_user_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_user_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-sbox-rg/providers/Microsoft.KeyVault/vaults/cefd1f81277156ff9kv"
      + name                    = "aks-user-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_app_id will be created
  + resource "azurerm_key_vault_secret" "sp_app_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-sbox-rg/providers/Microsoft.KeyVault/vaults/cefd1f81277156ff9kv"
      + name                    = "sp-application-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_object_id will be created
  + resource "azurerm_key_vault_secret" "sp_object_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-sbox-rg/providers/Microsoft.KeyVault/vaults/cefd1f81277156ff9kv"
      + name                    = "sp-object-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-RBAC-SBOX"].azurerm_key_vault_secret.sp_token will be created
  + resource "azurerm_key_vault_secret" "sp_token" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-sbox-rg/providers/Microsoft.KeyVault/vaults/cefd1f81277156ff9kv"
      + name                    = "sp-token"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azuread_group.groups["Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
        id                         = "76af4881-223c-4978-b3d6-b8eda9d2f83d"
      ~ members                    = [
          + "1c81de61-e810-47e5-b2fe-30c6ae0dedfd",
            # (2 unchanged elements hidden)
        ]
        # (18 unchanged attributes hidden)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.aks_admin_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_admin_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c6d1e076a3e28a488kv"
      + name                    = "aks-admin-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.aks_user_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_user_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c6d1e076a3e28a488kv"
      + name                    = "aks-user-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_app_id will be created
  + resource "azurerm_key_vault_secret" "sp_app_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c6d1e076a3e28a488kv"
      + name                    = "sp-application-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_object_id will be created
  + resource "azurerm_key_vault_secret" "sp_object_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c6d1e076a3e28a488kv"
      + name                    = "sp-object-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test3"].azurerm_key_vault_secret.sp_token will be created
  + resource "azurerm_key_vault_secret" "sp_token" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c6d1e076a3e28a488kv"
      + name                    = "sp-token"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azuread_group.groups["Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
        id                         = "9b4fb1ef-efe3-4954-b2ab-73a1fa1850d2"
      ~ members                    = [
          + "1c81de61-e810-47e5-b2fe-30c6ae0dedfd",
            # (2 unchanged elements hidden)
        ]
        # (18 unchanged attributes hidden)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.aks_admin_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_admin_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c173a0e96abc83ab0kv"
      + name                    = "aks-admin-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.aks_user_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_user_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c173a0e96abc83ab0kv"
      + name                    = "aks-user-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_app_id will be created
  + resource "azurerm_key_vault_secret" "sp_app_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c173a0e96abc83ab0kv"
      + name                    = "sp-application-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_object_id will be created
  + resource "azurerm_key_vault_secret" "sp_object_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c173a0e96abc83ab0kv"
      + name                    = "sp-object-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Dev-Test4"].azurerm_key_vault_secret.sp_token will be created
  + resource "azurerm_key_vault_secret" "sp_token" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-dev-rg/providers/Microsoft.KeyVault/vaults/c173a0e96abc83ab0kv"
      + name                    = "sp-token"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azuread_group.groups["Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
        id                         = "38d93cb5-0dc6-4436-b2ad-caedd3baf247"
      ~ members                    = [
          + "1c81de61-e810-47e5-b2fe-30c6ae0dedfd",
            # (2 unchanged elements hidden)
        ]
        # (18 unchanged attributes hidden)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.aks_admin_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_admin_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-prod-rg/providers/Microsoft.KeyVault/vaults/cbb9ca405b539e8b3kv"
      + name                    = "aks-admin-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.aks_user_group_id will be created
  + resource "azurerm_key_vault_secret" "aks_user_group_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-prod-rg/providers/Microsoft.KeyVault/vaults/cbb9ca405b539e8b3kv"
      + name                    = "aks-user-rbac-group-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_app_id will be created
  + resource "azurerm_key_vault_secret" "sp_app_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-prod-rg/providers/Microsoft.KeyVault/vaults/cbb9ca405b539e8b3kv"
      + name                    = "sp-application-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_object_id will be created
  + resource "azurerm_key_vault_secret" "sp_object_id" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-prod-rg/providers/Microsoft.KeyVault/vaults/cbb9ca405b539e8b3kv"
      + name                    = "sp-object-id"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.subscription["DTS-Terraform-Prod-Test1"].azurerm_key_vault_secret.sp_token will be created
  + resource "azurerm_key_vault_secret" "sp_token" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/55922b0d-5c33-467f-91b9-42c4059d310c/resourceGroups/azure-control-prod-rg/providers/Microsoft.KeyVault/vaults/cbb9ca405b539e8b3kv"
      + name                    = "sp-token"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

Plan: 25 to add, 7 to change, 0 to destroy.

Plan Result (prod-video-hearings)
No changes. Your infrastructure matches the configuration.

Plan Result (prod-enterprise)
Plan: 81 to add, 36 to change, 0 to destroy.

Create

module.environment["demo"].azuread_application_password.token
module.environment["demo"].azuread_group_member.acr
module.environment["demo"].azuread_group_member.dns_zone_contributor
module.environment["demo"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["demo"].azuread_group_member.members["DTS Operations"]
module.environment["demo"].azurerm_resource_group.rg
module.environment["demo"].azurerm_service_plan.asp
module.environment["demo"].random_uuid.app_uuid
module.environment["demo"].time_rotating.one_year
module.environment["dev"].azuread_application_password.token
module.environment["dev"].azuread_group_member.acr
module.environment["dev"].azuread_group_member.dns_zone_contributor
module.environment["dev"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["dev"].azuread_group_member.members["DTS Operations"]
module.environment["dev"].azurerm_resource_group.rg
module.environment["dev"].azurerm_service_plan.asp
module.environment["dev"].random_uuid.app_uuid
module.environment["dev"].time_rotating.one_year
module.environment["ithc"].azuread_application_password.token
module.environment["ithc"].azuread_group_member.acr
module.environment["ithc"].azuread_group_member.dns_zone_contributor
module.environment["ithc"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["ithc"].azuread_group_member.members["DTS Operations"]
module.environment["ithc"].azurerm_resource_group.rg
module.environment["ithc"].azurerm_service_plan.asp
module.environment["ithc"].random_uuid.app_uuid
module.environment["ithc"].time_rotating.one_year
module.environment["prod"].azuread_application_password.token
module.environment["prod"].azuread_group_member.acr
module.environment["prod"].azuread_group_member.dns_zone_contributor
module.environment["prod"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["prod"].azuread_group_member.members["DTS Operations"]
module.environment["prod"].azurerm_resource_group.rg
module.environment["prod"].azurerm_service_plan.asp
module.environment["prod"].random_uuid.app_uuid
module.environment["prod"].time_rotating.one_year
module.environment["ptl"].azuread_application_password.token
module.environment["ptl"].azuread_group_member.acr
module.environment["ptl"].azuread_group_member.dns_zone_contributor
module.environment["ptl"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["ptl"].azuread_group_member.members["DTS Operations"]
module.environment["ptl"].azurerm_resource_group.rg
module.environment["ptl"].azurerm_service_plan.asp
module.environment["ptl"].random_uuid.app_uuid
module.environment["ptl"].time_rotating.one_year
module.environment["ptlsbox"].azuread_application_password.token
module.environment["ptlsbox"].azuread_group_member.acr
module.environment["ptlsbox"].azuread_group_member.dns_zone_contributor
module.environment["ptlsbox"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["ptlsbox"].azuread_group_member.members["DTS Operations"]
module.environment["ptlsbox"].azurerm_resource_group.rg
module.environment["ptlsbox"].azurerm_service_plan.asp
module.environment["ptlsbox"].random_uuid.app_uuid
module.environment["ptlsbox"].time_rotating.one_year
module.environment["sbox"].azuread_application_password.token
module.environment["sbox"].azuread_group_member.acr
module.environment["sbox"].azuread_group_member.dns_zone_contributor
module.environment["sbox"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["sbox"].azuread_group_member.members["DTS Operations"]
module.environment["sbox"].azurerm_resource_group.rg
module.environment["sbox"].azurerm_service_plan.asp
module.environment["sbox"].random_uuid.app_uuid
module.environment["sbox"].time_rotating.one_year
module.environment["stg"].azuread_application_password.token
module.environment["stg"].azuread_group_member.acr
module.environment["stg"].azuread_group_member.dns_zone_contributor
module.environment["stg"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["stg"].azuread_group_member.members["DTS Operations"]
module.environment["stg"].azurerm_resource_group.rg
module.environment["stg"].azurerm_service_plan.asp
module.environment["stg"].random_uuid.app_uuid
module.environment["stg"].time_rotating.one_year
module.environment["test"].azuread_application_password.token
module.environment["test"].azuread_group_member.acr
module.environment["test"].azuread_group_member.dns_zone_contributor
module.environment["test"].azuread_group_member.members["DNS Zone Contributor"]
module.environment["test"].azuread_group_member.members["DTS Operations"]
module.environment["test"].azurerm_resource_group.rg
module.environment["test"].azurerm_service_plan.asp
module.environment["test"].random_uuid.app_uuid
module.environment["test"].time_rotating.one_year

Update

module.environment["demo"].azuread_application.app
module.environment["demo"].azuread_group.groups["DNS Zone Contributor"]
module.environment["demo"].azuread_group.groups["DTS Operations"]
module.environment["demo"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["dev"].azuread_application.app
module.environment["dev"].azuread_group.groups["DNS Zone Contributor"]
module.environment["dev"].azuread_group.groups["DTS Operations"]
module.environment["dev"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["ithc"].azuread_application.app
module.environment["ithc"].azuread_group.groups["DNS Zone Contributor"]
module.environment["ithc"].azuread_group.groups["DTS Operations"]
module.environment["ithc"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["prod"].azuread_application.app
module.environment["prod"].azuread_group.groups["DNS Zone Contributor"]
module.environment["prod"].azuread_group.groups["DTS Operations"]
module.environment["prod"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["ptl"].azuread_application.app
module.environment["ptl"].azuread_group.groups["DNS Zone Contributor"]
module.environment["ptl"].azuread_group.groups["DTS Operations"]
module.environment["ptl"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["ptlsbox"].azuread_application.app
module.environment["ptlsbox"].azuread_group.groups["DNS Zone Contributor"]
module.environment["ptlsbox"].azuread_group.groups["DTS Operations"]
module.environment["ptlsbox"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["sbox"].azuread_application.app
module.environment["sbox"].azuread_group.groups["DNS Zone Contributor"]
module.environment["sbox"].azuread_group.groups["DTS Operations"]
module.environment["sbox"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["stg"].azuread_application.app
module.environment["stg"].azuread_group.groups["DNS Zone Contributor"]
module.environment["stg"].azuread_group.groups["DTS Operations"]
module.environment["stg"].azuredevops_serviceendpoint_azurerm.endpoint[0]
module.environment["test"].azuread_application.app
module.environment["test"].azuread_group.groups["DNS Zone Contributor"]
module.environment["test"].azuread_group.groups["DTS Operations"]
module.environment["test"].azuredevops_serviceendpoint_azurerm.endpoint[0]

Change Result (Click me)

  # module.environment["demo"].azuread_application.app will be updated in-place
  ~ resource "azuread_application" "app" {
        id                             = "fcc63c4d-d347-4e4f-b32e-81643079b27d"
      ~ oauth2_permission_scope_ids    = {
          - "user_impersonation" = "b3209c28-68a2-9d27-205e-d8ccad753270"
        } -> (known after apply)
        tags                           = []
        # (14 unchanged attributes hidden)

      ~ api {
            # (3 unchanged attributes hidden)

          - oauth2_permission_scope {
              - admin_consent_description  = "Allow the application to access DTS Operations (env:demo) on behalf of the signed-in user." -> null
              - admin_consent_display_name = "Access DTS Operations (env:demo)" -> null
              - enabled                    = true -> null
              - id                         = "b3209c28-68a2-9d27-205e-d8ccad753270" -> null
              - type                       = "User" -> null
              - user_consent_description   = "Allow the application to access DTS Operations (env:demo) on your behalf." -> null
              - user_consent_display_name  = "Access DTS Operations (env:demo)" -> null
              - value                      = "user_impersonation" -> null
            }
          + oauth2_permission_scope {
              + admin_consent_description  = "Allow the application to access DTS Operations (env:demo) on behalf of the signed-in user."
              + admin_consent_display_name = "Access DTS Operations (env:demo)"
              + enabled                    = true
              + id                         = (known after apply)
              + type                       = "User"
              + user_consent_description   = "Allow the application to access DTS Operations (env:demo) on your behalf."
              + user_consent_display_name  = "Access DTS Operations (env:demo)"
              + value                      = "user_impersonation"
            }
        }

      ~ web {
          ~ homepage_url  = "https://dev.azure.com/hmcts/Operations" -> "https://dev.azure.com/hmcts/PlatformOperations"
            # (1 unchanged attribute hidden)

            # (1 unchanged block hidden)
        }

        # (6 unchanged blocks hidden)
    }

  # module.environment["demo"].azuread_application_password.token will be created
  + resource "azuread_application_password" "token" {
      + application_object_id = "fcc63c4d-d347-4e4f-b32e-81643079b27d"
      + display_name          = (known after apply)
      + end_date              = (known after apply)
      + id                    = (known after apply)
      + key_id                = (known after apply)
      + rotate_when_changed   = (known after apply)
      + start_date            = (known after apply)
      + value                 = (sensitive value)
    }

  # module.environment["demo"].azuread_group.groups["DNS Zone Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "DEMO DNS Zone Contributer Group" -> "Grants dns zone contributor permissions to the demo environment"
        id                         = "893dc142-adad-4200-b1d0-30b257f7d7b4"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["demo"].azuread_group.groups["DTS Operations"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "DEMO Operations elevated access" -> "demo Operations elevated access"
        id                         = "9e6dd823-0630-41d4-9a58-67cd7d141452"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["demo"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "9e6dd823-0630-41d4-9a58-67cd7d141452"
    }

  # module.environment["demo"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_object_id  = "893dc142-adad-4200-b1d0-30b257f7d7b4"
      + id               = (known after apply)
      + member_object_id = "9e6dd823-0630-41d4-9a58-67cd7d141452"
    }

  # module.environment["demo"].azuread_group_member.members["DNS Zone Contributor"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "893dc142-adad-4200-b1d0-30b257f7d7b4"
      + id               = (known after apply)
      + member_object_id = "b9f44ba5-3da9-4852-bc71-2763216099ff"
    }

  # module.environment["demo"].azuread_group_member.members["DTS Operations"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "9e6dd823-0630-41d4-9a58-67cd7d141452"
      + id               = (known after apply)
      + member_object_id = "b9f44ba5-3da9-4852-bc71-2763216099ff"
    }

  # module.environment["demo"].azuredevops_serviceendpoint_azurerm.endpoint[0] will be updated in-place
  ~ resource "azuredevops_serviceendpoint_azurerm" "endpoint" {
        id                        = "164de47e-bace-4a22-8aff-fd79c4f26a01"
        # (7 unchanged attributes hidden)

      + credentials {
          + serviceprincipalid  = "e0edd805-2d7f-4535-b0af-f561e66d63ea"
          + serviceprincipalkey = (sensitive value)
        }

        # (1 unchanged block hidden)
    }

  # module.environment["demo"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "uksouth"
      + name     = "enterprise-demo-rg"
      + tags     = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Medium"
          + "environment"  = "demo"
        }
    }

  # module.environment["demo"].azurerm_service_plan.asp will be created
  + resource "azurerm_service_plan" "asp" {
      + id                           = (known after apply)
      + kind                         = (known after apply)
      + location                     = "uksouth"
      + maximum_elastic_worker_count = (known after apply)
      + name                         = "enterprise-demo-asp"
      + os_type                      = "Windows"
      + per_site_scaling_enabled     = false
      + reserved                     = (known after apply)
      + resource_group_name          = "enterprise-demo-rg"
      + sku_name                     = "Y1"
      + tags                         = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Medium"
          + "environment"  = "demo"
        }
      + worker_count                 = (known after apply)
    }

  # module.environment["demo"].random_uuid.app_uuid will be created
  + resource "random_uuid" "app_uuid" {
      + id     = (known after apply)
      + result = (known after apply)
    }

  # module.environment["demo"].time_rotating.one_year will be created
  + resource "time_rotating" "one_year" {
      + day              = (known after apply)
      + hour             = (known after apply)
      + id               = (known after apply)
      + minute           = (known after apply)
      + month            = (known after apply)
      + rfc3339          = (known after apply)
      + rotation_days    = 365
      + rotation_rfc3339 = (known after apply)
      + second           = (known after apply)
      + unix             = (known after apply)
      + year             = (known after apply)
    }

  # module.environment["dev"].azuread_application.app will be updated in-place
  ~ resource "azuread_application" "app" {
        id                             = "5f463690-f80e-4284-bb35-0b7c2cd014c3"
      ~ oauth2_permission_scope_ids    = {
          - "user_impersonation" = "9e904c6f-2000-ee6c-a227-8aa5f433c856"
        } -> (known after apply)
        tags                           = []
        # (14 unchanged attributes hidden)

      ~ api {
            # (3 unchanged attributes hidden)

          - oauth2_permission_scope {
              - admin_consent_description  = "Allow the application to access DTS Operations (env:dev) on behalf of the signed-in user." -> null
              - admin_consent_display_name = "Access DTS Operations (env:dev)" -> null
              - enabled                    = true -> null
              - id                         = "9e904c6f-2000-ee6c-a227-8aa5f433c856" -> null
              - type                       = "User" -> null
              - user_consent_description   = "Allow the application to access DTS Operations (env:dev) on your behalf." -> null
              - user_consent_display_name  = "Access DTS Operations (env:dev)" -> null
              - value                      = "user_impersonation" -> null
            }
          + oauth2_permission_scope {
              + admin_consent_description  = "Allow the application to access DTS Operations (env:dev) on behalf of the signed-in user."
              + admin_consent_display_name = "Access DTS Operations (env:dev)"
              + enabled                    = true
              + id                         = (known after apply)
              + type                       = "User"
              + user_consent_description   = "Allow the application to access DTS Operations (env:dev) on your behalf."
              + user_consent_display_name  = "Access DTS Operations (env:dev)"
              + value                      = "user_impersonation"
            }
        }

      ~ web {
          ~ homepage_url  = "https://dev.azure.com/hmcts/Operations" -> "https://dev.azure.com/hmcts/PlatformOperations"
            # (1 unchanged attribute hidden)

            # (1 unchanged block hidden)
        }

        # (6 unchanged blocks hidden)
    }

  # module.environment["dev"].azuread_application_password.token will be created
  + resource "azuread_application_password" "token" {
      + application_object_id = "5f463690-f80e-4284-bb35-0b7c2cd014c3"
      + display_name          = (known after apply)
      + end_date              = (known after apply)
      + id                    = (known after apply)
      + key_id                = (known after apply)
      + rotate_when_changed   = (known after apply)
      + start_date            = (known after apply)
      + value                 = (sensitive value)
    }

  # module.environment["dev"].azuread_group.groups["DNS Zone Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "DEV DNS Zone Contributer Group" -> "Grants dns zone contributor permissions to the dev environment"
        id                         = "4fbd49ac-0f41-4712-b4ac-780af587f33b"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["dev"].azuread_group.groups["DTS Operations"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "DEV Operations elevated access" -> "dev Operations elevated access"
        id                         = "11743ca2-05f1-48f9-a28a-e62f3075ddc4"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["dev"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "11743ca2-05f1-48f9-a28a-e62f3075ddc4"
    }

  # module.environment["dev"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_object_id  = "4fbd49ac-0f41-4712-b4ac-780af587f33b"
      + id               = (known after apply)
      + member_object_id = "11743ca2-05f1-48f9-a28a-e62f3075ddc4"
    }

  # module.environment["dev"].azuread_group_member.members["DNS Zone Contributor"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "4fbd49ac-0f41-4712-b4ac-780af587f33b"
      + id               = (known after apply)
      + member_object_id = "91964082-2d21-44e5-b279-245b7bfb0c18"
    }

  # module.environment["dev"].azuread_group_member.members["DTS Operations"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "11743ca2-05f1-48f9-a28a-e62f3075ddc4"
      + id               = (known after apply)
      + member_object_id = "91964082-2d21-44e5-b279-245b7bfb0c18"
    }

  # module.environment["dev"].azuredevops_serviceendpoint_azurerm.endpoint[0] will be updated in-place
  ~ resource "azuredevops_serviceendpoint_azurerm" "endpoint" {
        id                        = "39355da5-655e-4d9e-8191-d5598b5c7de9"
        # (7 unchanged attributes hidden)

      + credentials {
          + serviceprincipalid  = "c3cba95b-f527-49c4-99ba-f5848722b3b6"
          + serviceprincipalkey = (sensitive value)
        }

        # (1 unchanged block hidden)
    }

  # module.environment["dev"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "uksouth"
      + name     = "enterprise-dev-rg"
      + tags     = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Low"
          + "environment"  = "development"
        }
    }

  # module.environment["dev"].azurerm_service_plan.asp will be created
  + resource "azurerm_service_plan" "asp" {
      + id                           = (known after apply)
      + kind                         = (known after apply)
      + location                     = "uksouth"
      + maximum_elastic_worker_count = (known after apply)
      + name                         = "enterprise-dev-asp"
      + os_type                      = "Windows"
      + per_site_scaling_enabled     = false
      + reserved                     = (known after apply)
      + resource_group_name          = "enterprise-dev-rg"
      + sku_name                     = "Y1"
      + tags                         = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Low"
          + "environment"  = "development"
        }
      + worker_count                 = (known after apply)
    }

  # module.environment["dev"].random_uuid.app_uuid will be created
  + resource "random_uuid" "app_uuid" {
      + id     = (known after apply)
      + result = (known after apply)
    }

  # module.environment["dev"].time_rotating.one_year will be created
  + resource "time_rotating" "one_year" {
      + day              = (known after apply)
      + hour             = (known after apply)
      + id               = (known after apply)
      + minute           = (known after apply)
      + month            = (known after apply)
      + rfc3339          = (known after apply)
      + rotation_days    = 365
      + rotation_rfc3339 = (known after apply)
      + second           = (known after apply)
      + unix             = (known after apply)
      + year             = (known after apply)
    }

  # module.environment["ithc"].azuread_application.app will be updated in-place
  ~ resource "azuread_application" "app" {
        id                             = "cae18304-2c43-46af-86e8-926702c344b4"
      ~ oauth2_permission_scope_ids    = {
          - "user_impersonation" = "25c57000-6bec-e683-c130-7446f69308d5"
        } -> (known after apply)
        tags                           = []
        # (14 unchanged attributes hidden)

      ~ api {
            # (3 unchanged attributes hidden)

          - oauth2_permission_scope {
              - admin_consent_description  = "Allow the application to access DTS Operations (env:ithc) on behalf of the signed-in user." -> null
              - admin_consent_display_name = "Access DTS Operations (env:ithc)" -> null
              - enabled                    = true -> null
              - id                         = "25c57000-6bec-e683-c130-7446f69308d5" -> null
              - type                       = "User" -> null
              - user_consent_description   = "Allow the application to access DTS Operations (env:ithc) on your behalf." -> null
              - user_consent_display_name  = "Access DTS Operations (env:ithc)" -> null
              - value                      = "user_impersonation" -> null
            }
          + oauth2_permission_scope {
              + admin_consent_description  = "Allow the application to access DTS Operations (env:ithc) on behalf of the signed-in user."
              + admin_consent_display_name = "Access DTS Operations (env:ithc)"
              + enabled                    = true
              + id                         = (known after apply)
              + type                       = "User"
              + user_consent_description   = "Allow the application to access DTS Operations (env:ithc) on your behalf."
              + user_consent_display_name  = "Access DTS Operations (env:ithc)"
              + value                      = "user_impersonation"
            }
        }

      ~ web {
          ~ homepage_url  = "https://dev.azure.com/hmcts/Operations" -> "https://dev.azure.com/hmcts/PlatformOperations"
            # (1 unchanged attribute hidden)

            # (1 unchanged block hidden)
        }

        # (6 unchanged blocks hidden)
    }

  # module.environment["ithc"].azuread_application_password.token will be created
  + resource "azuread_application_password" "token" {
      + application_object_id = "cae18304-2c43-46af-86e8-926702c344b4"
      + display_name          = (known after apply)
      + end_date              = (known after apply)
      + id                    = (known after apply)
      + key_id                = (known after apply)
      + rotate_when_changed   = (known after apply)
      + start_date            = (known after apply)
      + value                 = (sensitive value)
    }

  # module.environment["ithc"].azuread_group.groups["DNS Zone Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "ITHC DNS Zone Contributer Group" -> "Grants dns zone contributor permissions to the ithc environment"
        id                         = "457aabff-86ec-49cc-9b77-6b7b59420356"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["ithc"].azuread_group.groups["DTS Operations"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "ITHC Operations elevated access" -> "ithc Operations elevated access"
        id                         = "e564e3d3-ade1-457a-86bc-72cd74ec0fc8"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["ithc"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "e564e3d3-ade1-457a-86bc-72cd74ec0fc8"
    }

  # module.environment["ithc"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_objec

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

    = "af66f4e5-bd36-4ad9-a265-d9e7c947cbab"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["sbox"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "af66f4e5-bd36-4ad9-a265-d9e7c947cbab"
    }

  # module.environment["sbox"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_object_id  = "6c2d130e-ba66-408a-bdf9-f426a9730923"
      + id               = (known after apply)
      + member_object_id = "af66f4e5-bd36-4ad9-a265-d9e7c947cbab"
    }

  # module.environment["sbox"].azuread_group_member.members["DNS Zone Contributor"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "6c2d130e-ba66-408a-bdf9-f426a9730923"
      + id               = (known after apply)
      + member_object_id = "96b4a135-4a67-45db-a565-988d7cf7eda6"
    }

  # module.environment["sbox"].azuread_group_member.members["DTS Operations"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "af66f4e5-bd36-4ad9-a265-d9e7c947cbab"
      + id               = (known after apply)
      + member_object_id = "96b4a135-4a67-45db-a565-988d7cf7eda6"
    }

  # module.environment["sbox"].azuredevops_serviceendpoint_azurerm.endpoint[0] will be updated in-place
  ~ resource "azuredevops_serviceendpoint_azurerm" "endpoint" {
        id                        = "dc2f4ae1-25f7-4c18-94f1-9c87f16eaf29"
        # (7 unchanged attributes hidden)

      + credentials {
          + serviceprincipalid  = "b201f38b-4f31-4301-8426-9e5ccc6c383d"
          + serviceprincipalkey = (sensitive value)
        }

        # (1 unchanged block hidden)
    }

  # module.environment["sbox"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "uksouth"
      + name     = "enterprise-sbox-rg"
      + tags     = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Low"
          + "environment"  = "sandbox"
        }
    }

  # module.environment["sbox"].azurerm_service_plan.asp will be created
  + resource "azurerm_service_plan" "asp" {
      + id                           = (known after apply)
      + kind                         = (known after apply)
      + location                     = "uksouth"
      + maximum_elastic_worker_count = (known after apply)
      + name                         = "enterprise-sbox-asp"
      + os_type                      = "Windows"
      + per_site_scaling_enabled     = false
      + reserved                     = (known after apply)
      + resource_group_name          = "enterprise-sbox-rg"
      + sku_name                     = "Y1"
      + tags                         = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Low"
          + "environment"  = "sandbox"
        }
      + worker_count                 = (known after apply)
    }

  # module.environment["sbox"].random_uuid.app_uuid will be created
  + resource "random_uuid" "app_uuid" {
      + id     = (known after apply)
      + result = (known after apply)
    }

  # module.environment["sbox"].time_rotating.one_year will be created
  + resource "time_rotating" "one_year" {
      + day              = (known after apply)
      + hour             = (known after apply)
      + id               = (known after apply)
      + minute           = (known after apply)
      + month            = (known after apply)
      + rfc3339          = (known after apply)
      + rotation_days    = 365
      + rotation_rfc3339 = (known after apply)
      + second           = (known after apply)
      + unix             = (known after apply)
      + year             = (known after apply)
    }

  # module.environment["stg"].azuread_application.app will be updated in-place
  ~ resource "azuread_application" "app" {
        id                             = "0765b073-cc02-4287-ba01-4a8dff3e1a93"
      ~ oauth2_permission_scope_ids    = {
          - "user_impersonation" = "cfd4c329-8f97-53b1-9dcb-0fcb4593ffcf"
        } -> (known after apply)
        tags                           = []
        # (14 unchanged attributes hidden)

      ~ api {
            # (3 unchanged attributes hidden)

          - oauth2_permission_scope {
              - admin_consent_description  = "Allow the application to access DTS Operations (env:stg) on behalf of the signed-in user." -> null
              - admin_consent_display_name = "Access DTS Operations (env:stg)" -> null
              - enabled                    = true -> null
              - id                         = "cfd4c329-8f97-53b1-9dcb-0fcb4593ffcf" -> null
              - type                       = "User" -> null
              - user_consent_description   = "Allow the application to access DTS Operations (env:stg) on your behalf." -> null
              - user_consent_display_name  = "Access DTS Operations (env:stg)" -> null
              - value                      = "user_impersonation" -> null
            }
          + oauth2_permission_scope {
              + admin_consent_description  = "Allow the application to access DTS Operations (env:stg) on behalf of the signed-in user."
              + admin_consent_display_name = "Access DTS Operations (env:stg)"
              + enabled                    = true
              + id                         = (known after apply)
              + type                       = "User"
              + user_consent_description   = "Allow the application to access DTS Operations (env:stg) on your behalf."
              + user_consent_display_name  = "Access DTS Operations (env:stg)"
              + value                      = "user_impersonation"
            }
        }

      ~ web {
          ~ homepage_url  = "https://dev.azure.com/hmcts/Operations" -> "https://dev.azure.com/hmcts/PlatformOperations"
            # (1 unchanged attribute hidden)

            # (1 unchanged block hidden)
        }

        # (6 unchanged blocks hidden)
    }

  # module.environment["stg"].azuread_application_password.token will be created
  + resource "azuread_application_password" "token" {
      + application_object_id = "0765b073-cc02-4287-ba01-4a8dff3e1a93"
      + display_name          = (known after apply)
      + end_date              = (known after apply)
      + id                    = (known after apply)
      + key_id                = (known after apply)
      + rotate_when_changed   = (known after apply)
      + start_date            = (known after apply)
      + value                 = (sensitive value)
    }

  # module.environment["stg"].azuread_group.groups["DNS Zone Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "STG DNS Zone Contributer Group" -> "Grants dns zone contributor permissions to the stg environment"
        id                         = "2cab9ccf-e755-4b58-a6b6-692705f3e79d"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["stg"].azuread_group.groups["DTS Operations"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "STG Operations elevated access" -> "stg Operations elevated access"
        id                         = "63469462-b784-42e8-8a66-20a8840ac84a"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["stg"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "63469462-b784-42e8-8a66-20a8840ac84a"
    }

  # module.environment["stg"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_object_id  = "2cab9ccf-e755-4b58-a6b6-692705f3e79d"
      + id               = (known after apply)
      + member_object_id = "63469462-b784-42e8-8a66-20a8840ac84a"
    }

  # module.environment["stg"].azuread_group_member.members["DNS Zone Contributor"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "2cab9ccf-e755-4b58-a6b6-692705f3e79d"
      + id               = (known after apply)
      + member_object_id = "9bf470fb-2fcd-46b8-9eb1-2b2bea4bec78"
    }

  # module.environment["stg"].azuread_group_member.members["DTS Operations"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "63469462-b784-42e8-8a66-20a8840ac84a"
      + id               = (known after apply)
      + member_object_id = "9bf470fb-2fcd-46b8-9eb1-2b2bea4bec78"
    }

  # module.environment["stg"].azuredevops_serviceendpoint_azurerm.endpoint[0] will be updated in-place
  ~ resource "azuredevops_serviceendpoint_azurerm" "endpoint" {
        id                        = "9796bbdf-e1ef-4054-941c-c2b553c42f0f"
        # (7 unchanged attributes hidden)

      + credentials {
          + serviceprincipalid  = "5dc19618-2431-4cf2-8964-d215cce2175f"
          + serviceprincipalkey = (sensitive value)
        }

        # (1 unchanged block hidden)
    }

  # module.environment["stg"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "uksouth"
      + name     = "enterprise-stg-rg"
      + tags     = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "High"
          + "environment"  = "staging"
        }
    }

  # module.environment["stg"].azurerm_service_plan.asp will be created
  + resource "azurerm_service_plan" "asp" {
      + id                           = (known after apply)
      + kind                         = (known after apply)
      + location                     = "uksouth"
      + maximum_elastic_worker_count = (known after apply)
      + name                         = "enterprise-stg-asp"
      + os_type                      = "Windows"
      + per_site_scaling_enabled     = false
      + reserved                     = (known after apply)
      + resource_group_name          = "enterprise-stg-rg"
      + sku_name                     = "Y1"
      + tags                         = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "High"
          + "environment"  = "staging"
        }
      + worker_count                 = (known after apply)
    }

  # module.environment["stg"].random_uuid.app_uuid will be created
  + resource "random_uuid" "app_uuid" {
      + id     = (known after apply)
      + result = (known after apply)
    }

  # module.environment["stg"].time_rotating.one_year will be created
  + resource "time_rotating" "one_year" {
      + day              = (known after apply)
      + hour             = (known after apply)
      + id               = (known after apply)
      + minute           = (known after apply)
      + month            = (known after apply)
      + rfc3339          = (known after apply)
      + rotation_days    = 365
      + rotation_rfc3339 = (known after apply)
      + second           = (known after apply)
      + unix             = (known after apply)
      + year             = (known after apply)
    }

  # module.environment["test"].azuread_application.app will be updated in-place
  ~ resource "azuread_application" "app" {
        id                             = "90950051-fbb1-40e5-aede-b661a736c1ef"
      ~ oauth2_permission_scope_ids    = {
          - "user_impersonation" = "6ede0ccc-5f87-b27b-30fe-3ff515c7f215"
        } -> (known after apply)
        tags                           = []
        # (14 unchanged attributes hidden)

      ~ api {
            # (3 unchanged attributes hidden)

          - oauth2_permission_scope {
              - admin_consent_description  = "Allow the application to access DTS Operations (env:test) on behalf of the signed-in user." -> null
              - admin_consent_display_name = "Access DTS Operations (env:test)" -> null
              - enabled                    = true -> null
              - id                         = "6ede0ccc-5f87-b27b-30fe-3ff515c7f215" -> null
              - type                       = "User" -> null
              - user_consent_description   = "Allow the application to access DTS Operations (env:test) on your behalf." -> null
              - user_consent_display_name  = "Access DTS Operations (env:test)" -> null
              - value                      = "user_impersonation" -> null
            }
          + oauth2_permission_scope {
              + admin_consent_description  = "Allow the application to access DTS Operations (env:test) on behalf of the signed-in user."
              + admin_consent_display_name = "Access DTS Operations (env:test)"
              + enabled                    = true
              + id                         = (known after apply)
              + type                       = "User"
              + user_consent_description   = "Allow the application to access DTS Operations (env:test) on your behalf."
              + user_consent_display_name  = "Access DTS Operations (env:test)"
              + value                      = "user_impersonation"
            }
        }

      ~ web {
          ~ homepage_url  = "https://dev.azure.com/hmcts/Operations" -> "https://dev.azure.com/hmcts/PlatformOperations"
            # (1 unchanged attribute hidden)

            # (1 unchanged block hidden)
        }

        # (6 unchanged blocks hidden)
    }

  # module.environment["test"].azuread_application_password.token will be created
  + resource "azuread_application_password" "token" {
      + application_object_id = "90950051-fbb1-40e5-aede-b661a736c1ef"
      + display_name          = (known after apply)
      + end_date              = (known after apply)
      + id                    = (known after apply)
      + key_id                = (known after apply)
      + rotate_when_changed   = (known after apply)
      + start_date            = (known after apply)
      + value                 = (sensitive value)
    }

  # module.environment["test"].azuread_group.groups["DNS Zone Contributor"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "TEST DNS Zone Contributer Group" -> "Grants dns zone contributor permissions to the test environment"
        id                         = "f0ab83b0-38df-4ae5-b203-fcef7ac01488"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["test"].azuread_group.groups["DTS Operations"] will be updated in-place
  ~ resource "azuread_group" "groups" {
      ~ description                = "TEST Operations elevated access" -> "test Operations elevated access"
        id                         = "6bb3f8b2-b125-45d4-b0c2-60fef02a7d7f"
      ~ prevent_duplicate_names    = false -> true
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.environment["test"].azuread_group_member.acr will be created
  + resource "azuread_group_member" "acr" {
      + group_object_id  = "d067416c-5ac7-4289-aa38-c1c9bb5800aa"
      + id               = (known after apply)
      + member_object_id = "6bb3f8b2-b125-45d4-b0c2-60fef02a7d7f"
    }

  # module.environment["test"].azuread_group_member.dns_zone_contributor will be created
  + resource "azuread_group_member" "dns_zone_contributor" {
      + group_object_id  = "f0ab83b0-38df-4ae5-b203-fcef7ac01488"
      + id               = (known after apply)
      + member_object_id = "6bb3f8b2-b125-45d4-b0c2-60fef02a7d7f"
    }

  # module.environment["test"].azuread_group_member.members["DNS Zone Contributor"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "f0ab83b0-38df-4ae5-b203-fcef7ac01488"
      + id               = (known after apply)
      + member_object_id = "1c86ae42-3d30-4159-8e13-f7b20bec2d43"
    }

  # module.environment["test"].azuread_group_member.members["DTS Operations"] will be created
  + resource "azuread_group_member" "members" {
      + group_object_id  = "6bb3f8b2-b125-45d4-b0c2-60fef02a7d7f"
      + id               = (known after apply)
      + member_object_id = "1c86ae42-3d30-4159-8e13-f7b20bec2d43"
    }

  # module.environment["test"].azuredevops_serviceendpoint_azurerm.endpoint[0] will be updated in-place
  ~ resource "azuredevops_serviceendpoint_azurerm" "endpoint" {
        id                        = "4df325b3-2881-4a16-933d-0c9dc1961158"
        # (7 unchanged attributes hidden)

      + credentials {
          + serviceprincipalid  = "abdc13f5-771c-426e-873d-8af904478062"
          + serviceprincipalkey = (sensitive value)
        }

        # (1 unchanged block hidden)
    }

  # module.environment["test"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "uksouth"
      + name     = "enterprise-test-rg"
      + tags     = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Medium"
          + "environment"  = "testing"
        }
    }

  # module.environment["test"].azurerm_service_plan.asp will be created
  + resource "azurerm_service_plan" "asp" {
      + id                           = (known after apply)
      + kind                         = (known after apply)
      + location                     = "uksouth"
      + maximum_elastic_worker_count = (known after apply)
      + name                         = "enterprise-test-asp"
      + os_type                      = "Windows"
      + per_site_scaling_enabled     = false
      + reserved                     = (known after apply)
      + resource_group_name          = "enterprise-test-rg"
      + sku_name                     = "Y1"
      + tags                         = {
          + "application"  = "core"
          + "builtFrom"    = "hmcts/azure-enterprise"
          + "businessArea" = "Cross-Cutting"
          + "criticality"  = "Medium"
          + "environment"  = "testing"
        }
      + worker_count                 = (known after apply)
    }

  # module.environment["test"].random_uuid.app_uuid will be created
  + resource "random_uuid" "app_uuid" {
      + id     = (known after apply)
      + result = (known after apply)
    }

  # module.environment["test"].time_rotating.one_year will be created
  + resource "time_rotating" "one_year" {
      + day              = (known after apply)
      + hour             = (known after apply)
      + id               = (known after apply)
      + minute           = (known after apply)
      + month            = (known after apply)
      + rfc3339          = (known after apply)
      + rotation_days    = 365
      + rotation_rfc3339 = (known after apply)
      + second           = (known after apply)
      + unix             = (known after apply)
      + year             = (known after apply)
    }

Plan: 81 to add, 36 to change, 0 to destroy.


Python3.13 remove telnetlib

https://peps.python.org/pep-0594/#telnetlib
Deprecated since version 3.11, will be removed in version 3.13: The telnetlib module is deprecated (see PEP 594 for details and alternatives).
￼ File "D:\PythonPrj\gms\ncc_check\robot\robot_main.py", line 11, in <module>
  from robot.libraries import Telnet
File "C:\Python313\Lib\site-packages\robot\libraries\Telnet.py", line 21, in <module>
  import telnetlib

builtins.ModuleNotFoundError: No module named 'telnetlib'

Yes, telnetlib will be removed in Python 3.13, but there already exists an external telnetlib-313-and-up that can be used instead. We are also planning to make Robot's Telnet library an external library (#3537), but it requires setting up the new external project first.


Submit bloxmove

To make a submission to the Dapps Page, please complete the task lists
below; otherwise remove them.

Your Dapp:

[ ] connects to Valora via WalletConnect V1 or DAppKit;
[x] must be mobile-first or mobile responsive;
[x] includes a link to user documentation.

Closing as this PR has been inactive for almost 2 months.


fix(docker): permissions relating to uploads directory

Moves uploads directory to project root
Amend Dockerfile to ensure node owners owns the uploads directory
Provide a volume mount between local filesystem and Docker container for when running locally via Docker Compose

:tada: This PR is included in version 2.2.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Automated cherry pick of #6050: Fix wrong TCP flags validation (#6050)

Cherry pick of #6050 on release-1.14.
#6050: Fix wrong TCP flags validation (#6050)
For details on the cherry pick process, see the cherry pick requests page.

/skip-all

/skip-all


Nonexistent function 'get_log_history'

Running the demos to get an understanding of how this plugin works, in demo 10, clicking "History Log" brings up the following error:
Invalid call. Nonexistent function 'get_log_history' in base 'RefCounted (dynamic_save_dialogue.gd)'.

Should be fixed now. Thanks!


New 'info' sub command

If I add then commit a file, I can see in the console that hash was calculated for the commit.   I can't see from the command line to conjure up that hash again.  oxen info <resource-path> would be a great addition to see the hash and other oxen-centric meta info for the same resource.
Related, oxen log <resource-path> would be nice place for a subset of commits that affected that named resource.

Thanks for the thoughts @paul-hammant! We're looking into adding the oxen info command now, we will expose the hash, the extracted data type, and other metadata oxen can detect about the file.
oxen log <resource-path> is also super interesting. Adding to the backlog

Added the oxen info subcommand in release 0.6.6

Fantastic!


KEP-3705 CloudDualStackNodeIPs docs

While trying to figure out where to document this, I noticed that we document single-stack --node-ip in the node docs, and dual-stack --node-ip only in the dual-stack docs. Given the existing docs, it seemed to make the most sense to add the cloud dual-stack note to the dual-stack docs, but I also added a link from the node docs. (I did this as a separate commit since it makes sense independently of the KEP-3705 documentation, but feel free to squash.)
Might need better explanation of enabling the feature gate?

Why is this not giving me a preview? That seemed to happen automatically on past docs PRs...

/retitle Add docs for CloudDualStackNodeIPs docs (KEP-3705)
Looks like the Netlify integration is broken.

LGTM for docs.
Does this need a tech review? I think I'd prefer one.

BTW you can get a Netlify preview if you force-push a slightly different commit / set of commits.

Does this need a tech review? I think I'd prefer one.

/assign @aojea

BTW you can get a Netlify preview if you force-push a slightly different commit / set of commits.

eh, I figured out how to be non-lazy and build the docs locally :slightly_smiling_face:. Mostly I wanted to make sure that the added "feature-state" bit looked right in context, and it does.

/lgtm

@kubernetes/sig-network-pr-reviews : PTAL and provide a tech signoff. Once done, we shall be ready for merge!

/approve
/hold

/label tide/merge-method-squash

/hold cancel

/lgtm


Travis Forge Password Changed

https://travis-ci.org/arioch/puppet-redis/jobs/252498253
@arioch Can you have a look at this? Says the passwords wrong 😢

@petems / @arioch  - Is this why release 3.2.0 isn't availible on https://forge.puppet.com/arioch/redis ?

@jaredledvina Indeed, haven't been able to do a release since the password failed

Fixed by @arioch 😄


Fix percent sign attributes with no payload

Some PPX macros like https://github.com/janestreet/ppx_here are used without any contents like [%here], in this case the current version of the extension gets stuck and doesn't exit when it sees the right square bracket, this PR fixes it.

Thanks!

@freebroccolo If you haven't already would you mind publishing an update to the extension with this fix? The way I have things set up at work it's way easier if I can just update the extension.
Also I may be willing to help very casually maintain this plugin and review PRs if you'd like. I'm planning on attempting to use it at work. You can check out my Github and website to appraise me as an open source citizen.

@trishume unfortunately I don't have the bandwidth to do proper testing for another release right now and I'm reluctant to publish something and then have it be broken for a lot of people.
It's a slight inconvenience to maintain your own local version but doable. Another option would be to publish your own fork of this which you can then publish and install as usual.
I appreciate the offer to help maintain the extension but at this point I don't have the bandwidth even to casually maintain the extension and prepare releases behind the scenes. It would probably be better to check out the other extension the Reason folks are using now instead.


doc: update installation in the ReadMe

[ ] #32

@NRayya
LGTM but you still need to complete the wrapper events section

@NRayya
And I think it is important to add notes or warning about the generated data from NMRium

⚠ WARNING: Data Conversion.
Data should be converted from a Typed Array to a Array, without this step the NMRium will not be able to load the spectra.
version object is important for NMRium data migration.

@NRayya
One more thing I think it is better to make a PR to the development branch and not directly to the main branch to have a consistent flow


Add AlphaWallet by @kristiinara

[x] Project URL: https://github.com/AlphaWallet/alpha-wallet-ios
[x] Update contents.json instead of README
[x] One project per pull request
[x] Screenshot included
[x] Avoid iOS or open-source in description as it is assumed
[x] Use this commit title format if applicable: Add app-name by @github-username
[x] Use approved format for your entry

Thank you!


Add Korean README

Thank you for your work @qianc62! I translated the README to Korean.

Thank you!


ENH: Benchmarking global optimizers

This PR adds over 100 classes that can be used to benchmark global optimizers.  Global optimizers are methods for finding minima in functions that may have multiple local minima but few global minima, may not be differentiable, etc.  Global optimizers need to be used because normal minimizers typically can't cope with starting points that are far away from the global minimum.
These global benchmarking functions are based on a suite written by Andrea Gavana, https://code.google.com/p/ampgo/.

I was thinking of making a PR into this branch to address some of the tiny issues in the comments above like scipy.misc -> scipy.special but I see that the Merge pull request button is disabled for me so I think that means it needs a rebase...  I'm not sure how this benchmarking PR interacts with the new asv benchmarking system.

The files need to be moved under benchmarks/benchmarks/, and the ~100 lines changed in benchmarks/benchmark_global_optimizers.py need to be adapted so that it works with asv.

The reason that the PR hasn't progressed any further is that:

checks need to be done on whether the documentation/comments match what
the function returns
for some functions the literature differs on equations/global minima,
etc.
it would be nice to get a standard form for the documentation.

The above 3 points aren't difficult in themselves, it's just that there are

120 functions to do this for.  I don't want to do it more than once.
Alternatively, it would be nice if there was a few other contributors to
split the work.
If it did comply w.r.t. the asv benchmarking could it go in as it is, or
would it have to be polished up to the standard that is expected for the
main scipy.* codebase?

With respect to the asv benchmarking, it's important to note that we're not
really interested in runtime or memory usage.  Rather, we're only
interested in how many times a particular solver reaches a minimum.

I apparently deleted the global optimizer benchmarks when porting to asv. Anyway, here's rebased and asv-ported branch of this one: https://github.com/pv/scipy-work/tree/pr-4191

@pv, @argriffing what's the best way for workflow on this PR?
Should I pull the changes from https://github.com/pv/scipy-work/tree/pr-4191 back onto andyfaff/go_benchmark?  Or would it be better for me to close this PR and for the PR to be re-submitted from pv's branch?

Re asv: it is possible to track arbitrary performance numbers, for example nfev with it -- here's the smooth optimizer one: https://pv.github.io/scipy-bench/#optimize.BenchSmoothUnbounded.track_all
Currently, it's however not possible to return multiple values from a benchmark, so it runs it twice to get mean_nfev and success%. This is maybe not a problem, and will probably be fixed in the future.
@andyfaff: you can do
git remote add pv https://github.com/pv/scipy-work.git
git fetch pv pr-4191
git branch go_benchmark-old go_benchmark
git checkout go_benchmark
git reset --hard pv/pr-4191
git push -f

to get my rebased branch up here, which may be the simplest option in case you want to make some changes still.

As to your other questions: potential errors in the benchmark functions or their docstrings probably don't block merging this. Another thing: I removed the anneal benchmark, as it is not present in current scipy --- it could be added back, in case we want to compare its performance in previous scipy versions.
The current benchmark set also runs with numtrials=1, so the success% information is not super-useful. Could perhaps be increased, although already with numtrials=1 it takes around 10 min to run.

Anneal definitely not needed.
The main aim of the GO benchmark suite was to compare success% and how
many nfev it took to achieve that success across all the global optimizers.
For example, if you have a solver that achieves success 50% of the time,
but with nfev=10000, you might want to swap it for a solver that achieves
success 40% of the time, but with nfev=2000. In order for the stats to be
worthwhile I would say one would need numtrials >= 100.  This would take
the best part of a day to run.  If that's the case it's essential that nfev
and %success are recorded.
This kind of benchmark is not one that you would want to run automatically.
On 23 February 2015 at 12:10, Pauli Virtanen<EMAIL_ADDRESS>wrote:

As to your other questions: potential errors in the benchmark functions or
their docstrings probably don't block merging this. Another thing: I
removed the anneal benchmark, as it is not present in current scipy --- it
could be added back, in case we want to compare its performance in previous
scipy versions.
The current benchmark set also runs with numtrials=1, so the success%
information is not super-useful. Could perhaps be increased, although
already with numtrials=1 it takes around 10 min to run.
—
Reply to this email directly or view it on GitHub
https://github.com/scipy/scipy/pull/4191#issuecomment-75477155.

--

Dr. Andrew Nelson

Regarding point 3 (docstring formatting), it should/can only be changed after hooking these functions up with the html docs. Because they're not importable that's not completely trivial. I planned to figure that one out but got side-tracked. I'd still like to do it, but as @pv says it's not a pre-requisite for merging. So for now let's only check that the contents are correct.

@andyfaff you can assign me a bunch of functions to split the work. If you have a particular workflow on how to check these functions, that would be useful to know.

@rgommers, I have a whole heap of references.  Mostly the references concur, but there are some were they don't.  In some cases the equations are different from reference to reference. In some cases the global minima aren't even correct for the equation :-(.  This is why it's necessary to have a reference for each function.
1. If the references don't concur I go with the one that feels 'right'. If it's in the majority, for example.
2. I check that the quoted f(x) for the global minimum is correct for a given vector x. (This is one of the tests I added).
3. During the benchmarking if I find a global minimum that is less than the quoted global minimum then I check that the function is correct.  If it is, then I assume that the reference hadn't found the global minimum, and that I've found a lower value.  I then replace the values for f(x) and x in the class.

In case numtrials needs to be large, you can probably increase the
default numtrials and skip the benchmark by default unless a special
environment variable is set, ie.,
    def __init__(self):
        def skip(name, ret_value, solver):
            slow = False
            try:
                slow = int(os.environ.get('SCIPY_XSLOW', 0))
            except ValueError:
                pass
            if not slow:
                print("Benchmark skipped -- export SCIPY_XSLOW=1 to enable")
                raise NotImplementedError()
        self.track_all.__func__.setup = skip

Or, add separate test function with larger numtrials, in addition to the
one with the small one. It could also make sense to control which test
functions to run for and what numtrials to use via other environment
variables.

Currently working through all functions, giving each one a literature reference.  Then checking that the minimum is correct.  I'm currently halfway through D. Once that's done the code should be in a reasonable state, but the docstrings (esp the equations) would then need overhauling to check the equations match the code.

Completed A-M, checked in.

@pv, @rgommers I've gone through all the benchmark functions giving them a reference as to where they came from in the docstring.  Also, I've checked the function code, that it's (hopefully) correct and that it matches the reference.  There were several instances where the literature disagreed and those all had to be resolved.
The next step would be to overhaul the docstrings. There will be several instances where the docstring doesn't match the equation, and where the global minimum/solution doesn't match the code.
Also, when I run the asv benchmark, python runtests.py --bench optimize.Global I get failed for several of them.  I don't know what that failed means.  Can either of you shed any light on that?

failed can mean exception raised, or, timeout (if no specific error message was printed). The default timeout is 2 min, can be adjusted by adding a timeout attribute to the benchmark class, cf. https://spacetelescope.github.io/asv/writing_benchmarks.html#benchmark-attributes

@andyfaff needs a rebase

@ev-br, rebased. The current status of this PR is as follows:

I am fairly sure that all the benchmark functions are correct (there's over 130, it's a lot to audit).
The docstrings for all the benchmark functions have a literature reference from where the problem has been taken, for future reference (see 3).
However, the overall state of the docstrings are not in a good state. For example, a lot of the literature may not be consistent for a given function. The original docstring may therefore have the wrong equation, or the wrong minimum, etc. I simply don't have the time to go through all the docstrings to correct them. It's an enormous task
Benchmarking of the global optimizers takes a long time. Benchmarking is done on the number of function iterations, and the percentage of successful minimisations, not time. Typically each function is run through each minimizer 100 times. Doing all this takes > 1 day. This is not something anyone would want to run automatically, it should be an intentional ask. I don't know enough about the asv setup to do this at this stage.

I think the benchmark functions are a good enhancement to scipy. I don't know how to progress further though. Personally, I would add the benchmark functions as is, after altering the running code to ensure that the go_benchmarks are only run if asked for specifically.

Thanks, merged in b0ca818, with some modifications to the test runner, so that they are only run when asked. Better ways to run these benchmarks (performance profile plots etc) can be probably worked on later.

@andyfaff Nice work.


SDK Version loaded from node_modules structure breaks when bundling

I had the library completely fail to send app insights.
After rooting around in the source code I managed to diagnose the issue by adding some extra logging:

[03/09/2019 11:29:35] ApplicationInsights: {"itemsReceived":1,"itemsAccepte
d":0,"errors":[{"index":0,"statusCode":400,"message":"5: SDK version '0.0.0-sema
ntic-version' has been deprecated and is no longer supported. Please update to v
ersion '0.0.0' or greater."}]} []

For some reason it's sending my application's package.json version as the application insights version! Strange, until you read where it gets this value:
        var packageJsonPath = path.resolve(__dirname, "../../package.json");
        if (!Context.sdkVersion) {
            Context.sdkVersion = "unknown";
            try {
                var packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
                if (packageJson && typeof packageJson.version === "string") {
                    Context.sdkVersion = packageJson.version;
                }
            }
            catch (exception) {
                Logging.info("unable to read app version: ", exception);
            }
        }
        this.tags[this.keys.internalSdkVersion] = "node:" + Context.sdkVersion;

We use webpack to bundle our code into a single Azure Function. So of course, the bundled code isn't running in the node_modules folder.
This seems a very brittle way to get the version.
I cann't even work around it by specifying the version manually:
  client.trackEvent({
    name: "test.event",
    properties: {
      test: "Test!"
    },
    tagOverrides: {
      "ai.internal.sdkVersion": "node:1.4.1"
    }
  });

But there must be a better way!
Edit It seems to work in production. Presumably it's because there's no package.json for it to incorrectly pick up a version from.
I have an idea for a solution. As well as checking the packageJson.version also check the packageJson.name matches the actual package: "applicationinsights" or similar:
        var packageJsonPath = path.resolve(__dirname, "../../package.json");
        if (!Context.sdkVersion) {
            Context.sdkVersion = "unknown";
            try {
                var packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
                if (packageJson &&
                    packageJson.name === "applicationinsights" &&
                    typeof packageJson.version === "string") {
                    Context.sdkVersion = packageJson.version;
                }
            }
            catch (exception) {
                Logging.info("unable to read app version: ", exception);
            }
        }
        this.tags[this.keys.internalSdkVersion] = "node:" + Context.sdkVersion;

Thanks for investingating this, seems good to me. Would you like to submit a PR with this change?

I'll try to when I get a spare moment!


Include Atkinson Hyperlegible font

See https://brailleinstitute.org/freefont

The font comes with a dicey custom license. We'd need to build a bit of infrastructure for to accommodate it.

The original release on the Braille Institute did have a dicey custom license, but it was later updated, cleanup up a bit, and submitted to Google Fonts with a standard OFL license. There is a repository here with the latest version with normal licensing.

It's been available for a while, forgot to close the issue.


pycg uses a lot of memory to create a Call Graph for specific packages

Hey @gdrosos and @vitsalis ,
running the pypi-plugin which uses pycg internally, for the packages click:7.0 and py:1.11.0, the process of creating a Call Graph uses all my memory (16 GB) and all my swap space (30 GB) without creating a Call Graph, while for other packages it only consumes a tiny fraction of that.
Not sure how to explain that better, so let me know which further information you need.
Thx for your help!
Additional packages:
pyrsistent:0.18.1
Django:1.11.29
rjsmin:1.2.0
pyinotify:0.9.6
pytest:3.2.5
tqdm:4.64.0

Closing due to archival of repository.


[REQUEST] Ensure consistency of Route entities with new extensions

Is your feature request related to a problem? Please describe.
At present thegtfs-validator does not account for the new development of the GTFS specification.
Particularly Route entities should be updated to include the following fields:

continousDropOff
continuousPickUp

Describe the solution you'd like

Update Route GtfsEntity
additional unit tests

Closed by https://github.com/MobilityData/gtfs-validator/pull/486


_this.updateMessage is not a function

I sent a message from Firebase and right away my emulator took me to an error:
An uncaught Exception occurred on "main" thread.
com.tns.NativeScriptException:
Calling js method success failed

TypeError: _this.updateMessage is not a function
File: "file:///data/data/org.nativescript.LCGIncConnect/files/app/main.js, line: 17, column: 14

StackTrace:
	Frame: function:'notificationCallbackAndroid', file:'file:///data/data/org.nativescript.LCGIncConnect/files/app/main.js', line: 17, column: 15

	at com.tns.Runtime.callJSMethodNative(Native Method)
	at com.tns.Runtime.access$2300(Runtime.java:34)
	at com.tns.Runtime$3.run(Runtime.java:1112)
	at android.os.Handler.handleCallback(Handler.java:873)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:193)
	at android.app.ActivityThread.main(ActivityThread.java:6669)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Which platform(s) does your issue occur on?

Android
emulator

Please, provide the following version numbers that your issue occurs with:

CLI: 4.1.1
Cross-platform modules: 3.4.1
Runtime(s): tns-ios: 4.1.1, tns-android: 4.1.3
Plugin(s):

"dependencies": {
    "@angular/animations": "~5.2.0",
    "@angular/common": "~5.2.0",
    "@angular/compiler": "~5.2.0",
    "@angular/core": "~5.2.0",
    "@angular/forms": "~5.2.0",
    "@angular/http": "~5.2.0",
    "@angular/platform-browser": "~5.2.0",
    "@angular/platform-browser-dynamic": "~5.2.0",
    "@angular/router": "~5.2.0",
    "email-validator": "^1.1.1",
    "nativescript-angular": "~5.2.0",
    "nativescript-iqkeyboardmanager": "^1.3.0",
    "nativescript-modal-datetimepicker": "^1.1.3",
    "nativescript-oauth": "^2.1.2",
    "nativescript-platform-css": "^1.6.5",
    "nativescript-push-notifications": "^1.1.4",
    "nativescript-theme-core": "~1.0.4",
    "nativescript-ui-dataform": "^3.5.0",
    "nativescript-ui-listview": "^3.5.2",
    "nodeify": "^1.0.1",
    "reflect-metadata": "~0.1.8",
    "rxjs": "~5.5.0",
    "tns-core-modules": "^3.4.1",
    "zone.js": "~0.8.4"
  },
  "devDependencies": {
    "babel-traverse": "6.4.5",
    "babel-types": "6.4.5",
    "babylon": "6.4.5",
    "css-font-family": "^1.0.7",
    "lazy": "1.0.11",
    "nativescript-dev-typescript": "~0.6.0",
    "typescript": "~2.6.2"
  }

In my main.ts I have:
import * as pushPlugin from "nativescript-push-notifications";
//other code
var pushSettings = {
    senderID: "4394239484298 //Im just putting a random ID, it is not the one I am using",
    notificationCallbackAndroid: (stringifiedData: String, fcmNotification: any) => {
        const notificationBody = fcmNotification && fcmNotification.getBody();
        this.updateMessage("New message!\n" + notificationBody + "\n" + stringifiedData);
    }
};
pushPlugin.register(pushSettings, (token: String) => {
    alert("Device registered. Access token: " + token);;
}, function() { });

//other code

Is there anything I am doind wrong?

Yes, you did not define updateMessage() inside your class, the code inside the notificationCallback is just an example taken from the demo of this repo. You have to write your own callback logic with your own methods. Take a look at the demo code if you want to reuse the updatedMessage function.

You can also try replacing this.updateMessage( with alert( or console.log( in your code if you just want to see the notification body.

Thank you, @fthuin and @lini ! Now it works :)