You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added support in ClientCertificateCredential to specify a path in the form of cert:/StoreLocation/StoreName/Thumbprint to refer to a certificate in the platform certificate store - such as the Windows Certificate Store on Windows, and the KeyChain on MacOS - instead of a file on disk. For example to load a certificate from the "My" store in the "CurrentUser" location use the path cert:/CurrentUser/My/E661583E8FABEF4C0BEF694CBC41C28FB81CD870 (A community contribution, courtesy of fowl2).
Other Changes
Updated Microsoft.Identity.Client and Microsoft.Identity.Client.Extensions.Msal dependencies to version 4.83.1.
Added experimental Microsoft.Extensions.Configuration and Microsoft.Extensions.DependencyInjection integration for Azure SDK clients. For details, see the Configuration and Dependency Injection documentation.
The WorkloadIdentityCredentialOptions.IsAzureProxyEnabled property, which enables Azure Kubernetes token proxy mode, is only available in beta releases of this package.
AzureDeveloperCliCredential now parses JSON error output from azd auth token to extract clean error messages instead of including raw JSON in exceptions. Error messages like {"type":"consoleMessage","data":{"message":"ERROR: fetching token: ..."}} are now displayed as ERROR: fetching token: ....
TenantId is now configured via MSAL's WithTenantId instead of WithTenantIdFromAuthority to prevent malformed Uris to the authority.
Other Changes
Deprecated BrowserCustomizationOptions.UseEmbeddedWebView property. This option requires additional dependencies on Microsoft.Identity.Client.Desktop and is no longer supported. Consider using brokered authentication instead.
Added a new DefaultAzureCredential constructor that accepts a custom environment variable name for credential configuration. This provides flexibility beyond the default AZURE_TOKEN_CREDENTIALS environment variable. The constructor accepts any environment variable name and uses the same credential selection logic as the existing AZURE_TOKEN_CREDENTIALS processing.
Added DefaultAzureCredential.DefaultEnvironmentVariableName constant property that returns "AZURE_TOKEN_CREDENTIALS" for convenience when referencing the default environment variable name.
AzureCliCredential, AzurePowerShellCredential, and AzureDeveloperCliCredential now throw an AuthenticationFailedException when the TokenRequestContext includes claims, as these credentials do not support claims challenges. The exception message includes guidance for handling such scenarios.
When AZURE_TOKEN_CREDENTIALS or the equivalent custom environment variable is configured to ManagedIdentityCredential, the DefaultAzureCredential does not issue a probe request and performs retries with exponential backoff.
Bugs Fixed
Fixed AzureDeveloperCliCredential hanging when the AZD_DEBUG environment variable is set by adding the --no-prompt flag to prevent interactive prompts (#52005).
BrokerCredential is now included in the chain when AZURE_TOKEN_CREDENTIALS is set to dev.
Fixed an issue that prevented ManagedIdentityCredential from utilizing the token cache in Workload Identity Federation environments.
Fixed a bug in DefaultAzureCredential that caused the credential chain to be constructed incorrectly when using AZURE_TOKEN_CREDENTIALS in combination with DefaultAzureCredentialOptions.
Other Changes
The BrokerCredential is now always included in the DefaultAzureCredential chain. If the Azure.Identity.Broker package is not referenced, an exception will be thrown when GetToken is called, making its behavior consistent with the rest of the credentials in the chain.
Updated Microsoft.Identity.Client dependency to version 4.76.0.
Updated Microsoft.Identity.Client.Extensions.Msal dependency to version 4.76.0.
Deprecated SharedTokenCacheCredential. The supporting credential (SharedTokenCacheCredential) was a legacy mechanism for authenticating clients using credentials provided to Visual Studio. For brokered authentication, consider using InteractiveBrowserCredential instead. The following changes have been made:
SharedTokenCacheCredential class is marked as [Obsolete] and [EditorBrowsable(EditorBrowsableState.Never)]
SharedTokenCacheCredentialOptions class is marked as [Obsolete] and [EditorBrowsable(EditorBrowsableState.Never)]
DefaultAzureCredentialOptions.ExcludeSharedTokenCacheCredential property is marked as [Obsolete] and [EditorBrowsable(EditorBrowsableState.Never)]
SharedTokenCacheUsername property is marked as [Obsolete] and [EditorBrowsable(EditorBrowsableState.Never)]
SharedTokenCacheCredential is no longer included in the DefaultAzureCredential authentication flow
Bugs Fixed
Tenant ID comparisons in credential options are now case-insensitive. This affects AdditionallyAllowedTenants values which will now be matched against tenant IDs without case sensitivity, making the authentication more resilient to case differences in tenant IDs returned from WWW-Authenticate challenges (#51693).
Other Changes
BrokerAuthenticationCredential has been renamed as BrokerCredential.
Added the EditorBrowsable(Never) attribute to property VisualStudioCodeTenantId as TenantId is preferred. The VisualStudioCodeTenantId property exists only to provide backwards compatibility.
Added support in AzurePowerShellCredential for the Az.Accounts 5.0.0+ (Az 14.0.0+) breaking change where Get-AzAccessToken returns PSSecureAccessToken with a SecureString Token property instead of plaintext.
Removed references to Username, Password, AZURE_USERNAME, and AZURE_PASSWORD in XML comments from EnvironmentCredentialOptions and EnvironmentCredential due to lack of MFA support. See MFA enforcement details.
Marked AZURE_USERNAME and AZURE_PASSWORD as obsolete due to lack of MFA support. See MFA enforcement details.
Added support for the AZURE_TOKEN_CREDENTIALS environment variable to DefaultAzureCredential, which allows for choosing between 'deployed service' and 'developer tools' credentials. Valid values are 'dev' for developer tools and 'prod' for deployed service.
Simpler fix for dotnet test when using retry by @Youssef1313 in #5732. Note that this PR targets rel/3.9 branch. For 3.10, we did a different fix: #5717
We've also improved the dotnet test experience in dotnet SDK, especially around Retry plugin experience, and started dogfooding the experience in our own repository. Please check out how to enable the new dotnet test experience for Microsoft.Testing.Platform in net10 by following this link, and help us dogfood it.
Note: The only rules enabled by default as warnings, which could potentially cause build errors when updating MSTest, have been carefully selected and thoroughly validated. These rules specifically address real runtime issues related to the usage of MSTest, ensuring that no purely stylistic or low-impact analyzers are enforced by default.
You can build .NET 8.0 from the repository by cloning the release tag v8.0.18 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.17 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.16 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.15 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.14 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.13 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.12 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
You can build .NET 8.0 from the repository by cloning the release tag v8.0.11 and following the build instructions in the main README.md.
Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
Introduced ConfigurationFeatureDefinitionProviderOptions which allows to enable the new configuration merging behavior for the built-in ConfiguationFeatureDefinitionProvider. When the same feature flag is defined in multiple sources, definitions are merged according to configuration provider registration order, with the last feature flag definition taking precedence in case of conflicts. #552
Microsoft.FeatureManagement.AspNetCore
Enhancements
Updated Microsoft.FeatureManagement reference to 4.3.0. See the release notes for more information on the changes.
Add ECDsa support in X509SecurityKey and JsonWebKeyConverter.ConvertFromX509SecurityKey
Extended X509SecurityKey and JsonWebKeyConverter.ConvertFromX509SecurityKey to support ECDSA keys.
See PR #2377 for details.
Bug Fixes
Sanitize logs to avoid leaking sensitive data
Updated logging to sanitize sensitive values, reducing the risk of inadvertently exposing secrets or PII in logs.
See PR #3316 for details.
Optimize log sanitization with SearchValues
Improved the performance of the log sanitization logic introduced earlier by using SearchValues, making sanitization more efficient in high-throughput scenarios.
See PR #3341 for details.
Update test for IDX10400
Adjusted the IDX10400 test to align with the current behavior and error messaging.
See PR #3314 for details.
Fundamentals
Add supported algorithm tests
Added new tests to validate the set of supported cryptographic algorithms, increasing confidence in algorithm coverage and compatibility.
See PR #3296 for details.
Migrate repository agent rules from .clinerules to agents.md
Moved repository agent/AI-assist rules into markdown documentation to make them more visible and easier to maintain.
See PR #3313 for details.
**Migrate `Microsoft.Ide
Configuration
📅 Schedule: Branch creation - "before 07:00 on Thursday" in timezone Europe/Oslo, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
If you want to rebase/retry this PR, check this box
[Lines containing Refreshing state removed]
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# azurerm_resource_group.shared will be created
+ resource "azurerm_resource_group" "shared" {
+ id = (known after apply)
+ location = "norwayeast"
+ name = "rgshared001at22"
}
# module.dns.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.dns.azurerm_private_dns_zone.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.azconfig.io"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at22"
}
# module.dns.azurerm_private_dns_zone.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.vaultcore.azure.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at22"
}
# module.dns.azurerm_private_dns_zone.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.postgres.database.azure.com"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at22"
}
# module.dns.azurerm_private_dns_zone.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.servicebus.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at22"
}
# module.dns.azurerm_private_dns_zone.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.blob.core.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at22"
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "app_configuration"
+ private_dns_zone_name = "privatelink.azconfig.io"
+ registration_enabled = false
+ resource_group_name = "rgshared001at22"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "key_vault"
+ private_dns_zone_name = "privatelink.vaultcore.azure.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at22"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "postgres"
+ private_dns_zone_name = "privatelink.postgres.database.azure.com"
+ registration_enabled = false
+ resource_group_name = "rgshared001at22"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "service_bus"
+ private_dns_zone_name = "privatelink.servicebus.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at22"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "storage_account_blob"
+ private_dns_zone_name = "privatelink.blob.core.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at22"
+ virtual_network_id = (known after apply)
}
# module.key_vault.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.key_vault.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.key_vault.data.azurerm_role_definition.key_vault_administrator will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_administrator" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "00482a5a-887f-4fb3-b363-3b7fe8e74483"
+ type = (known after apply)
}
# module.key_vault.azurerm_key_vault.key_vault will be created
+ resource "azurerm_key_vault" "key_vault" {
+ access_policy = (known after apply)
+ enable_rbac_authorization = true
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ public_network_access_enabled = true
+ purge_protection_enabled = true
+ resource_group_name = "rgshared001at22"
+ sku_name = "standard"
+ soft_delete_retention_days = 30
+ tenant_id = (known after apply)
+ vault_uri = (known after apply)
+ network_acls {
+ bypass = "AzureServices"
+ default_action = "Allow"
}
}
# module.key_vault.azurerm_private_endpoint.key_vault will be created
+ resource "azurerm_private_endpoint" "key_vault" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at22"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = (known after apply)
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = (known after apply)
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "vault",
]
}
}
# module.key_vault.azurerm_role_assignment.key_vault_administrator will be created
+ resource "azurerm_role_assignment" "key_vault_administrator" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = (known after apply)
}
# module.key_vault.random_string.key_vault_name_prefix will be created
+ resource "random_string" "key_vault_name_prefix" {
+ id = (known after apply)
+ length = 4
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = false
+ numeric = false
+ result = (known after apply)
+ special = false
+ upper = false
}
# module.nat.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.nat.azurerm_nat_gateway.nat_gateway will be created
+ resource "azurerm_nat_gateway" "nat_gateway" {
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ location = (known after apply)
+ name = "natgwshared001at22"
+ resource_group_name = "rgshared001at22"
+ resource_guid = (known after apply)
+ sku_name = "Standard"
}
# module.nat.azurerm_nat_gateway_public_ip_association.nat_gateway will be created
+ resource "azurerm_nat_gateway_public_ip_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ public_ip_address_id = (known after apply)
}
# module.nat.azurerm_public_ip.nat_gateway will be created
+ resource "azurerm_public_ip" "nat_gateway" {
+ allocation_method = "Static"
+ ddos_protection_mode = "VirtualNetworkInherited"
+ fqdn = (known after apply)
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ ip_address = (known after apply)
+ ip_version = "IPv4"
+ location = (known after apply)
+ name = "pipegressshared001at22"
+ resource_group_name = "rgshared001at22"
+ sku = "Standard"
+ sku_tier = "Regional"
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["default"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["postgres"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.postgres_server.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.postgres_server.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.postgres_server.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.postgres_server.azurerm_key_vault_key.postgres_server will be created
+ resource "azurerm_key_vault_key" "postgres_server" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "psqlsrvshared001at22"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.postgres_server.azurerm_postgresql_flexible_server.postgres_server will be created
+ resource "azurerm_postgresql_flexible_server" "postgres_server" {
+ administrator_login = (known after apply)
+ auto_grow_enabled = true
+ backup_retention_days = (known after apply)
+ delegated_subnet_id = (known after apply)
+ fqdn = (known after apply)
+ geo_redundant_backup_enabled = false
+ id = (known after apply)
+ location = (known after apply)
+ name = "psqlsrvshared001at22"
+ private_dns_zone_id = (known after apply)
+ public_network_access_enabled = false
+ resource_group_name = "rgshared001at22"
+ sku_name = "GP_Standard_D4s_v3"
+ storage_mb = 32768
+ storage_tier = "P30"
+ version = "12"
+ zone = "1"
+ authentication {
+ active_directory_auth_enabled = true
+ password_auth_enabled = false
+ tenant_id = (known after apply)
}
+ customer_managed_key {
+ key_vault_key_id = (known after apply)
+ primary_user_assigned_identity_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ type = "UserAssigned"
}
}
# module.postgres_server.azurerm_postgresql_flexible_server_active_directory_administrator.admin will be created
+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "admin" {
+ id = (known after apply)
+ object_id = (known after apply)
+ principal_name = "mipsqlsrvadminshared001at22"
+ principal_type = "ServicePrincipal"
+ resource_group_name = "rgshared001at22"
+ server_name = "psqlsrvshared001at22"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server will be created
+ resource "azurerm_user_assigned_identity" "postgres_server" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvshared001at22"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at22"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server_admin will be created
+ resource "azurerm_user_assigned_identity" "postgres_server_admin" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvadminshared001at22"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at22"
+ tenant_id = (known after apply)
}
# module.service_bus.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.service_bus.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.service_bus.azurerm_key_vault_key.service_bus[0] will be created
+ resource "azurerm_key_vault_key" "service_bus" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "sbshared001at22"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.service_bus.azurerm_private_endpoint.service_bus_private_endpoint[0] will be created
+ resource "azurerm_private_endpoint" "service_bus_private_endpoint" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = "nicsbshared001at22"
+ id = (known after apply)
+ location = (known after apply)
+ name = "pesbshared001at22"
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at22"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = "sbshared001at22"
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = "sbshared001at22"
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "namespace",
]
}
}
# module.service_bus.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.service_bus.azurerm_role_definition.service_bus_masstransit will be created
+ resource "azurerm_role_definition" "service_bus_masstransit" {
+ assignable_scopes = (known after apply)
+ description = "Allow C# Applications use MassTransit with Azure Service Bus"
+ id = (known after apply)
+ name = "Azure Service Bus Mass Transit"
+ role_definition_id = (known after apply)
+ role_definition_resource_id = (known after apply)
+ scope = (known after apply)
+ permissions {
+ actions = [
+ "Microsoft.ServiceBus/namespaces/read",
+ "Microsoft.ServiceBus/namespaces/queues/*",
+ "Microsoft.ServiceBus/namespaces/topics/*",
]
}
}
# module.service_bus.azurerm_servicebus_namespace.service_bus will be created
+ resource "azurerm_servicebus_namespace" "service_bus" {
+ capacity = 1
+ default_primary_connection_string = (sensitive value)
+ default_primary_key = (sensitive value)
+ default_secondary_connection_string = (sensitive value)
+ default_secondary_key = (sensitive value)
+ endpoint = (known after apply)
+ id = (known after apply)
+ local_auth_enabled = false
+ location = (known after apply)
+ minimum_tls_version = "1.2"
+ name = "sbshared001at22"
+ premium_messaging_partitions = 1
+ public_network_access_enabled = true
+ resource_group_name = "rgshared001at22"
+ sku = "Premium"
+ customer_managed_key {
+ identity_id = (known after apply)
+ infrastructure_encryption_enabled = true
+ key_vault_key_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ principal_id = (known after apply)
+ tenant_id = (known after apply)
+ type = "UserAssigned"
}
+ network_rule_set {
+ default_action = "Deny"
+ ip_rules = (sensitive value)
+ public_network_access_enabled = false
+ trusted_services_allowed = true
}
}
# module.service_bus.azurerm_user_assigned_identity.service_bus will be created
+ resource "azurerm_user_assigned_identity" "service_bus" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "misbshared001at22"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at22"
+ tenant_id = (known after apply)
}
# module.vnet.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at22"
+ tags = (known after apply)
}
# module.vnet.azurerm_subnet.vnet["default"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.0.0/23",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "default"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at22"
+ virtual_network_name = "vnetshared001at22"
}
# module.vnet.azurerm_subnet.vnet["postgres"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.2.0/28",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "postgres"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at22"
+ virtual_network_name = "vnetshared001at22"
+ delegation {
+ name = "fs"
+ service_delegation {
+ actions = [
+ "Microsoft.Network/virtualNetworks/subnets/join/action",
]
+ name = "Microsoft.DBforPostgreSQL/flexibleServers"
}
}
}
# module.vnet.azurerm_virtual_network.vnet will be created
+ resource "azurerm_virtual_network" "vnet" {
+ address_space = [
+ "10.202.0.0/22",
]
+ dns_servers = (known after apply)
+ guid = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "vnetshared001at22"
+ resource_group_name = "rgshared001at22"
+ subnet = (known after apply)
}
Plan: 35 to add, 0 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Saved the plan to: tfplan.out
To perform exactly these actions, run the following command to apply:
terraform apply "tfplan.out"
[Lines containing Refreshing state removed]
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# azurerm_resource_group.shared will be created
+ resource "azurerm_resource_group" "shared" {
+ id = (known after apply)
+ location = "norwayeast"
+ name = "rgshared001at24"
}
# module.dns.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.dns.azurerm_private_dns_zone.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.azconfig.io"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at24"
}
# module.dns.azurerm_private_dns_zone.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.vaultcore.azure.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at24"
}
# module.dns.azurerm_private_dns_zone.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.postgres.database.azure.com"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at24"
}
# module.dns.azurerm_private_dns_zone.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.servicebus.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at24"
}
# module.dns.azurerm_private_dns_zone.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.blob.core.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at24"
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "app_configuration"
+ private_dns_zone_name = "privatelink.azconfig.io"
+ registration_enabled = false
+ resource_group_name = "rgshared001at24"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "key_vault"
+ private_dns_zone_name = "privatelink.vaultcore.azure.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at24"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "postgres"
+ private_dns_zone_name = "privatelink.postgres.database.azure.com"
+ registration_enabled = false
+ resource_group_name = "rgshared001at24"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "service_bus"
+ private_dns_zone_name = "privatelink.servicebus.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at24"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "storage_account_blob"
+ private_dns_zone_name = "privatelink.blob.core.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at24"
+ virtual_network_id = (known after apply)
}
# module.key_vault.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.key_vault.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.key_vault.data.azurerm_role_definition.key_vault_administrator will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_administrator" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "00482a5a-887f-4fb3-b363-3b7fe8e74483"
+ type = (known after apply)
}
# module.key_vault.azurerm_key_vault.key_vault will be created
+ resource "azurerm_key_vault" "key_vault" {
+ access_policy = (known after apply)
+ enable_rbac_authorization = true
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ public_network_access_enabled = true
+ purge_protection_enabled = true
+ resource_group_name = "rgshared001at24"
+ sku_name = "standard"
+ soft_delete_retention_days = 30
+ tenant_id = (known after apply)
+ vault_uri = (known after apply)
+ network_acls {
+ bypass = "AzureServices"
+ default_action = "Allow"
}
}
# module.key_vault.azurerm_private_endpoint.key_vault will be created
+ resource "azurerm_private_endpoint" "key_vault" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at24"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = (known after apply)
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = (known after apply)
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "vault",
]
}
}
# module.key_vault.azurerm_role_assignment.key_vault_administrator will be created
+ resource "azurerm_role_assignment" "key_vault_administrator" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = (known after apply)
}
# module.key_vault.random_string.key_vault_name_prefix will be created
+ resource "random_string" "key_vault_name_prefix" {
+ id = (known after apply)
+ length = 4
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = false
+ numeric = false
+ result = (known after apply)
+ special = false
+ upper = false
}
# module.nat.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.nat.azurerm_nat_gateway.nat_gateway will be created
+ resource "azurerm_nat_gateway" "nat_gateway" {
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ location = (known after apply)
+ name = "natgwshared001at24"
+ resource_group_name = "rgshared001at24"
+ resource_guid = (known after apply)
+ sku_name = "Standard"
}
# module.nat.azurerm_nat_gateway_public_ip_association.nat_gateway will be created
+ resource "azurerm_nat_gateway_public_ip_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ public_ip_address_id = (known after apply)
}
# module.nat.azurerm_public_ip.nat_gateway will be created
+ resource "azurerm_public_ip" "nat_gateway" {
+ allocation_method = "Static"
+ ddos_protection_mode = "VirtualNetworkInherited"
+ fqdn = (known after apply)
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ ip_address = (known after apply)
+ ip_version = "IPv4"
+ location = (known after apply)
+ name = "pipegressshared001at24"
+ resource_group_name = "rgshared001at24"
+ sku = "Standard"
+ sku_tier = "Regional"
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["default"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["postgres"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.postgres_server.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.postgres_server.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.postgres_server.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.postgres_server.azurerm_key_vault_key.postgres_server will be created
+ resource "azurerm_key_vault_key" "postgres_server" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "psqlsrvshared001at24"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.postgres_server.azurerm_postgresql_flexible_server.postgres_server will be created
+ resource "azurerm_postgresql_flexible_server" "postgres_server" {
+ administrator_login = (known after apply)
+ auto_grow_enabled = true
+ backup_retention_days = (known after apply)
+ delegated_subnet_id = (known after apply)
+ fqdn = (known after apply)
+ geo_redundant_backup_enabled = false
+ id = (known after apply)
+ location = (known after apply)
+ name = "psqlsrvshared001at24"
+ private_dns_zone_id = (known after apply)
+ public_network_access_enabled = false
+ resource_group_name = "rgshared001at24"
+ sku_name = "GP_Standard_D4s_v3"
+ storage_mb = 32768
+ storage_tier = "P30"
+ version = "12"
+ zone = "1"
+ authentication {
+ active_directory_auth_enabled = true
+ password_auth_enabled = false
+ tenant_id = (known after apply)
}
+ customer_managed_key {
+ key_vault_key_id = (known after apply)
+ primary_user_assigned_identity_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ type = "UserAssigned"
}
}
# module.postgres_server.azurerm_postgresql_flexible_server_active_directory_administrator.admin will be created
+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "admin" {
+ id = (known after apply)
+ object_id = (known after apply)
+ principal_name = "mipsqlsrvadminshared001at24"
+ principal_type = "ServicePrincipal"
+ resource_group_name = "rgshared001at24"
+ server_name = "psqlsrvshared001at24"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server will be created
+ resource "azurerm_user_assigned_identity" "postgres_server" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvshared001at24"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at24"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server_admin will be created
+ resource "azurerm_user_assigned_identity" "postgres_server_admin" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvadminshared001at24"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at24"
+ tenant_id = (known after apply)
}
# module.service_bus.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.service_bus.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.service_bus.azurerm_key_vault_key.service_bus[0] will be created
+ resource "azurerm_key_vault_key" "service_bus" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "sbshared001at24"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.service_bus.azurerm_private_endpoint.service_bus_private_endpoint[0] will be created
+ resource "azurerm_private_endpoint" "service_bus_private_endpoint" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = "nicsbshared001at24"
+ id = (known after apply)
+ location = (known after apply)
+ name = "pesbshared001at24"
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at24"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = "sbshared001at24"
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = "sbshared001at24"
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "namespace",
]
}
}
# module.service_bus.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.service_bus.azurerm_role_definition.service_bus_masstransit will be created
+ resource "azurerm_role_definition" "service_bus_masstransit" {
+ assignable_scopes = (known after apply)
+ description = "Allow C# Applications use MassTransit with Azure Service Bus"
+ id = (known after apply)
+ name = "Azure Service Bus Mass Transit"
+ role_definition_id = (known after apply)
+ role_definition_resource_id = (known after apply)
+ scope = (known after apply)
+ permissions {
+ actions = [
+ "Microsoft.ServiceBus/namespaces/read",
+ "Microsoft.ServiceBus/namespaces/queues/*",
+ "Microsoft.ServiceBus/namespaces/topics/*",
]
}
}
# module.service_bus.azurerm_servicebus_namespace.service_bus will be created
+ resource "azurerm_servicebus_namespace" "service_bus" {
+ capacity = 1
+ default_primary_connection_string = (sensitive value)
+ default_primary_key = (sensitive value)
+ default_secondary_connection_string = (sensitive value)
+ default_secondary_key = (sensitive value)
+ endpoint = (known after apply)
+ id = (known after apply)
+ local_auth_enabled = false
+ location = (known after apply)
+ minimum_tls_version = "1.2"
+ name = "sbshared001at24"
+ premium_messaging_partitions = 1
+ public_network_access_enabled = true
+ resource_group_name = "rgshared001at24"
+ sku = "Premium"
+ customer_managed_key {
+ identity_id = (known after apply)
+ infrastructure_encryption_enabled = true
+ key_vault_key_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ principal_id = (known after apply)
+ tenant_id = (known after apply)
+ type = "UserAssigned"
}
+ network_rule_set {
+ default_action = "Deny"
+ ip_rules = (sensitive value)
+ public_network_access_enabled = false
+ trusted_services_allowed = true
}
}
# module.service_bus.azurerm_user_assigned_identity.service_bus will be created
+ resource "azurerm_user_assigned_identity" "service_bus" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "misbshared001at24"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at24"
+ tenant_id = (known after apply)
}
# module.vnet.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at24"
+ tags = (known after apply)
}
# module.vnet.azurerm_subnet.vnet["default"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.0.0/23",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "default"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at24"
+ virtual_network_name = "vnetshared001at24"
}
# module.vnet.azurerm_subnet.vnet["postgres"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.2.0/28",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "postgres"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at24"
+ virtual_network_name = "vnetshared001at24"
+ delegation {
+ name = "fs"
+ service_delegation {
+ actions = [
+ "Microsoft.Network/virtualNetworks/subnets/join/action",
]
+ name = "Microsoft.DBforPostgreSQL/flexibleServers"
}
}
}
# module.vnet.azurerm_virtual_network.vnet will be created
+ resource "azurerm_virtual_network" "vnet" {
+ address_space = [
+ "10.202.0.0/22",
]
+ dns_servers = (known after apply)
+ guid = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "vnetshared001at24"
+ resource_group_name = "rgshared001at24"
+ subnet = (known after apply)
}
Plan: 35 to add, 0 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Saved the plan to: tfplan.out
To perform exactly these actions, run the following command to apply:
terraform apply "tfplan.out"
[Lines containing Refreshing state removed]
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# azurerm_resource_group.shared will be created
+ resource "azurerm_resource_group" "shared" {
+ id = (known after apply)
+ location = "norwayeast"
+ name = "rgshared001at23"
}
# module.dns.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.dns.azurerm_private_dns_zone.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.azconfig.io"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at23"
}
# module.dns.azurerm_private_dns_zone.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.vaultcore.azure.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at23"
}
# module.dns.azurerm_private_dns_zone.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.postgres.database.azure.com"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at23"
}
# module.dns.azurerm_private_dns_zone.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.servicebus.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at23"
}
# module.dns.azurerm_private_dns_zone.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.blob.core.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at23"
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "app_configuration"
+ private_dns_zone_name = "privatelink.azconfig.io"
+ registration_enabled = false
+ resource_group_name = "rgshared001at23"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "key_vault"
+ private_dns_zone_name = "privatelink.vaultcore.azure.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at23"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "postgres"
+ private_dns_zone_name = "privatelink.postgres.database.azure.com"
+ registration_enabled = false
+ resource_group_name = "rgshared001at23"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "service_bus"
+ private_dns_zone_name = "privatelink.servicebus.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at23"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "storage_account_blob"
+ private_dns_zone_name = "privatelink.blob.core.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at23"
+ virtual_network_id = (known after apply)
}
# module.key_vault.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.key_vault.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.key_vault.data.azurerm_role_definition.key_vault_administrator will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_administrator" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "00482a5a-887f-4fb3-b363-3b7fe8e74483"
+ type = (known after apply)
}
# module.key_vault.azurerm_key_vault.key_vault will be created
+ resource "azurerm_key_vault" "key_vault" {
+ access_policy = (known after apply)
+ enable_rbac_authorization = true
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ public_network_access_enabled = true
+ purge_protection_enabled = true
+ resource_group_name = "rgshared001at23"
+ sku_name = "standard"
+ soft_delete_retention_days = 30
+ tenant_id = (known after apply)
+ vault_uri = (known after apply)
+ network_acls {
+ bypass = "AzureServices"
+ default_action = "Allow"
}
}
# module.key_vault.azurerm_private_endpoint.key_vault will be created
+ resource "azurerm_private_endpoint" "key_vault" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at23"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = (known after apply)
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = (known after apply)
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "vault",
]
}
}
# module.key_vault.azurerm_role_assignment.key_vault_administrator will be created
+ resource "azurerm_role_assignment" "key_vault_administrator" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = (known after apply)
}
# module.key_vault.random_string.key_vault_name_prefix will be created
+ resource "random_string" "key_vault_name_prefix" {
+ id = (known after apply)
+ length = 4
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = false
+ numeric = false
+ result = (known after apply)
+ special = false
+ upper = false
}
# module.nat.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.nat.azurerm_nat_gateway.nat_gateway will be created
+ resource "azurerm_nat_gateway" "nat_gateway" {
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ location = (known after apply)
+ name = "natgwshared001at23"
+ resource_group_name = "rgshared001at23"
+ resource_guid = (known after apply)
+ sku_name = "Standard"
}
# module.nat.azurerm_nat_gateway_public_ip_association.nat_gateway will be created
+ resource "azurerm_nat_gateway_public_ip_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ public_ip_address_id = (known after apply)
}
# module.nat.azurerm_public_ip.nat_gateway will be created
+ resource "azurerm_public_ip" "nat_gateway" {
+ allocation_method = "Static"
+ ddos_protection_mode = "VirtualNetworkInherited"
+ fqdn = (known after apply)
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ ip_address = (known after apply)
+ ip_version = "IPv4"
+ location = (known after apply)
+ name = "pipegressshared001at23"
+ resource_group_name = "rgshared001at23"
+ sku = "Standard"
+ sku_tier = "Regional"
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["default"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["postgres"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.postgres_server.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.postgres_server.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.postgres_server.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.postgres_server.azurerm_key_vault_key.postgres_server will be created
+ resource "azurerm_key_vault_key" "postgres_server" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "psqlsrvshared001at23"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.postgres_server.azurerm_postgresql_flexible_server.postgres_server will be created
+ resource "azurerm_postgresql_flexible_server" "postgres_server" {
+ administrator_login = (known after apply)
+ auto_grow_enabled = true
+ backup_retention_days = (known after apply)
+ delegated_subnet_id = (known after apply)
+ fqdn = (known after apply)
+ geo_redundant_backup_enabled = false
+ id = (known after apply)
+ location = (known after apply)
+ name = "psqlsrvshared001at23"
+ private_dns_zone_id = (known after apply)
+ public_network_access_enabled = false
+ resource_group_name = "rgshared001at23"
+ sku_name = "GP_Standard_D4s_v3"
+ storage_mb = 32768
+ storage_tier = "P30"
+ version = "12"
+ zone = "1"
+ authentication {
+ active_directory_auth_enabled = true
+ password_auth_enabled = false
+ tenant_id = (known after apply)
}
+ customer_managed_key {
+ key_vault_key_id = (known after apply)
+ primary_user_assigned_identity_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ type = "UserAssigned"
}
}
# module.postgres_server.azurerm_postgresql_flexible_server_active_directory_administrator.admin will be created
+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "admin" {
+ id = (known after apply)
+ object_id = (known after apply)
+ principal_name = "mipsqlsrvadminshared001at23"
+ principal_type = "ServicePrincipal"
+ resource_group_name = "rgshared001at23"
+ server_name = "psqlsrvshared001at23"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server will be created
+ resource "azurerm_user_assigned_identity" "postgres_server" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvshared001at23"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at23"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server_admin will be created
+ resource "azurerm_user_assigned_identity" "postgres_server_admin" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvadminshared001at23"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at23"
+ tenant_id = (known after apply)
}
# module.service_bus.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.service_bus.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.service_bus.azurerm_key_vault_key.service_bus[0] will be created
+ resource "azurerm_key_vault_key" "service_bus" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "sbshared001at23"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.service_bus.azurerm_private_endpoint.service_bus_private_endpoint[0] will be created
+ resource "azurerm_private_endpoint" "service_bus_private_endpoint" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = "nicsbshared001at23"
+ id = (known after apply)
+ location = (known after apply)
+ name = "pesbshared001at23"
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at23"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = "sbshared001at23"
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = "sbshared001at23"
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "namespace",
]
}
}
# module.service_bus.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.service_bus.azurerm_role_definition.service_bus_masstransit will be created
+ resource "azurerm_role_definition" "service_bus_masstransit" {
+ assignable_scopes = (known after apply)
+ description = "Allow C# Applications use MassTransit with Azure Service Bus"
+ id = (known after apply)
+ name = "Azure Service Bus Mass Transit"
+ role_definition_id = (known after apply)
+ role_definition_resource_id = (known after apply)
+ scope = (known after apply)
+ permissions {
+ actions = [
+ "Microsoft.ServiceBus/namespaces/read",
+ "Microsoft.ServiceBus/namespaces/queues/*",
+ "Microsoft.ServiceBus/namespaces/topics/*",
]
}
}
# module.service_bus.azurerm_servicebus_namespace.service_bus will be created
+ resource "azurerm_servicebus_namespace" "service_bus" {
+ capacity = 1
+ default_primary_connection_string = (sensitive value)
+ default_primary_key = (sensitive value)
+ default_secondary_connection_string = (sensitive value)
+ default_secondary_key = (sensitive value)
+ endpoint = (known after apply)
+ id = (known after apply)
+ local_auth_enabled = false
+ location = (known after apply)
+ minimum_tls_version = "1.2"
+ name = "sbshared001at23"
+ premium_messaging_partitions = 1
+ public_network_access_enabled = true
+ resource_group_name = "rgshared001at23"
+ sku = "Premium"
+ customer_managed_key {
+ identity_id = (known after apply)
+ infrastructure_encryption_enabled = true
+ key_vault_key_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ principal_id = (known after apply)
+ tenant_id = (known after apply)
+ type = "UserAssigned"
}
+ network_rule_set {
+ default_action = "Deny"
+ ip_rules = (sensitive value)
+ public_network_access_enabled = false
+ trusted_services_allowed = true
}
}
# module.service_bus.azurerm_user_assigned_identity.service_bus will be created
+ resource "azurerm_user_assigned_identity" "service_bus" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "misbshared001at23"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at23"
+ tenant_id = (known after apply)
}
# module.vnet.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at23"
+ tags = (known after apply)
}
# module.vnet.azurerm_subnet.vnet["default"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.0.0/23",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "default"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at23"
+ virtual_network_name = "vnetshared001at23"
}
# module.vnet.azurerm_subnet.vnet["postgres"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.2.0/28",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "postgres"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at23"
+ virtual_network_name = "vnetshared001at23"
+ delegation {
+ name = "fs"
+ service_delegation {
+ actions = [
+ "Microsoft.Network/virtualNetworks/subnets/join/action",
]
+ name = "Microsoft.DBforPostgreSQL/flexibleServers"
}
}
}
# module.vnet.azurerm_virtual_network.vnet will be created
+ resource "azurerm_virtual_network" "vnet" {
+ address_space = [
+ "10.202.0.0/22",
]
+ dns_servers = (known after apply)
+ guid = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "vnetshared001at23"
+ resource_group_name = "rgshared001at23"
+ subnet = (known after apply)
}
Plan: 35 to add, 0 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Saved the plan to: tfplan.out
To perform exactly these actions, run the following command to apply:
terraform apply "tfplan.out"
[Lines containing Refreshing state removed]
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# azurerm_resource_group.shared will be created
+ resource "azurerm_resource_group" "shared" {
+ id = (known after apply)
+ location = "norwayeast"
+ name = "rgshared001at21"
}
# module.dns.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.dns.azurerm_private_dns_zone.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.azconfig.io"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at21"
}
# module.dns.azurerm_private_dns_zone.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.vaultcore.azure.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at21"
}
# module.dns.azurerm_private_dns_zone.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.postgres.database.azure.com"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at21"
}
# module.dns.azurerm_private_dns_zone.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.servicebus.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at21"
}
# module.dns.azurerm_private_dns_zone.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone" "dns" {
+ id = (known after apply)
+ max_number_of_record_sets = (known after apply)
+ max_number_of_virtual_network_links = (known after apply)
+ max_number_of_virtual_network_links_with_registration = (known after apply)
+ name = "privatelink.blob.core.windows.net"
+ number_of_record_sets = (known after apply)
+ resource_group_name = "rgshared001at21"
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["app_configuration"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "app_configuration"
+ private_dns_zone_name = "privatelink.azconfig.io"
+ registration_enabled = false
+ resource_group_name = "rgshared001at21"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["key_vault"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "key_vault"
+ private_dns_zone_name = "privatelink.vaultcore.azure.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at21"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["postgres"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "postgres"
+ private_dns_zone_name = "privatelink.postgres.database.azure.com"
+ registration_enabled = false
+ resource_group_name = "rgshared001at21"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["service_bus"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "service_bus"
+ private_dns_zone_name = "privatelink.servicebus.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at21"
+ virtual_network_id = (known after apply)
}
# module.dns.azurerm_private_dns_zone_virtual_network_link.dns["storage_account_blob"] will be created
+ resource "azurerm_private_dns_zone_virtual_network_link" "dns" {
+ id = (known after apply)
+ name = "storage_account_blob"
+ private_dns_zone_name = "privatelink.blob.core.windows.net"
+ registration_enabled = false
+ resource_group_name = "rgshared001at21"
+ virtual_network_id = (known after apply)
}
# module.key_vault.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.key_vault.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.key_vault.data.azurerm_role_definition.key_vault_administrator will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_administrator" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "00482a5a-887f-4fb3-b363-3b7fe8e74483"
+ type = (known after apply)
}
# module.key_vault.azurerm_key_vault.key_vault will be created
+ resource "azurerm_key_vault" "key_vault" {
+ access_policy = (known after apply)
+ enable_rbac_authorization = true
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ public_network_access_enabled = true
+ purge_protection_enabled = true
+ resource_group_name = "rgshared001at21"
+ sku_name = "standard"
+ soft_delete_retention_days = 30
+ tenant_id = (known after apply)
+ vault_uri = (known after apply)
+ network_acls {
+ bypass = "AzureServices"
+ default_action = "Allow"
}
}
# module.key_vault.azurerm_private_endpoint.key_vault will be created
+ resource "azurerm_private_endpoint" "key_vault" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = (known after apply)
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at21"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = (known after apply)
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = (known after apply)
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "vault",
]
}
}
# module.key_vault.azurerm_role_assignment.key_vault_administrator will be created
+ resource "azurerm_role_assignment" "key_vault_administrator" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = (known after apply)
}
# module.key_vault.random_string.key_vault_name_prefix will be created
+ resource "random_string" "key_vault_name_prefix" {
+ id = (known after apply)
+ length = 4
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = false
+ numeric = false
+ result = (known after apply)
+ special = false
+ upper = false
}
# module.nat.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.nat.azurerm_nat_gateway.nat_gateway will be created
+ resource "azurerm_nat_gateway" "nat_gateway" {
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ location = (known after apply)
+ name = "natgwshared001at21"
+ resource_group_name = "rgshared001at21"
+ resource_guid = (known after apply)
+ sku_name = "Standard"
}
# module.nat.azurerm_nat_gateway_public_ip_association.nat_gateway will be created
+ resource "azurerm_nat_gateway_public_ip_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ public_ip_address_id = (known after apply)
}
# module.nat.azurerm_public_ip.nat_gateway will be created
+ resource "azurerm_public_ip" "nat_gateway" {
+ allocation_method = "Static"
+ ddos_protection_mode = "VirtualNetworkInherited"
+ fqdn = (known after apply)
+ id = (known after apply)
+ idle_timeout_in_minutes = 4
+ ip_address = (known after apply)
+ ip_version = "IPv4"
+ location = (known after apply)
+ name = "pipegressshared001at21"
+ resource_group_name = "rgshared001at21"
+ sku = "Standard"
+ sku_tier = "Regional"
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["default"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.nat.azurerm_subnet_nat_gateway_association.nat_gateway["postgres"] will be created
+ resource "azurerm_subnet_nat_gateway_association" "nat_gateway" {
+ id = (known after apply)
+ nat_gateway_id = (known after apply)
+ subnet_id = (known after apply)
}
# module.postgres_server.data.azurerm_client_config.current will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_client_config" "current" {
+ client_id = (known after apply)
+ id = (known after apply)
+ object_id = (known after apply)
+ subscription_id = (known after apply)
+ tenant_id = (known after apply)
}
# module.postgres_server.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.postgres_server.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.postgres_server.azurerm_key_vault_key.postgres_server will be created
+ resource "azurerm_key_vault_key" "postgres_server" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "psqlsrvshared001at21"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.postgres_server.azurerm_postgresql_flexible_server.postgres_server will be created
+ resource "azurerm_postgresql_flexible_server" "postgres_server" {
+ administrator_login = (known after apply)
+ auto_grow_enabled = true
+ backup_retention_days = (known after apply)
+ delegated_subnet_id = (known after apply)
+ fqdn = (known after apply)
+ geo_redundant_backup_enabled = false
+ id = (known after apply)
+ location = (known after apply)
+ name = "psqlsrvshared001at21"
+ private_dns_zone_id = (known after apply)
+ public_network_access_enabled = false
+ resource_group_name = "rgshared001at21"
+ sku_name = "GP_Standard_D4s_v3"
+ storage_mb = 32768
+ storage_tier = "P30"
+ version = "12"
+ zone = "1"
+ authentication {
+ active_directory_auth_enabled = true
+ password_auth_enabled = false
+ tenant_id = (known after apply)
}
+ customer_managed_key {
+ key_vault_key_id = (known after apply)
+ primary_user_assigned_identity_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ type = "UserAssigned"
}
}
# module.postgres_server.azurerm_postgresql_flexible_server_active_directory_administrator.admin will be created
+ resource "azurerm_postgresql_flexible_server_active_directory_administrator" "admin" {
+ id = (known after apply)
+ object_id = (known after apply)
+ principal_name = "mipsqlsrvadminshared001at21"
+ principal_type = "ServicePrincipal"
+ resource_group_name = "rgshared001at21"
+ server_name = "psqlsrvshared001at21"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server will be created
+ resource "azurerm_user_assigned_identity" "postgres_server" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvshared001at21"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at21"
+ tenant_id = (known after apply)
}
# module.postgres_server.azurerm_user_assigned_identity.postgres_server_admin will be created
+ resource "azurerm_user_assigned_identity" "postgres_server_admin" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "mipsqlsrvadminshared001at21"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at21"
+ tenant_id = (known after apply)
}
# module.service_bus.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.service_bus.data.azurerm_role_definition.key_vault_crypto_officer will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_role_definition" "key_vault_crypto_officer" {
+ assignable_scopes = (known after apply)
+ description = (known after apply)
+ id = (known after apply)
+ name = (known after apply)
+ permissions = (known after apply)
+ role_definition_id = "14b46e9e-c2b7-41b4-b07b-48a6ebf60603"
+ type = (known after apply)
}
# module.service_bus.azurerm_key_vault_key.service_bus[0] will be created
+ resource "azurerm_key_vault_key" "service_bus" {
+ curve = (known after apply)
+ e = (known after apply)
+ id = (known after apply)
+ key_opts = [
+ "unwrapKey",
+ "wrapKey",
]
+ key_size = 2048
+ key_type = "RSA"
+ key_vault_id = (known after apply)
+ n = (known after apply)
+ name = "sbshared001at21"
+ public_key_openssh = (known after apply)
+ public_key_pem = (known after apply)
+ resource_id = (known after apply)
+ resource_versionless_id = (known after apply)
+ version = (known after apply)
+ versionless_id = (known after apply)
+ x = (known after apply)
+ y = (known after apply)
}
# module.service_bus.azurerm_private_endpoint.service_bus_private_endpoint[0] will be created
+ resource "azurerm_private_endpoint" "service_bus_private_endpoint" {
+ custom_dns_configs = (known after apply)
+ custom_network_interface_name = "nicsbshared001at21"
+ id = (known after apply)
+ location = (known after apply)
+ name = "pesbshared001at21"
+ network_interface = (known after apply)
+ private_dns_zone_configs = (known after apply)
+ resource_group_name = "rgshared001at21"
+ subnet_id = (known after apply)
+ private_dns_zone_group {
+ id = (known after apply)
+ name = "sbshared001at21"
+ private_dns_zone_ids = (known after apply)
}
+ private_service_connection {
+ is_manual_connection = false
+ name = "sbshared001at21"
+ private_connection_resource_id = (known after apply)
+ private_ip_address = (known after apply)
+ subresource_names = [
+ "namespace",
]
}
}
# module.service_bus.azurerm_role_assignment.key_vault_crypto_officer will be created
+ resource "azurerm_role_assignment" "key_vault_crypto_officer" {
+ id = (known after apply)
+ name = (known after apply)
+ principal_id = (known after apply)
+ principal_type = (known after apply)
+ role_definition_id = (known after apply)
+ role_definition_name = (known after apply)
+ scope = (known after apply)
+ skip_service_principal_aad_check = true
}
# module.service_bus.azurerm_role_definition.service_bus_masstransit will be created
+ resource "azurerm_role_definition" "service_bus_masstransit" {
+ assignable_scopes = (known after apply)
+ description = "Allow C# Applications use MassTransit with Azure Service Bus"
+ id = (known after apply)
+ name = "Azure Service Bus Mass Transit"
+ role_definition_id = (known after apply)
+ role_definition_resource_id = (known after apply)
+ scope = (known after apply)
+ permissions {
+ actions = [
+ "Microsoft.ServiceBus/namespaces/read",
+ "Microsoft.ServiceBus/namespaces/queues/*",
+ "Microsoft.ServiceBus/namespaces/topics/*",
]
}
}
# module.service_bus.azurerm_servicebus_namespace.service_bus will be created
+ resource "azurerm_servicebus_namespace" "service_bus" {
+ capacity = 1
+ default_primary_connection_string = (sensitive value)
+ default_primary_key = (sensitive value)
+ default_secondary_connection_string = (sensitive value)
+ default_secondary_key = (sensitive value)
+ endpoint = (known after apply)
+ id = (known after apply)
+ local_auth_enabled = false
+ location = (known after apply)
+ minimum_tls_version = "1.2"
+ name = "sbshared001at21"
+ premium_messaging_partitions = 1
+ public_network_access_enabled = true
+ resource_group_name = "rgshared001at21"
+ sku = "Premium"
+ customer_managed_key {
+ identity_id = (known after apply)
+ infrastructure_encryption_enabled = true
+ key_vault_key_id = (known after apply)
}
+ identity {
+ identity_ids = (known after apply)
+ principal_id = (known after apply)
+ tenant_id = (known after apply)
+ type = "UserAssigned"
}
+ network_rule_set {
+ default_action = "Deny"
+ ip_rules = (sensitive value)
+ public_network_access_enabled = false
+ trusted_services_allowed = true
}
}
# module.service_bus.azurerm_user_assigned_identity.service_bus will be created
+ resource "azurerm_user_assigned_identity" "service_bus" {
+ client_id = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "misbshared001at21"
+ principal_id = (known after apply)
+ resource_group_name = "rgshared001at21"
+ tenant_id = (known after apply)
}
# module.vnet.data.azurerm_resource_group.rg will be read during apply
# (depends on a resource or a module with changes pending)
<= data "azurerm_resource_group" "rg" {
+ id = (known after apply)
+ location = (known after apply)
+ managed_by = (known after apply)
+ name = "rgshared001at21"
+ tags = (known after apply)
}
# module.vnet.azurerm_subnet.vnet["default"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.0.0/23",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "default"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at21"
+ virtual_network_name = "vnetshared001at21"
}
# module.vnet.azurerm_subnet.vnet["postgres"] will be created
+ resource "azurerm_subnet" "vnet" {
+ address_prefixes = [
+ "10.202.2.0/28",
]
+ default_outbound_access_enabled = true
+ id = (known after apply)
+ name = "postgres"
+ private_endpoint_network_policies = "Disabled"
+ private_link_service_network_policies_enabled = true
+ resource_group_name = "rgshared001at21"
+ virtual_network_name = "vnetshared001at21"
+ delegation {
+ name = "fs"
+ service_delegation {
+ actions = [
+ "Microsoft.Network/virtualNetworks/subnets/join/action",
]
+ name = "Microsoft.DBforPostgreSQL/flexibleServers"
}
}
}
# module.vnet.azurerm_virtual_network.vnet will be created
+ resource "azurerm_virtual_network" "vnet" {
+ address_space = [
+ "10.202.0.0/22",
]
+ dns_servers = (known after apply)
+ guid = (known after apply)
+ id = (known after apply)
+ location = (known after apply)
+ name = "vnetshared001at21"
+ resource_group_name = "rgshared001at21"
+ subnet = (known after apply)
}
Plan: 35 to add, 0 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Saved the plan to: tfplan.out
To perform exactly these actions, run the following command to apply:
terraform apply "tfplan.out"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.0.8→0.1.13.0.1→3.3.03.0.1→3.3.04.5.3→4.5.53.0.9→3.2.24.0.0→4.2.34.0.3→4.6.02.1.1→2.4.12.5.1→2.7.02.5.1→2.7.01.13.1→1.19.04.7.0→4.8.04.7.0→4.9.012.22.2→12.27.012.20.1→12.25.01.2.25→1.2.396.12.1→6.12.24.0.1→4.0.43.6.2→3.11.12.22.0→2.23.02.22.0→2.23.06.0.35→6.0.368.0.10→8.0.255.3.2→5.3.84.0.0→4.4.08.3.0→8.16.017.12.0→17.14.117.11.1→17.14.18.0.5→8.0.98.0.2→8.0.38.0.5→8.0.66.0.2→6.0.4Release Notes
Altinn/altinn-authorization-utils (Altinn.Authorization.ProblemDetails)
v3.3.0: Altinn.Authorization.ProblemDetails: v3.3.0Compare Source
Features
MultipleProblemDetails(#263) (397ae08)v3.2.2: Altinn.Authorization.ProblemDetails: v3.2.2Compare Source
Bug Fixes
ProblemInstanceException(#228) (5fe0f72)v3.2.1: Altinn.Authorization.ProblemDetails: v3.2.1Compare Source
Bug Fixes
v3.2.0: Altinn.Authorization.ProblemDetails: v3.2.0Compare Source
Features
ProblemInstanceException(#172) (7bed62f)v3.1.0: Altinn.Authorization.ProblemDetails: v3.1.0Compare Source
Features
Altinn/altinn-accesstoken (Altinn.Common.AccessToken)
v4.5.5Compare Source
What's Changed
v4.5.4Compare Source
What's Changed
Full Changelog: Altinn/altinn-accesstoken@Altinn.Common.AccessToken-4.5.3...Altinn.Common.AccessToken-4.5.4
Azure/azure-sdk-for-net (Azure.Identity)
v1.19.0Compare Source
1.19.0 (2026-03-11)
Features Added
ClientCertificateCredentialto specify a path in the form ofcert:/StoreLocation/StoreName/Thumbprintto refer to a certificate in the platform certificate store - such as the Windows Certificate Store on Windows, and the KeyChain on MacOS - instead of a file on disk. For example to load a certificate from the "My" store in the "CurrentUser" location use the pathcert:/CurrentUser/My/E661583E8FABEF4C0BEF694CBC41C28FB81CD870(A community contribution, courtesy of fowl2).Other Changes
Microsoft.Identity.ClientandMicrosoft.Identity.Client.Extensions.Msaldependencies to version 4.83.1.v1.18.0Compare Source
1.18.0 (2026-02-25)
Features Added
Added experimental
Microsoft.Extensions.ConfigurationandMicrosoft.Extensions.DependencyInjectionintegration for Azure SDK clients. For details, see the Configuration and Dependency Injection documentation.The
WorkloadIdentityCredentialOptions.IsAzureProxyEnabledproperty, which enables Azure Kubernetes token proxy mode, is only available in beta releases of this package.AzureDeveloperCliCredentialnow parses JSON error output fromazd auth tokento extract clean error messages instead of including raw JSON in exceptions. Error messages like{"type":"consoleMessage","data":{"message":"ERROR: fetching token: ..."}}are now displayed asERROR: fetching token: ....v1.17.1Compare Source
1.17.1 (2025-11-18)
Other Changes
Microsoft.Identity.ClientandMicrosoft.Identity.Client.Extensions.Msaldependencies to version 4.78.0.v1.17.0Compare Source
1.17.0 (2025-10-07)
Bugs Fixed
WithTenantIdinstead ofWithTenantIdFromAuthorityto prevent malformed Uris to the authority.Other Changes
BrowserCustomizationOptions.UseEmbeddedWebViewproperty. This option requires additional dependencies on Microsoft.Identity.Client.Desktop and is no longer supported. Consider using brokered authentication instead.v1.16.0Compare Source
1.16.0 (2025-09-09)
Features Added
DefaultAzureCredentialconstructor that accepts a custom environment variable name for credential configuration. This provides flexibility beyond the defaultAZURE_TOKEN_CREDENTIALSenvironment variable. The constructor accepts any environment variable name and uses the same credential selection logic as the existingAZURE_TOKEN_CREDENTIALSprocessing.DefaultAzureCredential.DefaultEnvironmentVariableNameconstant property that returns"AZURE_TOKEN_CREDENTIALS"for convenience when referencing the default environment variable name.AzureCliCredential,AzurePowerShellCredential, andAzureDeveloperCliCredentialnow throw anAuthenticationFailedExceptionwhen theTokenRequestContextincludes claims, as these credentials do not support claims challenges. The exception message includes guidance for handling such scenarios.AZURE_TOKEN_CREDENTIALSor the equivalent custom environment variable is configured toManagedIdentityCredential, theDefaultAzureCredentialdoes not issue a probe request and performs retries with exponential backoff.Bugs Fixed
AzureDeveloperCliCredentialhanging when theAZD_DEBUGenvironment variable is set by adding the--no-promptflag to prevent interactive prompts (#52005).BrokerCredentialis now included in the chain whenAZURE_TOKEN_CREDENTIALSis set todev.DefaultAzureCredentialthat caused the credential chain to be constructed incorrectly when using AZURE_TOKEN_CREDENTIALS in combination withDefaultAzureCredentialOptions.Other Changes
BrokerCredentialis now always included in theDefaultAzureCredentialchain. If theAzure.Identity.Brokerpackage is not referenced, an exception will be thrown whenGetTokenis called, making its behavior consistent with the rest of the credentials in the chain.Microsoft.Identity.Clientdependency to version 4.76.0.Microsoft.Identity.Client.Extensions.Msaldependency to version 4.76.0.v1.15.0Compare Source
1.15.0 (2025-08-07)
Breaking Changes
Behavioral Breaking Changes
SharedTokenCacheCredential. The supporting credential (SharedTokenCacheCredential) was a legacy mechanism for authenticating clients using credentials provided to Visual Studio. For brokered authentication, consider usingInteractiveBrowserCredentialinstead. The following changes have been made:SharedTokenCacheCredentialclass is marked as[Obsolete]and[EditorBrowsable(EditorBrowsableState.Never)]SharedTokenCacheCredentialOptionsclass is marked as[Obsolete]and[EditorBrowsable(EditorBrowsableState.Never)]DefaultAzureCredentialOptions.ExcludeSharedTokenCacheCredentialproperty is marked as[Obsolete]and[EditorBrowsable(EditorBrowsableState.Never)]SharedTokenCacheUsernameproperty is marked as[Obsolete]and[EditorBrowsable(EditorBrowsableState.Never)]SharedTokenCacheCredentialis no longer included in theDefaultAzureCredentialauthentication flowBugs Fixed
AdditionallyAllowedTenantsvalues which will now be matched against tenant IDs without case sensitivity, making the authentication more resilient to case differences in tenant IDs returned from WWW-Authenticate challenges (#51693).Other Changes
BrokerAuthenticationCredentialhas been renamed asBrokerCredential.Added the
EditorBrowsable(Never)attribute to propertyVisualStudioCodeTenantIdasTenantIdis preferred. TheVisualStudioCodeTenantIdproperty exists only to provide backwards compatibility.v1.14.2Compare Source
1.14.2 (2025-07-10)
Other changes
Microsoft.Identity.Clientdependency to version 4.73.1v1.14.1Compare Source
1.14.1 (2025-07-08)
Bugs Fixed
v1.14.0Compare Source
1.14.0 (2025-05-13)
Other Changes
Username,Password,AZURE_USERNAME, andAZURE_PASSWORDin XML comments fromEnvironmentCredentialOptionsandEnvironmentCredentialdue to lack of MFA support. See MFA enforcement details.AZURE_USERNAMEandAZURE_PASSWORDas obsolete due to lack of MFA support. See MFA enforcement details.AZURE_TOKEN_CREDENTIALSenvironment variable toDefaultAzureCredential, which allows for choosing between 'deployed service' and 'developer tools' credentials. Valid values are 'dev' for developer tools and 'prod' for deployed service.v1.13.2Compare Source
1.13.2 (2025-07-18)
Features Added
Azure.ResourceManagerAOT-compatible.dotnet/reproducible-builds (DotNet.ReproducibleBuilds)
v1.2.39Additions
Removals
Changed
Tidying up
New Contributors
Full Changelog: dotnet/reproducible-builds@v1.2.25...v1.2.39
fluentassertions/fluentassertions (FluentAssertions)
v6.12.2Compare Source
What's Changed
Others
Full Changelog: fluentassertions/fluentassertions@6.12.1...6.12.2
microsoft/testfx (MSTest.TestFramework)
v3.11.1See the release notes here
v3.11.0See the release notes here
v3.10.5See the release notes here
v3.10.4See the release notes here
v3.10.3See the release notes here
v3.10.2See the release notes here
v3.10.1See the release notes here
v3.10.0See the release notes here
v3.9.3What's Changed
See the MSTest changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog.md#3.9.3
See the Microsoft.Testing.Platform changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog-Platform.md#1.7.3
Full Changelog: microsoft/testfx@v3.9.2...v3.9.3
v3.9.2What's Changed
See the MSTest changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog.md#3.9.2
See the Microsoft.Testing.Platform changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog-Platform.md#1.7.2
Full Changelog: microsoft/testfx@v3.9.1...v3.9.2
v3.9.1What's Changed
See the MSTest changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog.md#3.9.1
See the Microsoft.Testing.Platform changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog-Platform.md#1.7.1
Full Changelog: microsoft/testfx@v3.9.0...v3.9.1
v3.9.0In this release we focused a lot on providing fixes for MSTest and Microsoft.Testing.Platform. The most notable new features and fixes are:
MSTest
Microsoft.Testing.Platform
We've also improved the
dotnet testexperience in dotnet SDK, especially around Retry plugin experience, and started dogfooding the experience in our own repository. Please check out how to enable the newdotnet testexperience for Microsoft.Testing.Platform in net10 by following this link, and help us dogfood it.New Contributors
See the MSTest changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog.md#3.9.0
See the Microsoft.Testing.Platform changelog here: https://github.com/microsoft/testfx/blob/main/docs/Changelog-Platform.md#1.7.0
Full Changelog: microsoft/testfx@v3.8.3...v3.9.0
v3.8.3See the release notes here
v3.8.2See the release notes here
v3.8.1See the release notes here
v3.8.0See the release notes here
Announcements
MSTestAnalysisMode. We encourage you to set this property to at leastRecommended.RetryAttributev3.7.3See the release notes here
v3.7.2See the release notes here
v3.7.1See the release notes here
v3.7.0See the release notes here
Announcements
MSTest.Analyzers is now a transitive dependency of MSTest.TestFramework and thus no longer needs to be manually installed.
Note: The only rules enabled by default as warnings, which could potentially cause build errors when updating MSTest, have been carefully selected and thoroughly validated. These rules specifically address real runtime issues related to the usage of MSTest, ensuring that no purely stylistic or low-impact analyzers are enforced by default.
v3.6.4See the release notes here
v3.6.3See the release notes here
Microsoft/ApplicationInsights-dotnet (Microsoft.ApplicationInsights)
v2.23.0Compare Source
dotnet/dotnet (Microsoft.AspNetCore.Mvc.Testing)
v8.0.18: .NET 8.0.18You can build .NET 8.0 from the repository by cloning the release tag
v8.0.18and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.17: .NET 8.0.17You can build .NET 8.0 from the repository by cloning the release tag
v8.0.17and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.16: .NET 8.0.16You can build .NET 8.0 from the repository by cloning the release tag
v8.0.16and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.15: .NET 8.0.15You can build .NET 8.0 from the repository by cloning the release tag
v8.0.15and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.14: .NET 8.0.14You can build .NET 8.0 from the repository by cloning the release tag
v8.0.14and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.13: .NET 8.0.13You can build .NET 8.0 from the repository by cloning the release tag
v8.0.13and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.12: .NET 8.0.12You can build .NET 8.0 from the repository by cloning the release tag
v8.0.12and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
v8.0.11: .NET 8.0.11You can build .NET 8.0 from the repository by cloning the release tag
v8.0.11and following the build instructions in the main README.md.Alternatively, you can build from the sources attached to this release directly.
More information on this process can be found in the dotnet/dotnet repository.
Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023
microsoft/FeatureManagement-Dotnet (Microsoft.FeatureManagement)
v4.4.0Compare Source
4.4.0 - December 18, 2025
Microsoft.FeatureManagement Updates
The packages associated with this release are
Microsoft.FeatureManagement
Enhancements
Exposed the
SystemClockproperty forTimeWindowFilterto enable the use of a customTimeProvider. #558Added new overloads for
FilterCollectionExtensions.AddForFeatureto support specifying multiple feature flags, requirement types, and negation. #359Microsoft.FeatureManagement.AspNetCore
Enhancements
Microsoft.FeatureManagementreference to4.4.0. See the release notes for more information on the changes.Microsoft.FeatureManagement.Telemetry.ApplicationInsights
Enhancements
Microsoft.FeatureManagementreference to4.4.0. See the release notes for more information on the changes.v4.3.0Compare Source
4.3.0 - August 27, 2025
Microsoft.FeatureManagement Updates
The packages associated with this release are
Microsoft.FeatureManagement
Enhancements
ConfigurationFeatureDefinitionProviderOptionswhich allows to enable the new configuration merging behavior for the built-inConfiguationFeatureDefinitionProvider. When the same feature flag is defined in multiple sources, definitions are merged according to configuration provider registration order, with the last feature flag definition taking precedence in case of conflicts. #552Microsoft.FeatureManagement.AspNetCore
Enhancements
Microsoft.FeatureManagementreference to4.3.0. See the release notes for more information on the changes.Microsoft.FeatureManagement.Telemetry.ApplicationInsights
Enhancements
Microsoft.FeatureManagementreference to4.3.0. See the release notes for more information on the changes.v4.2.1Compare Source
v4.2.0Compare Source
v4.1.0Compare Source
4.1.0 - May 22, 2025
Microsoft.FeatureManagement Updates
The packages associated with this release are
Microsoft.FeatureManagement
Enhancements
DefaultWhenEnabledandVariantAssignmentPercentagefields to theFeatureEvaluationevent. #495Microsoft.FeatureManagement.AspNetCore
Enhancements
Microsoft.FeatureManagementreference to4.1.0. See the release notes for more information on the changes.Bug Fix
Microsoft.FeatureManagement.Telemetry.ApplicationInsights
Enhancements
Microsoft.FeatureManagementreference to4.1.0. See the release notes for more information on the changes.Bug Fix
AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet (Microsoft.IdentityModel.Protocols.OpenIdConnect)
v8.16.0Compare Source
====
New Features
Fundamentals
v8.15.0Compare Source
====
New Features
X509SecurityKeyandJsonWebKeyConverter.ConvertFromX509SecurityKeyExtended
X509SecurityKeyandJsonWebKeyConverter.ConvertFromX509SecurityKeyto support ECDSA keys.See PR #2377 for details.
Bug Fixes
Updated logging to sanitize sensitive values, reducing the risk of inadvertently exposing secrets or PII in logs.
See PR #3316 for details.
SearchValuesImproved the performance of the log sanitization logic introduced earlier by using
SearchValues, making sanitization more efficient in high-throughput scenarios.See PR #3341 for details.
IDX10400Adjusted the
IDX10400test to align with the current behavior and error messaging.See PR #3314 for details.
Fundamentals
Added new tests to validate the set of supported cryptographic algorithms, increasing confidence in algorithm coverage and compatibility.
See PR #3296 for details.
.clinerulestoagents.mdMoved repository agent/AI-assist rules into markdown documentation to make them more visible and easier to maintain.
See PR #3313 for details.
Configuration
📅 Schedule: Branch creation - "before 07:00 on Thursday" in timezone Europe/Oslo, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.