diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ad549db7..ad259099 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # These owners will be the default owners for everything in the repo. -* @hudua @SenthuranSivananthan @skeeler +* @hudua @SenthuranSivananthan @skeeler @kevinevans @bawillis diff --git a/docs/archetypes/logging.md b/docs/archetypes/logging.md index 0585d51f..35be9b2b 100644 --- a/docs/archetypes/logging.md +++ b/docs/archetypes/logging.md @@ -2,15 +2,13 @@ ## Table of Contents -- [Archetype: Logging](#archetype--logging) - - [Table of Contents](#table-of-contents) - - [Overview](#overview) - - [Schema Definition](#schema-definition) - - [Delete Locks](#delete-locks) - - [Service Health](#service-health) - - [Deployment Scenarios](#deployment-scenarios) - - [Example Deployment Parameters](#example-deployment-parameters) - - [Deployment Instructions](#deployment-instructions) +* [Overview](#overview) +* [Schema Definition](#schema-definition) +* [Delete Locks](#delete-locks) +* [Service Health](#service-health) +* [Deployment Scenarios](#deployment-scenarios) +* [Example Deployment Parameters](#example-deployment-parameters) +* [Deployment Instructions](#deployment-instructions) ## Overview diff --git a/schemas/v0.6.0/landingzones/lz-generic-subscription.json b/schemas/v0.6.0/landingzones/lz-generic-subscription.json new file mode 100644 index 00000000..31a931cb --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-generic-subscription.json @@ -0,0 +1,265 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/GenericSubscriptionArchetypeDefinition", + "definitions": { + "GenericSubscriptionArchetypeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "GenericSubscriptionArchetypeDefinition" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsWorkspaceResourceId": { + "$ref": "types/logAnalyticsWorkspaceId.json#/definitions/LogAnalyticsWorkspaceId" + }, + "resourceGroups": { + "$ref": "#/definitions/ResourceGroups" + }, + "automation": { + "$ref": "types/automation.json#/definitions/Automation" + }, + "backupRecoveryVault": { + "$ref": "types/backupRecoveryVault.json#/definitions/RecoveryVault" + }, + "hubNetwork": { + "$ref": "types/hubNetwork.json#/definitions/HubNetworkWithoutPrivateDNS" + }, + "network": { + "$ref": "#/definitions/Network" + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "resourceGroups", + "automation", + "hubNetwork", + "network", + "backupRecoveryVault" + ], + "title": "Parameters" + }, + "ResourceGroups": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/ResourceGroupsValue" + } + }, + "required": [ + "value" + ], + "title": "ResourceGroups" + }, + "ResourceGroupsValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "automation": { + "type": "string" + }, + "backupRecoveryVault": { + "type": "string" + }, + "networking": { + "type": "string" + }, + "networkWatcher": { + "type": "string" + } + }, + "required": [ + "automation", + "networkWatcher", + "networking", + "backupRecoveryVault" + ], + "title": "ResourceGroupsValue" + }, + "Network": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/NetworkValue" + } + }, + "required": [ + "value" + ], + "title": "Network" + }, + "NetworkValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "deployVnet": { + "type": "boolean" + }, + "peerToHubVirtualNetwork": { + "type": "boolean" + }, + "useRemoteGateway": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "dnsServers": { + "type": "array", + "items": { + "type": "string" + } + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "$ref": "#/definitions/Subnets" + } + }, + "required": [ + "addressPrefixes", + "deployVnet", + "dnsServers", + "name", + "peerToHubVirtualNetwork", + "subnets", + "useRemoteGateway" + ], + "title": "NetworkValue" + }, + "Subnets": { + "type": "array", + "items": { + "$ref": "#/definitions/Subnet" + }, + "title": "Subnets" + }, + "Delegations": { + "type": "object", + "additionalProperties": false, + "properties": { + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName" + ], + "title": "Delegations" + }, + "Nsg": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "Nsg" + }, + "Udr": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "Udr" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "$ref": "#/definitions/Nsg" + }, + "udr": { + "$ref": "#/definitions/Udr" + }, + "delegations": { + "$ref": "#/definitions/Delegations" + } + }, + "required": [ + "addressPrefix", + "comments", + "name", + "nsg", + "udr" + ], + "title": "subnet" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-healthcare.json b/schemas/v0.6.0/landingzones/lz-healthcare.json new file mode 100644 index 00000000..a12b487f --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-healthcare.json @@ -0,0 +1,342 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/HealthcareArchetypeDefinition", + "definitions": { + "HealthcareArchetypeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "HealthcareArchetypeDefinition" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsWorkspaceResourceId": { + "$ref": "types/logAnalyticsWorkspaceId.json#/definitions/LogAnalyticsWorkspaceId" + }, + "useCMK": { + "$ref": "#/definitions/UseCMK" + }, + "resourceGroups": { + "$ref": "#/definitions/ResourceGroups" + }, + "automation": { + "$ref": "types/automation.json#/definitions/Automation" + }, + "keyVault": { + "$ref": "types/keyVault.json#/definitions/KeyVault" + }, + "sqldb": { + "$ref": "types/sqldb.json#/definitions/SQLDB" + }, + "synapse": { + "$ref": "types/synapse.json#/definitions/Synapse" + }, + "hubNetwork": { + "$ref": "types/hubNetwork.json#/definitions/HubNetworkWithPrivateDNS" + }, + "network": { + "$ref": "#/definitions/Network" + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "useCMK", + "resourceGroups", + "automation", + "keyVault", + "sqldb", + "hubNetwork" + ], + "title": "Parameters" + }, + "UseCMK": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "boolean" + } + }, + "required": [ + "value" + ], + "title": "UseCMK" + }, + "ResourceGroups": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/ResourceGroupsValue" + } + }, + "required": [ + "value" + ], + "title": "ResourceGroups" + }, + "ResourceGroupsValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "automation": { + "type": "string" + }, + "compute": { + "type": "string" + }, + "monitor": { + "type": "string" + }, + "networking": { + "type": "string" + }, + "networkWatcher": { + "type": "string" + }, + "security": { + "type": "string" + }, + "storage": { + "type": "string" + } + }, + "required": [ + "automation", + "compute", + "monitor", + "networkWatcher", + "networking", + "security", + "storage" + ], + "title": "ResourceGroupsValue" + }, + "Network": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/NetworkValue" + } + }, + "required": [ + "value" + ], + "title": "Network" + }, + "NetworkValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "peerToHubVirtualNetwork": { + "type": "boolean" + }, + "useRemoteGateway": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "dnsServers": { + "type": "array", + "items": { + "type": "string" + } + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "$ref": "#/definitions/Subnets" + } + }, + "required": [ + "addressPrefixes", + "dnsServers", + "name", + "peerToHubVirtualNetwork", + "subnets", + "useRemoteGateway" + ], + "title": "NetworkValue" + }, + "Subnets": { + "type": "object", + "additionalProperties": false, + "properties": { + "databricksPublic": { + "$ref": "#/definitions/Subnet" + }, + "databricksPrivate": { + "$ref": "#/definitions/Subnet" + }, + "privateEndpoints": { + "$ref": "#/definitions/Subnet" + }, + "web": { + "$ref": "#/definitions/Subnet" + }, + "optional": { + "type": "array", + "items": { + "$ref": "#/definitions/OptionalSubnet" + } + } + }, + "required": [ + "databricksPublic", + "databricksPrivate", + "privateEndpoints", + "web", + "optional" + ], + "title": "Subnets" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "addressPrefix", + "comments", + "name" + ], + "title": "subnet" + }, + "OptionalSubnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "$ref": "#/definitions/OptionalSubnetNsg" + }, + "udr": { + "$ref": "#/definitions/OptionalSubnetUdr" + }, + "delegations": { + "$ref": "#/definitions/OptionalSubnetDelegations" + } + }, + "required": [ + "addressPrefix", + "comments", + "name", + "nsg", + "udr" + ], + "title": "OptionalSubnet" + }, + "OptionalSubnetDelegations": { + "type": "object", + "additionalProperties": false, + "properties": { + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName" + ], + "title": "OptionalSubnetDelegations" + }, + "OptionalSubnetNsg": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "OptionalSubnetNsg" + }, + "OptionalSubnetUdr": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "OptionalSubnetUdr" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-machinelearning.json b/schemas/v0.6.0/landingzones/lz-machinelearning.json new file mode 100644 index 00000000..065195d6 --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-machinelearning.json @@ -0,0 +1,363 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/MachineLearningArchetypeDefinition", + "definitions": { + "MachineLearningArchetypeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "MachineLearningArchetypeDefinition" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsWorkspaceResourceId": { + "$ref": "types/logAnalyticsWorkspaceId.json#/definitions/LogAnalyticsWorkspaceId" + }, + "useCMK": { + "$ref": "#/definitions/UseCMK" + }, + "resourceGroups": { + "$ref": "#/definitions/ResourceGroups" + }, + "automation": { + "$ref": "types/automation.json#/definitions/Automation" + }, + "keyVault": { + "$ref": "types/keyVault.json#/definitions/KeyVault" + }, + "aks": { + "$ref": "types/aks.json#/definitions/AKS" + }, + "appServiceLinuxContainer": { + "$ref": "types/appServiceLinuxContainer.json#/definitions/APPSERVICELINUXCONTAINER" + }, + "sqldb": { + "$ref": "types/sqldb.json#/definitions/SQLDB" + }, + "sqlmi": { + "$ref": "types/sqlmi.json#/definitions/SQLMI" + }, + "aml": { + "$ref": "types/aml.json#/definitions/AML" + }, + "hubNetwork": { + "$ref": "types/hubNetwork.json#/definitions/HubNetworkWithPrivateDNS" + }, + "network": { + "$ref": "#/definitions/Network" + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "useCMK", + "resourceGroups", + "automation", + "keyVault", + "aks", + "appServiceLinuxContainer", + "sqldb", + "sqlmi", + "aml", + "hubNetwork" + ], + "title": "Parameters" + }, + "UseCMK": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "boolean" + } + }, + "required": [ + "value" + ], + "title": "UseCMK" + }, + "ResourceGroups": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/ResourceGroupsValue" + } + }, + "required": [ + "value" + ], + "title": "ResourceGroups" + }, + "ResourceGroupsValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "automation": { + "type": "string" + }, + "compute": { + "type": "string" + }, + "monitor": { + "type": "string" + }, + "networking": { + "type": "string" + }, + "networkWatcher": { + "type": "string" + }, + "security": { + "type": "string" + }, + "storage": { + "type": "string" + } + }, + "required": [ + "automation", + "compute", + "monitor", + "networkWatcher", + "networking", + "security", + "storage" + ], + "title": "ResourceGroupsValue" + }, + "Network": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/NetworkValue" + } + }, + "required": [ + "value" + ], + "title": "Network" + }, + "NetworkValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "peerToHubVirtualNetwork": { + "type": "boolean" + }, + "useRemoteGateway": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "dnsServers": { + "type": "array", + "items": { + "type": "string" + } + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "$ref": "#/definitions/Subnets" + } + }, + "required": [ + "addressPrefixes", + "dnsServers", + "name", + "peerToHubVirtualNetwork", + "subnets", + "useRemoteGateway" + ], + "title": "NetworkValue" + }, + "Subnets": { + "type": "object", + "additionalProperties": false, + "properties": { + "sqlmi": { + "$ref": "#/definitions/Subnet" + }, + "databricksPublic": { + "$ref": "#/definitions/Subnet" + }, + "databricksPrivate": { + "$ref": "#/definitions/Subnet" + }, + "privateEndpoints": { + "$ref": "#/definitions/Subnet" + }, + "aks": { + "$ref": "#/definitions/Subnet" + }, + "appService": { + "$ref": "#/definitions/Subnet" + }, + "optional": { + "type": "array", + "items": { + "$ref": "#/definitions/OptionalSubnet" + } + } + }, + "required": [ + "sqlmi", + "databricksPublic", + "databricksPrivate", + "privateEndpoints", + "aks", + "appService", + "optional" + ], + "title": "Subnets" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "addressPrefix", + "comments", + "name" + ], + "title": "subnet" + }, + "OptionalSubnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "$ref": "#/definitions/OptionalSubnetNsg" + }, + "udr": { + "$ref": "#/definitions/OptionalSubnetUdr" + }, + "delegations": { + "$ref": "#/definitions/OptionalSubnetDelegations" + } + }, + "required": [ + "addressPrefix", + "comments", + "name", + "nsg", + "udr" + ], + "title": "OptionalSubnet" + }, + "OptionalSubnetDelegations": { + "type": "object", + "additionalProperties": false, + "properties": { + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName" + ], + "title": "OptionalSubnetDelegations" + }, + "OptionalSubnetNsg": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "OptionalSubnetNsg" + }, + "OptionalSubnetUdr": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "OptionalSubnetUdr" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw-policy.json b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw-policy.json new file mode 100644 index 00000000..04a51bbe --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw-policy.json @@ -0,0 +1,71 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/PlatformConnectivityHubNetworkAzureFirewallPolicy", + "definitions": { + "PlatformConnectivityHubNetworkAzureFirewallPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "PlatformConnectivityHubNetworkAzureFirewallPolicy" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "resourceGroupName": { + "$ref": "#/definitions/StringValue" + }, + "policyName": { + "$ref": "#/definitions/StringValue" + } + }, + "required": [ + "resourceTags", + "resourceGroupName", + "policyName" + ], + "title": "Parameters" + }, + "StringValue": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + }, + "title": "StringValue" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw.json b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw.json new file mode 100644 index 00000000..2c209103 --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-azfw.json @@ -0,0 +1,433 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/PlatformConnectivityHubNetworkAzureFirewall", + "definitions": { + "PlatformConnectivityHubNetworkAzureFirewall": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "PlatformConnectivityHubNetworkAzureFirewall" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsWorkspaceResourceId": { + "$ref": "types/logAnalyticsWorkspaceId.json#/definitions/LogAnalyticsWorkspaceId" + }, + "privateDnsZones": { + "$ref": "#/definitions/privateDnsZones" + }, + "ddosStandard": { + "$ref": "#/definitions/ddosStandard" + }, + "publicAccessZone": { + "$ref": "#/definitions/publicAccessZone" + }, + "managementRestrictedZone": { + "$ref": "#/definitions/managementRestrictedZone" + }, + "hub": { + "$ref": "#/definitions/hub" + }, + "networkWatcher": { + "$ref": "#/definitions/networkWatcher" + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "privateDnsZones", + "ddosStandard", + "publicAccessZone", + "managementRestrictedZone", + "hub", + "networkWatcher" + ], + "title": "Parameters" + }, + "privateDnsZones": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "ddosStandard": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + }, + "planName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName", + "planName" + ] + } + }, + "required": [ + "value" + ] + }, + "publicAccessZone": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "managementRestrictedZone": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + }, + "network": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "type": "array", + "items": { + "$ref": "#/definitions/optionalSubnet" + } + } + }, + "required": [ + "name", + "addressPrefixes", + "subnets" + ] + } + }, + "required": [ + "enabled", + "resourceGroupName", + "network" + ] + } + }, + "required": [ + "value" + ] + }, + "hub": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "resourceGroupName": { + "type": "string" + }, + "bastion": { + "$ref": "#/definitions/bastion" + }, + "azureFirewall": { + "$ref": "#/definitions/azureFirewall" + }, + "network": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "type": "object", + "properties": { + "gateway": { + "$ref": "#/definitions/requiredSubnet" + }, + "firewall": { + "$ref": "#/definitions/requiredSubnet" + }, + "bastion": { + "$ref": "#/definitions/requiredSubnet" + }, + "publicAccess": { + "$ref": "#/definitions/requiredSubnet" + }, + "optional": { + "type": "array", + "items": { + "$ref": "#/definitions/optionalSubnet" + } + } + } + } + }, + "required": [ + "name", + "addressPrefixes", + "subnets" + ] + } + }, + "required": [ + "resourceGroupName", + "bastion", + "azureFirewall", + "network" + ] + } + }, + "required": [ + "value" + ] + }, + "networkWatcher": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "requiredSubnet": { + "type": "object", + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "comments", + "name", + "addressPrefix" + ] + }, + "optionalSubnet": { + "type": "object", + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "udr": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "delegations": { + "type": "object", + "properties": { + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName" + ] + } + }, + "required": [ + "comments", + "name", + "addressPrefix", + "nsg", + "udr" + ] + }, + "bastion": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "scaleUnits": { + "type": "integer" + } + }, + "required": [ + "enabled", + "name", + "sku", + "scaleUnits" + ] + }, + "azureFirewall": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "availabilityZones": { + "type": "array", + "items": { + "type": "string" + } + }, + "forcedTunnelingEnabled": { + "type": "boolean" + }, + "forcedTunnelingNextHop": { + "type": "string" + }, + "firewallPolicyId": { + "type": "string" + } + }, + "required": [ + "name", + "availabilityZones", + "forcedTunnelingEnabled", + "forcedTunnelingNextHop" + ] + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-nva.json b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-nva.json new file mode 100644 index 00000000..f34c3b8a --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-platform-connectivity-hub-nva.json @@ -0,0 +1,565 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/PlatformConnectivityHubNetworkNVA", + "definitions": { + "PlatformConnectivityHubNetworkNVA": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "PlatformConnectivityHubNetworkNVA" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsWorkspaceResourceId": { + "$ref": "types/logAnalyticsWorkspaceId.json#/definitions/LogAnalyticsWorkspaceId" + }, + "privateDnsZones": { + "$ref": "#/definitions/privateDnsZones" + }, + "ddosStandard": { + "$ref": "#/definitions/ddosStandard" + }, + "publicAccessZone": { + "$ref": "#/definitions/publicAccessZone" + }, + "managementRestrictedZone": { + "$ref": "#/definitions/managementRestrictedZone" + }, + "hub": { + "$ref": "#/definitions/hub" + }, + "networkWatcher": { + "$ref": "#/definitions/networkWatcher" + }, + "fwUsername": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "fwPassword": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "privateDnsZones", + "ddosStandard", + "publicAccessZone", + "managementRestrictedZone", + "hub", + "networkWatcher" + ], + "title": "Parameters" + }, + "privateDnsZones": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "ddosStandard": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + }, + "planName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName", + "planName" + ] + } + }, + "required": [ + "value" + ] + }, + "publicAccessZone": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "enabled", + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "managementRestrictedZone": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "resourceGroupName": { + "type": "string" + }, + "network": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "type": "array", + "items": { + "$ref": "#/definitions/optionalSubnet" + } + } + }, + "required": [ + "name", + "addressPrefixes", + "subnets" + ] + } + }, + "required": [ + "enabled", + "resourceGroupName", + "network" + ] + } + }, + "required": [ + "value" + ] + }, + "hub": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "resourceGroupName": { + "type": "string" + }, + "bastion": { + "$ref": "#/definitions/bastion" + }, + "network": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "addressPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnets": { + "type": "object", + "properties": { + "gateway": { + "$ref": "#/definitions/requiredSubnet" + }, + "bastion": { + "$ref": "#/definitions/requiredSubnet" + }, + "public": { + "$ref": "#/definitions/requiredSubnet" + }, + "publicAccessZone": { + "$ref": "#/definitions/requiredSubnet" + }, + "externalAccessNetwork": { + "$ref": "#/definitions/requiredSubnet" + }, + "nonProductionInternal": { + "$ref": "#/definitions/requiredSubnet" + }, + "productionInternal": { + "$ref": "#/definitions/requiredSubnet" + }, + "managementRestrictedZoneInternal": { + "$ref": "#/definitions/requiredSubnet" + }, + "highAvailability": { + "$ref": "#/definitions/requiredSubnet" + }, + "optional": { + "type": "array", + "items": { + "$ref": "#/definitions/optionalSubnet" + } + } + }, + "required": [ + "gateway", + "bastion", + "public", + "publicAccessZone", + "externalAccessNetwork", + "nonProductionInternal", + "productionInternal", + "managementRestrictedZoneInternal", + "highAvailability", + "optional" + ] + } + }, + "required": [ + "name", + "addressPrefixes", + "subnets" + ] + }, + "nvaFirewall": { + "$ref": "#/definitions/nvaFirewall" + } + }, + "required": [ + "resourceGroupName", + "bastion", + "network", + "nvaFirewall" + ] + } + }, + "required": [ + "value" + ] + }, + "networkWatcher": { + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "resourceGroupName": { + "type": "string" + } + }, + "required": [ + "resourceGroupName" + ] + } + }, + "required": [ + "value" + ] + }, + "requiredSubnet": { + "type": "object", + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "comments", + "name", + "addressPrefix" + ] + }, + "optionalSubnet": { + "type": "object", + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "udr": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "delegations": { + "type": "object", + "properties": { + "serviceName": { + "type": "string" + } + }, + "required": [ + "serviceName" + ] + } + }, + "required": [ + "comments", + "name", + "addressPrefix", + "nsg", + "udr" + ] + }, + "nvaFirewall": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "publisher": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + }, + "plan": { + "type": "string" + } + } + }, + "nonProduction": { + "$ref": "#/definitions/nvaEnvironment" + }, + "production": { + "$ref": "#/definitions/nvaEnvironment" + } + } + }, + "nvaEnvironment": { + "type": "object", + "properties": { + "internalLoadBalancer": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "internalIp": { + "type": "string" + }, + "externalIp": { + "type": "string" + }, + "tcpProbe": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "intervalInSeconds": { + "type": "integer" + }, + "numberOfProbes": { + "type": "integer" + } + }, + "required": [ + "name", + "port", + "intervalInSeconds", + "numberOfProbes" + ] + } + } + }, + "deployVirtualMachines": { + "type": "boolean" + }, + "virtualMachines": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "vmSku": { + "type": "string" + }, + "internalIp": { + "type": "string" + }, + "externalIp": { + "type": "string" + }, + "mrzInternalIp": { + "type": "string" + }, + "highAvailabilityIp": { + "type": "string" + }, + "availabilityZone": { + "type": "string" + } + }, + "required": [ + "name", + "vmSku", + "internalIp", + "externalIp", + "mrzInternalIp", + "highAvailabilityIp", + "availabilityZone" + ] + } + } + }, + "required": [ + "internalLoadBalancer", + "deployVirtualMachines", + "virtualMachines" + ] + }, + "bastion": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "scaleUnits": { + "type": "integer" + } + }, + "required": [ + "enabled", + "name", + "sku", + "scaleUnits" + ] + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/lz-platform-logging.json b/schemas/v0.6.0/landingzones/lz-platform-logging.json new file mode 100644 index 00000000..d3818c4e --- /dev/null +++ b/schemas/v0.6.0/landingzones/lz-platform-logging.json @@ -0,0 +1,223 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/PlatformLoggingArchetypeDefinition", + "definitions": { + "PlatformLoggingArchetypeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ], + "qt-uri-extensions": [ + ".json" + ] + }, + "contentVersion": { + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/Parameters" + } + }, + "required": [ + "$schema", + "contentVersion", + "parameters" + ], + "title": "PlatformLoggingArchetypeDefinition" + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "location": { + "$ref": "types/location.json#/definitions/Location" + }, + "serviceHealthAlerts": { + "$ref": "types/serviceHealthAlerts.json#/definitions/ServiceHealthAlerts" + }, + "securityCenter": { + "$ref": "types/securityCenter.json#/definitions/SecurityCenter" + }, + "subscriptionRoleAssignments": { + "$ref": "types/subscriptionRoleAssignments.json#/definitions/SubscriptionRoleAssignments" + }, + "subscriptionBudget": { + "$ref": "types/subscriptionBudget.json#/definitions/SubscriptionBudget" + }, + "subscriptionTags": { + "$ref": "types/subscriptionTags.json#/definitions/SubscriptionTags" + }, + "resourceTags": { + "$ref": "types/resourceTags.json#/definitions/ResourceTags" + }, + "logAnalyticsResourceGroupName": { + "$ref": "#/definitions/logAnalyticsResourceGroupName" + }, + "logAnalyticsWorkspaceName": { + "$ref": "#/definitions/logAnalyticsWorkspaceName" + }, + "logAnalyticsRetentionInDays": { + "$ref": "#/definitions/logAnalyticsRetentionInDays" + }, + "logAnalyticsAutomationAccountName": { + "$ref": "#/definitions/logAnalyticsAutomationAccountName" + }, + "dataCollectionRule": { + "$ref": "#/definitions/dataCollectionRule" + } + }, + "required": [ + "resourceTags", + "securityCenter", + "serviceHealthAlerts", + "subscriptionBudget", + "subscriptionRoleAssignments", + "subscriptionTags", + "logAnalyticsResourceGroupName", + "logAnalyticsWorkspaceName", + "logAnalyticsRetentionInDays", + "logAnalyticsAutomationAccountName", + "dataCollectionRule" + ], + "title": "Parameters" + }, + "logAnalyticsResourceGroupName": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + }, + "title": "logAnalyticsResourceGroupName" + }, + "logAnalyticsWorkspaceName": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + }, + "title": "logAnalyticsWorkspaceName" + }, + "logAnalyticsRetentionInDays": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer" + } + }, + "title": "logAnalyticsRetentionInDays" + }, + "logAnalyticsAutomationAccountName": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + }, + "title": "logAnalyticsAutomationAccountName" + }, + "dataCollectionRule": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "windowsEventLogs": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "streams": { + "type": "array", + "items": { + "type": "string" + } + }, + "xPathQueries": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "syslog": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "streams": { + "type": "array", + "items": { + "type": "string" + } + }, + "facilityNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "logLevels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Debug", + "Info", + "Notice", + "Warning", + "Error", + "Critical", + "Alert", + "Emergency" + ] + } + } + } + } + } + } + } + }, + "title": "dataCollectionRule" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/aks.json b/schemas/v0.6.0/landingzones/types/aks.json new file mode 100644 index 00000000..1d3e8080 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/aks.json @@ -0,0 +1,134 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "AKS": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "version": { + "type": "string" + }, + "networkPlugin": { + "type": "string", + "enum": [ + "azure" + ] + }, + "networkPolicy": { + "type": "string", + "enum": [ + "azure", + "calico" + ] + }, + "podCidr": { + "type": "string", + "enum": [ + "" + ] + }, + "serviceCidr": { + "type": "string" + }, + "dnsServiceIP": { + "type": "string" + }, + "dockerBridgeCidr": { + "type": "string" + } + }, + "required": [ + "enabled", + "version", + "networkPlugin", + "networkPolicy", + "podCidr", + "serviceCidr", + "dockerBridgeCidr" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "version": { + "type": "string" + }, + "networkPlugin": { + "type": "string", + "enum": [ + "kubenet" + ] + }, + "networkPolicy": { + "type": "string", + "enum": [ + "calico" + ] + }, + "podCidr": { + "type": "string" + }, + "serviceCidr": { + "type": "string" + }, + "dnsServiceIP": { + "type": "string" + }, + "dockerBridgeCidr": { + "type": "string" + } + }, + "required": [ + "enabled", + "version", + "networkPlugin", + "networkPolicy", + "podCidr", + "serviceCidr", + "dockerBridgeCidr" + ] + }, + { + "type": "object", + "additionalProperties": true, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "AKS" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/aml.json b/schemas/v0.6.0/landingzones/types/aml.json new file mode 100644 index 00000000..ef1577d4 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/aml.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "AML": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "Aml" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "enableHbiWorkspace": { + "type": "boolean" + } + }, + "required": [ + "enableHbiWorkspace" + ], + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/appServiceLinuxContainer.json b/schemas/v0.6.0/landingzones/types/appServiceLinuxContainer.json new file mode 100644 index 00000000..f4316c33 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/appServiceLinuxContainer.json @@ -0,0 +1,65 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "APPSERVICELINUXCONTAINER": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "skuName": { + "type": "string" + }, + "skuTier": { + "type": "string" + }, + "enablePrivateEndpoint": { + "type": "boolean", + "enum": [ + true, + false + ] + } + }, + "required": [ + "enabled", + "skuName", + "skuTier", + "enablePrivateEndpoint" + ] + }, + { + "type": "object", + "additionalProperties": true, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "App Service Linux Container" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/automation.json b/schemas/v0.6.0/landingzones/types/automation.json new file mode 100644 index 00000000..89515791 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/automation.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "Automation": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "Automation" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Value" + } + } +} diff --git a/schemas/v0.6.0/landingzones/types/backupRecoveryVault.json b/schemas/v0.6.0/landingzones/types/backupRecoveryVault.json new file mode 100644 index 00000000..d7c507f0 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/backupRecoveryVault.json @@ -0,0 +1,53 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "RecoveryVault": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "name": { + "type": "string" + } + }, + "required": [ + "enabled", + "name" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "RecoveryVault" + } + } + } \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/hubNetwork.json b/schemas/v0.6.0/landingzones/types/hubNetwork.json new file mode 100644 index 00000000..9d882724 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/hubNetwork.json @@ -0,0 +1,93 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "HubNetworkWithoutPrivateDNS": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/ValueWithoutPrivateDNS" + } + }, + "required": [ + "value" + ], + "title": "HubNetworkWithoutPrivateDNS" + }, + "HubNetworkWithPrivateDNS": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/ValueWithPrivateDNS" + } + }, + "required": [ + "value" + ], + "title": "HubNetworkWithPrivateDNS" + }, + "ValueWithoutPrivateDNS": { + "type": "object", + "additionalProperties": false, + "properties": { + "virtualNetworkId": { + "type": "string" + }, + "rfc1918IPRange": { + "type": "string" + }, + "rfc6598IPRange": { + "type": "string" + }, + "egressVirtualApplianceIp": { + "type": "string" + } + }, + "required": [ + "egressVirtualApplianceIp", + "rfc1918IPRange", + "rfc6598IPRange", + "virtualNetworkId" + ], + "title": "ValueWithoutPrivateDNS" + }, + "ValueWithPrivateDNS": { + "type": "object", + "additionalProperties": false, + "properties": { + "virtualNetworkId": { + "type": "string" + }, + "rfc1918IPRange": { + "type": "string" + }, + "rfc6598IPRange": { + "type": "string" + }, + "egressVirtualApplianceIp": { + "type": "string" + }, + "privateDnsManagedByHub": { + "type": "boolean" + }, + "privateDnsManagedByHubSubscriptionId": { + "type": "string" + }, + "privateDnsManagedByHubResourceGroupName": { + "type": "string" + } + }, + "required": [ + "egressVirtualApplianceIp", + "rfc1918IPRange", + "rfc6598IPRange", + "virtualNetworkId", + "privateDnsManagedByHub", + "privateDnsManagedByHubResourceGroupName", + "privateDnsManagedByHubSubscriptionId" + ], + "title": "ValueWithoutPrivateDNS" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/keyVault.json b/schemas/v0.6.0/landingzones/types/keyVault.json new file mode 100644 index 00000000..e771589a --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/keyVault.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "KeyVault": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "KeyVault" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "secretExpiryInDays": { + "type": "integer" + } + }, + "required": [ + "secretExpiryInDays" + ], + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/location.json b/schemas/v0.6.0/landingzones/types/location.json new file mode 100644 index 00000000..1e17aad8 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/location.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ], + "title": "Location" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/logAnalyticsWorkspaceId.json b/schemas/v0.6.0/landingzones/types/logAnalyticsWorkspaceId.json new file mode 100644 index 00000000..feba5015 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/logAnalyticsWorkspaceId.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "LogAnalyticsWorkspaceId": { + "type": "object", + "additionalProperties": false, + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + }, + "title": "LogAnalyticsWorkspaceId" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/resourceTags.json b/schemas/v0.6.0/landingzones/types/resourceTags.json new file mode 100644 index 00000000..5d6bd73f --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/resourceTags.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "ResourceTags": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "ResourceTags" + }, + "Value": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Key/Value pairs of tags" + }, + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/securityCenter.json b/schemas/v0.6.0/landingzones/types/securityCenter.json new file mode 100644 index 00000000..66ceed6e --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/securityCenter.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SecurityCenter": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "SecurityCenter" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "email": { + "type": "string" + }, + "phone": { + "type": "string" + } + }, + "required": [ + "email", + "phone" + ], + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/serviceHealthAlerts.json b/schemas/v0.6.0/landingzones/types/serviceHealthAlerts.json new file mode 100644 index 00000000..0bb153df --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/serviceHealthAlerts.json @@ -0,0 +1,120 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "ServiceHealthAlerts": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "ServiceHealthAlerts" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "resourceGroupName": { + "type": "string" + }, + "incidentTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "regions": { + "type": "array", + "items": { + "type": "string" + } + }, + "receivers": { + "$ref": "#/definitions/Receivers" + }, + "actionGroupName": { + "type": "string" + }, + "actionGroupShortName": { + "type": "string" + }, + "alertRuleName": { + "type": "string" + }, + "alertRuleDescription": { + "type": "string" + } + }, + "required": [ + "actionGroupName", + "actionGroupShortName", + "alertRuleDescription", + "alertRuleName", + "incidentTypes", + "receivers", + "regions", + "resourceGroupName" + ], + "title": "Value" + }, + "Receivers": { + "type": "object", + "additionalProperties": false, + "properties": { + "app": { + "type": "array", + "items": { + "type": "string" + } + }, + "email": { + "type": "array", + "items": { + "type": "string" + } + }, + "sms": { + "type": "array", + "items": { + "$ref": "#/definitions/phone" + } + }, + "voice": { + "type": "array", + "items": { + "$ref": "#/definitions/phone" + } + } + }, + "required": [ + "app", + "email", + "sms", + "voice" + ], + "title": "Receivers" + }, + "phone": { + "type": "object", + "additionalProperties": false, + "properties": { + "countryCode": { + "type": "string", + "format": "integer" + }, + "phoneNumber": { + "type": "string" + } + }, + "required": [ + "countryCode", + "phoneNumber" + ], + "title": "phone" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/sqldb.json b/schemas/v0.6.0/landingzones/types/sqldb.json new file mode 100644 index 00000000..a774c92a --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/sqldb.json @@ -0,0 +1,143 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SQLDB": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "sqlAuthenticationUsername": { + "type": "string" + }, + "aadAuthenticationOnly":{ + "type":"boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled", + "sqlAuthenticationUsername", + "aadAuthenticationOnly" + ] + }, + { + "type":"object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "aadAuthenticationOnly":{ + "type":"boolean", + "enum": [ + false + ] + }, + "sqlAuthenticationUsername": { + "type": "string" + }, + "aadLoginName":{ + "type":"string" + }, + "aadLoginObjectID":{ + "type":"string" + }, + "aadLoginType":{ + "type":"string", + "enum": [ + "User", + "Group", + "Application" + ] + } + }, + "required": [ + "enabled", + "aadAuthenticationOnly", + "aadLoginName", + "aadLoginObjectID", + "aadLoginType", + "sqlAuthenticationUsername" + ] + }, + { + "type":"object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "aadAuthenticationOnly":{ + "type":"boolean", + "enum": [ + true + ] + }, + "aadLoginName":{ + "type":"string" + }, + "aadLoginObjectID":{ + "type":"string" + }, + "aadLoginType":{ + "type":"string", + "enum": [ + "User", + "Group", + "Application" + ] + } + }, + "required": [ + "enabled", + "aadAuthenticationOnly", + "aadLoginName", + "aadLoginObjectID", + "aadLoginType" + ] + } + , + { + "type": "object", + "additionalProperties": true, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "sqldb" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/sqlmi.json b/schemas/v0.6.0/landingzones/types/sqlmi.json new file mode 100644 index 00000000..06209f45 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/sqlmi.json @@ -0,0 +1,53 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SQLMI": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + true + ] + }, + "username": { + "type": "string" + } + }, + "required": [ + "enabled", + "username" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "enabled" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "Sqlmi" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/subscriptionBudget.json b/schemas/v0.6.0/landingzones/types/subscriptionBudget.json new file mode 100644 index 00000000..c65c4164 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/subscriptionBudget.json @@ -0,0 +1,68 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SubscriptionBudget": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "createBudget": { + "type": "boolean", + "enum": [ + true + ] + }, + "name": { + "type": "string" + }, + "amount": { + "type": "integer" + }, + "timeGrain": { + "type": "string" + }, + "contactEmails": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "createBudget", + "amount", + "contactEmails", + "name", + "timeGrain" + ] + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "createBudget": { + "type": "boolean", + "enum": [ + false + ] + } + }, + "required": [ + "createBudget" + ] + } + ] + } + }, + "required": [ + "value" + ], + "title": "SubscriptionBudget" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/subscriptionRoleAssignments.json b/schemas/v0.6.0/landingzones/types/subscriptionRoleAssignments.json new file mode 100644 index 00000000..137f9a86 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/subscriptionRoleAssignments.json @@ -0,0 +1,47 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SubscriptionRoleAssignments": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + } + }, + "required": [ + "value" + ], + "title": "SubscriptionRoleAssignments" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "roleDefinitionId": { + "type": "string", + "format": "uuid" + }, + "securityGroupObjectIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "comments", + "roleDefinitionId", + "securityGroupObjectIds" + ], + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/subscriptionTags.json b/schemas/v0.6.0/landingzones/types/subscriptionTags.json new file mode 100644 index 00000000..66c82144 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/subscriptionTags.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "SubscriptionTags": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "SubscriptionTags" + }, + "Value": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Key/Value pairs of tags" + }, + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/landingzones/types/synapse.json b/schemas/v0.6.0/landingzones/types/synapse.json new file mode 100644 index 00000000..49a0a237 --- /dev/null +++ b/schemas/v0.6.0/landingzones/types/synapse.json @@ -0,0 +1,84 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "Synapse": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/valuedef" + } + }, + "required": [ + "value" + ], + "title": "Synapse" + }, + "valuedef": { + "type": "object", + "properties": { + "value": { + "oneOf": [ + { + "aadAuthenticationOnly": { + "type": "boolean", + "enum": [ + true + ] + }, + "sqlAuthenticationUsername": { + "type": "string" + }, + "aadLoginName": { + "type": "string" + }, + "aadLoginObjectID": { + "type": "string" + }, + "aadLoginType": { + "type": "string", + "enum": [ + "User", + "Group", + "Application" + ] + }, + "required": [ + "aadAuthenticationOnly", + "aadLoginName", + "aadLoginObjectID", + "aadLoginType" + ] + }, + { + "aadAuthenticationOnly": { + "type": "boolean", + "enum": [ + false + ] + }, + "sqlAuthenticationUsername": { + "type": "string" + }, + "aadLoginObjectID": { + "type": "string" + }, + "aadLoginType": { + "type": "string", + "enum": [ + "User", + "Group", + "Application" + ] + }, + "required": [ + "aadAuthenticationOnly", + "sqlAuthenticationUsername" + ] + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/schemas/v0.6.0/readme.md b/schemas/v0.6.0/readme.md new file mode 100644 index 00000000..f7e9315f --- /dev/null +++ b/schemas/v0.6.0/readme.md @@ -0,0 +1,1143 @@ +# Schema Change History + +## Landing Zone Schemas + +### August 10, 2022 + +* [Schema definition update for Logging](../../docs/archetypes/logging.md) + +
+ Expand/collapse + + ```json + "dataCollectionRule": { + "value": { + "enabled": true, + "name": "DCR-AzureMonitorLogs", + "windowsEventLogs": [ + { + "streams": [ + "Microsoft-Event" + ], + "xPathQueries": [ + "Application!*[System[(Level=1 or Level=2 or Level=3)]]", + "Security!*[System[(band(Keywords,13510798882111488))]]", + "System!*[System[(Level=1 or Level=2 or Level=3)]]" + ], + "name": "eventLogsDataSource" + } + ], + "syslog": [ + { + "streams": [ + "Microsoft-Syslog" + ], + "facilityNames": [ + "auth", + "authpriv", + "cron", + "daemon", + "mark", + "kern", + "local0", + "local1", + "local2", + "local3", + "local4", + "local5", + "local6", + "local7", + "lpr", + "mail", + "news", + "syslog", + "user", + "uucp" + ], + "logLevels": [ + "Debug", + "Info", + "Notice", + "Warning", + "Error", + "Critical", + "Alert", + "Emergency" + ], + "name": "sysLogsDataSource" + } + ] + } + } + ``` +
+### April 25, 2022 + +* [Schema definition update for Hub Networking with Azure Firewall](../../docs/archetypes/hubnetwork-azfw.md) + +
+ Expand/collapse + + ```json + { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "serviceHealthAlerts": { + "value": { + "resourceGroupName": "pubsec-service-health", + "incidentTypes": [ + "Incident", + "Security" + ], + "regions": [ + "Global", + "Canada East", + "Canada Central" + ], + "receivers": { + "app": [ + "alzcanadapubsec@microsoft.com" + ], + "email": [ + "alzcanadapubsec@microsoft.com" + ], + "sms": [ + { + "countryCode": "1", + "phoneNumber": "5555555555" + } + ], + "voice": [ + { + "countryCode": "1", + "phoneNumber": "5555555555" + } + ] + }, + "actionGroupName": "ALZ action group", + "actionGroupShortName": "alz-alert", + "alertRuleName": "ALZ alert rule", + "alertRuleDescription": "Alert rule for Azure Landing Zone" + } + }, + "securityCenter": { + "value": { + "email": "alzcanadapubsec@microsoft.com", + "phone": "5555555555" + } + }, + "subscriptionRoleAssignments": { + "value": [ + { + "comments": "Built-in Contributor Role", + "roleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c", + "securityGroupObjectIds": [ + "38f33f7e-a471-4630-8ce9-c6653495a2ee" + ] + } + ] + }, + "subscriptionBudget": { + "value": { + "createBudget": false + } + }, + "subscriptionTags": { + "value": { + "ISSO": "isso-tbd" + } + }, + "resourceTags": { + "value": { + "ClientOrganization": "client-organization-tag", + "CostCenter": "cost-center-tag", + "DataSensitivity": "data-sensitivity-tag", + "ProjectContact": "project-contact-tag", + "ProjectName": "project-name-tag", + "TechnicalContact": "technical-contact-tag" + } + }, + "privateDnsZones": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-dns" + } + }, + "ddosStandard": { + "value": { + "enabled": false, + "resourceGroupName": "pubsec-ddos", + "planName": "ddos-plan" + } + }, + "publicAccessZone": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-public-access-zone" + } + }, + "managementRestrictedZone": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-management-restricted-zone", + "network": { + "name": "management-restricted-vnet", + "addressPrefixes": ["10.18.4.0/22"], + "subnets": [ + { + "comments": "Management (Access Zone) Subnet", + "name": "MazSubnet", + "addressPrefix": "10.18.4.0/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Infrastructure Services (Restricted Zone) Subnet", + "name": "InfSubnet", + "addressPrefix": "10.18.4.128/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Security Services (Restricted Zone) Subnet", + "name": "SecSubnet", + "addressPrefix": "10.18.5.0/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Logging Services (Restricted Zone) Subnet", + "name": "LogSubnet", + "addressPrefix": "10.18.5.64/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Core Management Interfaces (Restricted Zone) Subnet", + "name": "MgmtSubnet", + "addressPrefix": "10.18.5.128/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + } + ] + } + } + }, + "hub": { + "value": { + "resourceGroupName": "pubsec-hub-networking", + "bastion": { + "enabled": true, + "name": "bastion", + "sku": "Standard", + "scaleUnits": 2 + }, + "azureFirewall": { + "name": "pubsecAzureFirewall", + "availabilityZones": ["1", "2", "3"], + "forcedTunnelingEnabled": false, + "forcedTunnelingNextHop": "10.17.1.4" + }, + "network": { + "name": "hub-vnet", + "addressPrefixes": [ + "10.18.0.0/22", + "100.60.0.0/16" + ], + "addressPrefixBastion": "192.168.0.0/16", + "subnets": { + "gateway": { + "comments": "Gateway Subnet used for VPN and/or Express Route connectivity", + "name": "GatewaySubnet", + "addressPrefix": "10.18.0.0/27" + }, + "firewall": { + "comments": "Azure Firewall", + "name": "AzureFirewallSubnet", + "addressPrefix": "10.18.1.0/24" + }, + "firewallManagement": { + "comments": "Azure Firewall Management", + "name": "AzureFirewallManagementSubnet", + "addressPrefix": "10.18.2.0/26" + }, + "bastion": { + "comments": "Azure Bastion", + "name": "AzureBastionSubnet", + "addressPrefix": "192.168.0.0/24" + }, + "publicAccess": { + "comments": "Public Access Zone (Application Gateway)", + "name": "PAZSubnet", + "addressPrefix": "100.60.1.0/24" + }, + "optional": [] + } + } + } + }, + "networkWatcher": { + "value": { + "resourceGroupName": "NetworkWatcherRG" + } + } + } + } + ``` + +
+ +* [Schema definition update for Hub Networking with Network Virtual Appliances (NVA)](../../docs/archetypes/hubnetwork-nva-fortigate.md) + +
+ Expand/collapse + + ```json + { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "serviceHealthAlerts": { + "value": { + "resourceGroupName": "pubsec-service-health", + "incidentTypes": [ + "Incident", + "Security" + ], + "regions": [ + "Global", + "Canada East", + "Canada Central" + ], + "receivers": { + "app": [ + "alzcanadapubsec@microsoft.com" + ], + "email": [ + "alzcanadapubsec@microsoft.com" + ], + "sms": [ + { + "countryCode": "1", + "phoneNumber": "5555555555" + } + ], + "voice": [ + { + "countryCode": "1", + "phoneNumber": "5555555555" + } + ] + }, + "actionGroupName": "ALZ action group", + "actionGroupShortName": "alz-alert", + "alertRuleName": "ALZ alert rule", + "alertRuleDescription": "Alert rule for Azure Landing Zone" + } + }, + "securityCenter": { + "value": { + "email": "alzcanadapubsec@microsoft.com", + "phone": "5555555555" + } + }, + "subscriptionRoleAssignments": { + "value": [ + { + "comments": "Built-in Contributor Role", + "roleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c", + "securityGroupObjectIds": [ + "38f33f7e-a471-4630-8ce9-c6653495a2ee" + ] + } + ] + }, + "subscriptionBudget": { + "value": { + "createBudget": false + } + }, + "subscriptionTags": { + "value": { + "ISSO": "isso-tbd" + } + }, + "resourceTags": { + "value": { + "ClientOrganization": "client-organization-tag", + "CostCenter": "cost-center-tag", + "DataSensitivity": "data-sensitivity-tag", + "ProjectContact": "project-contact-tag", + "ProjectName": "project-name-tag", + "TechnicalContact": "technical-contact-tag" + } + }, + "privateDnsZones": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-dns" + } + }, + "ddosStandard": { + "value": { + "enabled": false, + "resourceGroupName": "pubsec-ddos", + "planName": "ddos-plan" + } + }, + "publicAccessZone": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-public-access-zone" + } + }, + "managementRestrictedZone": { + "value": { + "enabled": true, + "resourceGroupName": "pubsec-management-restricted-zone", + "network": { + "name": "management-restricted-vnet", + "addressPrefixes": ["10.18.4.0/22"], + "subnets": [ + { + "comments": "Management (Access Zone) Subnet", + "name": "MazSubnet", + "addressPrefix": "10.18.4.0/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Infrastructure Services (Restricted Zone) Subnet", + "name": "InfSubnet", + "addressPrefix": "10.18.4.128/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Security Services (Restricted Zone) Subnet", + "name": "SecSubnet", + "addressPrefix": "10.18.5.0/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Logging Services (Restricted Zone) Subnet", + "name": "LogSubnet", + "addressPrefix": "10.18.5.64/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Core Management Interfaces (Restricted Zone) Subnet", + "name": "MgmtSubnet", + "addressPrefix": "10.18.5.128/26", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + } + ] + } + } + }, + "hub": { + "value": { + "resourceGroupName": "pubsec-hub-networking", + "bastion": { + "enabled": true, + "name": "bastion", + "sku": "Standard", + "scaleUnits": 2 + }, + "network": { + "name": "hub-vnet", + "addressPrefixes": [ + "10.18.0.0/22", + "100.60.0.0/16" + ], + "addressPrefixBastion": "192.168.0.0/16", + "subnets": { + "gateway": { + "comments": "Gateway Subnet used for VPN and/or Express Route connectivity", + "name": "GatewaySubnet", + "addressPrefix": "10.18.1.0/27" + }, + "bastion": { + "comments": "Azure Bastion", + "name": "AzureBastionSubnet", + "addressPrefix": "192.168.0.0/24" + }, + "public": { + "comments": "Public Subnet Name (External Facing (Internet/Ground))", + "name": "PublicSubnet", + "addressPrefix": "100.60.0.0/24" + }, + "publicAccessZone": { + "comments": "Public Access Zone (i.e. Application Gateway)", + "name": "PAZSubnet", + "addressPrefix": "100.60.1.0/24" + }, + "externalAccessNetwork": { + "comments": "External Access Network", + "name": "EanSubnet", + "addressPrefix": "10.18.0.0/27" + }, + "nonProductionInternal": { + "comments": "Non-production Internal for firewall appliances (Internal Facing Non-Production Traffic)", + "name": "DevIntSubnet", + "addressPrefix": "10.18.0.64/27" + }, + "productionInternal": { + "comments": "Production Internal for firewall appliances (Internal Facing Production Traffic)", + "name": "PrdIntSubnet", + "addressPrefix": "10.18.0.32/27" + }, + "managementRestrictedZoneInternal": { + "comments": "Management Restricted Zone", + "name": "MrzSubnet", + "addressPrefix": "10.18.0.96/27" + }, + "highAvailability": { + "comments": "High Availability (Firewall to Firewall heartbeat)", + "name": "HASubnet", + "addressPrefix": "10.18.0.128/28" + }, + "optional": [] + } + }, + "nvaFirewall": { + "image": { + "publisher": "fortinet", + "offer": "fortinet_fortigate-vm_v5", + "sku": "fortinet_fg-vm", + "version": "6.4.5", + "plan": "fortinet_fg-vm" + }, + "nonProduction": { + "internalLoadBalancer": { + "name": "pubsecDevFWILB", + "tcpProbe": { + "name": "lbprobe", + "port": 8008, + "intervalInSeconds": 5, + "numberOfProbes": 2 + }, + "internalIp": "10.18.0.68", + "externalIp": "100.60.0.7" + }, + "deployVirtualMachines": true, + "virtualMachines": [ + { + "name": "pubsecDevFW1", + "vmSku": "Standard_D8s_v4", + "internalIp": "10.18.0.69", + "externalIp": "100.60.0.8", + "mrzInternalIp": "10.18.0.104", + "highAvailabilityIp": "10.18.0.134", + "availabilityZone": "2" + }, + { + "name": "pubsecDevFW2", + "vmSku": "Standard_D8s_v4", + "internalIp": "10.18.0.70", + "externalIp": "100.60.0.9", + "mrzInternalIp": "10.18.0.105", + "highAvailabilityIp": "10.18.0.135", + "availabilityZone": "3" + } + ] + }, + "production": { + "internalLoadBalancer": { + "name": "pubsecProdFWILB", + "tcpProbe": { + "name": "lbprobe", + "port": 8008, + "intervalInSeconds": 5, + "numberOfProbes": 2 + }, + "internalIp": "10.18.0.36", + "externalIp": "100.60.0.4" + }, + "deployVirtualMachines": true, + "virtualMachines": [ + { + "name": "pubsecProdFW1", + "vmSku": "Standard_F8s_v2", + "internalIp": "10.18.0.37", + "externalIp": "100.60.0.5", + "mrzInternalIp": "10.18.0.101", + "highAvailabilityIp": "10.18.0.132", + "availabilityZone": "1" + }, + { + "name": "pubsecProdFW2", + "vmSku": "Standard_F8s_v2", + "internalIp": "10.18.0.38", + "externalIp": "100.60.0.6", + "mrzInternalIp": "10.18.0.102", + "highAvailabilityIp": "10.18.0.133", + "availabilityZone": "2" + } + ] + } + } + } + }, + "networkWatcher": { + "value": { + "resourceGroupName": "NetworkWatcherRG" + } + } + } + } + ``` + +
+ +### April 21, 2022 + +* Schema definition update for Machine Learning & Healthcare archetypes. Expanded the spoke network subnet configuration to contain 0 or more optional subnets. This change enables network configuration to be more flexible. + + * Machine Learning archetype network configuration with optional subnets + +
+ Expand/collapse + + ```json + "network": { + "value": { + "peerToHubVirtualNetwork": true, + "useRemoteGateway": false, + "name": "azmlsqlauth2022Q1vnet", + "dnsServers": [ + "10.18.1.4" + ], + "addressPrefixes": [ + "10.6.0.0/16" + ], + "subnets": { + "sqlmi": { + "comments": "SQL Managed Instances Delegated Subnet", + "name": "sqlmi", + "addressPrefix": "10.6.5.0/25" + }, + "databricksPublic": { + "comments": "Databricks Public Delegated Subnet", + "name": "databrickspublic", + "addressPrefix": "10.6.6.0/25" + }, + "databricksPrivate": { + "comments": "Databricks Private Delegated Subnet", + "name": "databricksprivate", + "addressPrefix": "10.6.7.0/25" + }, + "privateEndpoints": { + "comments": "Private Endpoints Subnet", + "name": "privateendpoints", + "addressPrefix": "10.6.8.0/25" + }, + "aks": { + "comments": "AKS Subnet", + "name": "aks", + "addressPrefix": "10.6.9.0/25" + }, + "appService": { + "comments": "App Service Subnet", + "name": "appService", + "addressPrefix": "10.6.10.0/25" + }, + "optional": [ + { + "comments": "Optional Subnet 1", + "name": "virtualMachines", + "addressPrefix": "10.6.11.0/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Optional Subnet 2 with delegation for NetApp Volumes", + "name": "NetappVolumes", + "addressPrefix": "10.6.12.0/25", + "nsg": { + "enabled": false + }, + "udr": { + "enabled": false + }, + "delegations": { + "serviceName": "Microsoft.NetApp/volumes" + } + } + ] + } + } + } + ``` + +
+ + * Healthcare archetype network configuration with optional subnets + +
+ Expand/collapse + + ```json + "network": { + "value": { + "peerToHubVirtualNetwork": true, + "useRemoteGateway": false, + "name": "health2022Q1vnet", + "dnsServers": [ + "10.18.1.4" + ], + "addressPrefixes": [ + "10.5.0.0/16" + ], + "subnets": { + "databricksPublic": { + "comments": "Databricks Public Delegated Subnet", + "name": "databrickspublic", + "addressPrefix": "10.5.5.0/25" + }, + "databricksPrivate": { + "comments": "Databricks Private Delegated Subnet", + "name": "databricksprivate", + "addressPrefix": "10.5.6.0/25" + }, + "privateEndpoints": { + "comments": "Private Endpoints Subnet", + "name": "privateendpoints", + "addressPrefix": "10.5.7.0/25" + }, + "web": { + "comments": "Azure Web App Delegated Subnet", + "name": "webapp", + "addressPrefix": "10.5.8.0/25" + }, + "optional": [ + { + "comments": "Optional Subnet 1", + "name": "virtualMachines", + "addressPrefix": "10.5.9.0/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Optional Subnet 2 with delegation for NetApp Volumes", + "name": "NetappVolumes", + "addressPrefix": "10.5.10.0/25", + "nsg": { + "enabled": false + }, + "udr": { + "enabled": false + }, + "delegations": { + "serviceName": "Microsoft.NetApp/volumes" + } + } + ] + } + } + } + ``` + +
+ +### April 20, 2022 + +* Schema definition update for Generic Subscription. Spoke network's subnet configuration is now defined as an array. The array can have 0 to many subnet definitions. + +* Removed 4 subnets from Machine Learning archetype's virtual network: `oz`, `paz`, `rz` and `hrz`. + +* Removed 4 subnets from Healthcare archetype's virtual network: `oz`, `paz`, `rz` and `hrz`. + +* Schema definition for Hub Networking archetypes (Azure Firewall & NVA). See documentation: + + * [Hub Networking with Azure Firewall](../../docs/archetypes/hubnetwork-azfw.md) + * [Hub Networking with Network Virtual Appliance (e.g. Fortigate Firewalls)](../../docs/archetypes/hubnetwork-nva-fortigate.md) + +### April 18, 2022 + +Change in `synapse` schema object to support Azure AD authentication. + +| Setting | Type | Description | +| ------- | ---- | ----------- | +| aadAuthenticationOnly | Boolean | Indicate that either AAD auth only or both AAD & SQL auth (required) | +| sqlAuthenticationUsername | String | The SQL authentication user name optional, required when `aadAuthenticationOnly` is false | +| aadLoginName | String | The name of the login or group in the format of first-name last-name | +| aadLoginObjectID | String | The object id of the Azure AD object whether it's a login or a group | +| aadLoginType | String | Represent the type of the object, it can be **User**, **Group** or **Application** (in case of service principal) | + +**Examples** + +SQL authentication only | Json (used in parameter files) + +```json +"synapse": { + "value": { + "aadAuthenticationOnly": false, + "sqlAuthenticationUsername": "azadmin" + } +``` + +SQL authentication only | bicep (used when calling bicep module from another) + +```bicep +{ + aadAuthenticationOnly: false + sqlAuthenticationUsername: 'azadmin' +} +``` + +Azure AD authentication only | Json (used in parameters files) + +```json + "synapse": { + "value": { + "aadAuthenticationOnly": true, + "aadLoginName": "az.admins", + "aadLoginObjectID": "e0357d81-55d8-44e9-9d9c-ab09dc710785", + "aadLoginType":"Group" + } +``` + +Azure AD authentication only | bicep (used when calling bicep module from another) + +```bicep +{ + aadAuthenticationOnly: true + aadLoginName:'John Smith', + aadLoginObjectID:'88888-888888-888888-888888', + aadLoginType:'User' +} +``` + +Mixed authentication | Json (used in parameters files) + +```json + "synapse": { + "value": { + "aadAuthenticationOnly": false, + "sqlAuthenticationUsername": "azadmin", + "aadLoginName": "az.admins", + "aadLoginObjectID": "e0357d81-55d8-44e9-9d9c-ab09dc710785", + "aadLoginType":"Group" + } + ``` + + Mixed authentication | bicep (used when calling bicep module from another) + +```bicep + { + aadAuthenticationOnly: false + sqlAuthenticationUsername: 'azadmin' + aadLoginName:'John Smith', + aadLoginObjectID:'88888-888888-888888-888888', + aadLoginType:'User' + } +``` + +### April 7, 2022 + +Schema definition for Logging archetype. See [documentation](../../docs/archetypes/logging.md). + +### April 6, 2022 + +Added `logAnalyticsWorkspaceResourceId` to archetypes. This is an optional parameter in the JSON file as it can be set at runtime. + +**Example** + +```json + "logAnalyticsWorkspaceResourceId": { + "value": "LOG_ANALYTICS_WORKSPACE_RESOURCE_ID" + } +``` + +### February 14, 2022 + +Added location schema object. This is an optional setting for archetypes. This setting will default to `deployment().location`. + +**Example** + +```json + "location": { + "value": "canadacentral" + } +``` + +### January 16, 2021 +Changed `appServiceLinuxContainer` schema object to support optional inbound private endpoint. + +**Example** +```json +"appServiceLinuxContainer": { + "value": { + "enablePrivateEndpoint": true + } +} +``` + +### December 30, 2021 + +Changed `aks` schema object to support optional deployment of AKS using the `enabled` key as a required field. + +**Example** +```json +"aks": { + "value": { + "enabled": true + } +} +``` + +Added `appServiceLinuxContainer` schema object to support optional deployment of App Service (for model deployments) using the `enabled` key as a required field. Sku name and tier are also required fields. + +**Example** +```json +"appServiceLinuxContainer": { + "value": { + "enabled": true, + "skuName": "P1V2", + "skuTier": "Premium" + } +} +``` + +Added required `appService` subnet as well as the `appServiceLinuxContainer` object in machine learning schema json file. + + +### November 27, 2021 + +Change in `aks` schema object to support Options for the creation of AKS Cluster with one of the following three scenarios: + +* Network Plugin: Kubenet + Network Policy: Calico (Network Policy) +* Network Plugin: Azure CNI + Network Policy: Calico (Network Policy) +* Network Plugin: Azure CNI + Network Policy: Azure (Network Policy). + +| Setting | Type | Description | +| ------- | ---- | ----------- | +| version | String | Kubernetes version to use for the AKS Cluster (required) | +| networkPlugin | String | Network Plugin to use: `kubenet` (for Kubenet) **or** `azure` (for Azure CNI) (required) | +| networkPolicy | String | Network Policy to use: `calico` (for Calico); which can be used with either **kubenet** or **Azure** Network Plugins **or** `azure` (for Azure NP); which can only be used with **Azure CNI** | + +**Note** + +`podCidr` value shoud be set to ( **''** ) when Azure CNI is used + +**Examples** + +* Network Plugin: Kubenet + Network Policy: Calico (Network Policy) + +```json +"aks": { + "value": { + "version": "1.21.2", + "networkPlugin": "kubenet" , + "networkPolicy": "calico", + "podCidr": "11.0.0.0/16", + "serviceCidr": "20.0.0.0/16" , + "dnsServiceIP": "20.0.0.10", + "dockerBridgeCidr": "30.0.0.1/16" + } +} +``` + +* Network Plugin: Azure CNI + Network Policy: Calico (Network Policy) + +```json +"aks": { + "value": { + "version": "1.21.2", + "networkPlugin": "azure" , + "networkPolicy": "calico", + "podCidr": "", + "serviceCidr": "20.0.0.0/16" , + "dnsServiceIP": "20.0.0.10", + "dockerBridgeCidr": "30.0.0.1/16" + } +} +``` + +* Network Plugin: Azure CNI + Network Policy: Azure (Network Policy). + +```json +"aks": { + "value": { + "version": "1.21.2", + "networkPlugin": "azure" , + "networkPolicy": "azure", + "podCidr": "", + "serviceCidr": "20.0.0.0/16" , + "dnsServiceIP": "20.0.0.10", + "dockerBridgeCidr": "30.0.0.1/16" + } +} +``` +### November 26, 2021 + +Added Azure Recovery Vault schema to enable the creation of a Recovery Vault in the generic Archtetype subscription +| Setting | Type | Description | +| ------- | ---- | ----------- | +| enabled | Boolean | Indicate whether or not to deploy Azure Recovery Vault (required) | +| name | String | The name of the Recovery Vault | + + +**Examples** + +Enable recovery vault | Json (used in parameter files) +```json + "backupRecoveryVault":{ + "value": { + "enabled":true, + "name":"bkupvault" + } + } +``` + +### November 25, 2021 + +* Remove `uuid` format check on `privateDnsManagedByHubSubscriptionId` for type `schemas/latest/landingzones/types/hubNetwork.json` + +### November 23, 2021 + +Change in `sqldb` schema object to support Azure AD authentication. + +| Setting | Type | Description | +| ------- | ---- | ----------- | +| enabled | Boolean | Indicate whether or not to deploy Azure SQL Database (required) | +| aadAuthenticationOnly | Boolean | Indicate that either AAD auth only or both AAD & SQL auth (required) | +| sqlAuthenticationUsername | String | The SQL authentication user name optional, required when `aadAuthenticationOnly` is false | +| aadLoginName | String | The name of the login or group in the format of first-name last-name | +| aadLoginObjectID | String | The object id of the Azure AD object whether it's a login or a group | +| aadLoginType | String | Represent the type of the object, it can be **User**, **Group** or **Application** (in case of service principal) | + +**Examples** + +SQL authentication only | Json (used in parameter files) + +```json +"sqldb": { + "value": { + "aadAuthenticationOnly":false, + "enabled": true, + "sqlAuthenticationUsername": "azadmin" + } +} +``` + +SQL authentication only | bicep (used when calling bicep module from another) + +```bicep +{ + enabled: true + aadAuthenticationOnly: false + sqlAuthenticationUsername: 'azadmin' +} +``` + +Azure AD authentication only | Json (used in parameters files) + +```json +"sqldb": { + "value": { + "enabled":true, + "aadAuthenticationOnly":true, + "aadLoginName":"John Smith", + "aadLoginObjectID":"88888-888888-888888-888888", + "aadLoginType":"User" + } +} +``` + +Azure AD authentication only | bicep (used when calling bicep module from another) + +```bicep +{ + enabled: true + aadAuthenticationOnly: true + aadLoginName:'John Smith', + aadLoginObjectID:'88888-888888-888888-888888', + aadLoginType:'User' +} +``` + +Mixed authentication | Json (used in parameters files) + +```json + "sqldb": { + "value": { + "enabled":true, + "aadAuthenticationOnly":false, + "sqlAuthenticationUsername": "azadmin", + "aadLoginName":"John Smith", + "aadLoginObjectID":"88888-888888-888888-888888", + "aadLoginType":"User" + } + } + ``` + + Mixed authentication | bicep (used when calling bicep module from another) + +```bicep + { + enabled: true + aadAuthenticationOnly: false + sqlAuthenticationUsername: 'azadmin' + aadLoginName:'John Smith', + aadLoginObjectID:'88888-888888-888888-888888', + aadLoginType:'User' + } +``` + +### November 12, 2021 + +* Initial version based on v0.1.0 of the schema definitions. diff --git a/tests/schemas/lz-healthcare/Synapse-sqlAuth.json b/tests/schemas/lz-healthcare/Synapse-sqlAuth.json index cbe13567..bc275f2b 100644 --- a/tests/schemas/lz-healthcare/Synapse-sqlAuth.json +++ b/tests/schemas/lz-healthcare/Synapse-sqlAuth.json @@ -96,16 +96,28 @@ "sqldb": { "value": { "enabled": true, +<<<<<<<< HEAD:tests/schemas/lz-healthcare/Synapse-sqlAuth.json "aadAuthenticationOnly": true, "aadLoginName": "DBA Group", "aadLoginObjectID": "4e4ea47c-ee21-4add-ad2f-a75d0d8014e0", "aadLoginType": "Group" +======== + "sqlAuthenticationUsername": "azadmin", + "aadAuthenticationOnly": false +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/82f7705e-3386-427b-95b7-cbed91ab29a7_healthcare_canadacentral.json } }, "synapse": { "value": { +<<<<<<<< HEAD:tests/schemas/lz-healthcare/Synapse-sqlAuth.json "aadAuthenticationOnly": false, "sqlAuthenticationUsername": "synaseAdminUser" +======== + "aadAuthenticationOnly": true, + "aadLoginName": "az.admins", + "aadLoginObjectID": "e0357d81-55d8-44e9-9d9c-ab09dc710785", + "aadLoginType": "Group" +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/82f7705e-3386-427b-95b7-cbed91ab29a7_healthcare_canadacentral.json } }, "hubNetwork": { @@ -151,7 +163,37 @@ "name": "webapp", "addressPrefix": "10.5.8.0/25" }, +<<<<<<<< HEAD:tests/schemas/lz-healthcare/Synapse-sqlAuth.json "optional": [] +======== + "optional": [ + { + "comments": "Optional Subnet 1", + "name": "virtualMachines", + "addressPrefix": "10.5.9.0/25", + "nsg": { + "enabled": true + }, + "udr": { + "enabled": true + } + }, + { + "comments": "Optional Subnet 2 with delegation for NetApp Volumes", + "name": "NetappVolumes", + "addressPrefix": "10.5.10.0/25", + "nsg": { + "enabled": false + }, + "udr": { + "enabled": false + }, + "delegations": { + "serviceName": "Microsoft.NetApp/volumes" + } + } + ] +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/82f7705e-3386-427b-95b7-cbed91ab29a7_healthcare_canadacentral.json } } } diff --git a/tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json b/tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json index 7d973272..97700f28 100644 --- a/tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json +++ b/tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json @@ -71,6 +71,7 @@ }, "resourceGroups": { "value": { +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "automation": "azml-automation", "compute": "azml-compute", "monitor": "azml-monitor", @@ -78,6 +79,15 @@ "networkWatcher": "NetworkWatcherRG", "security": "azml-security", "storage": "azml-storage" +======== + "automation": "azmlcmksqlmi-automation", + "compute": "azmlcmksqlmi-compute", + "monitor": "azmlcmksqlmi-monitor", + "networking": "azmlcmksqlmi-networking", + "networkWatcher": "NetworkWatcherRG", + "security": "azmlcmksqlmi-security", + "storage": "azmlcmksqlmi-storage" +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json } }, "useCMK": { @@ -95,11 +105,17 @@ }, "aks": { "value": { - "version": "1.21.2", + "version": "1.22.6", "enabled": true, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "networkPlugin": "azure", "networkPolicy": "azure", "podCidr": "", +======== + "networkPlugin": "kubenet", + "networkPolicy": "calico", + "podCidr": "11.0.0.0/16", +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json "serviceCidr": "20.0.0.0/16", "dnsServiceIP": "20.0.0.10", "dockerBridgeCidr": "30.0.0.1/16" @@ -110,17 +126,25 @@ "enabled": true, "skuName": "P1V2", "skuTier": "Premium", +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "enablePrivateEndpoint": false +======== + "enablePrivateEndpoint": true +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json } }, "sqldb": { "value": { "enabled": true, "sqlAuthenticationUsername": "azadmin", +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "aadAuthenticationOnly": false, "aadLoginName": "DBA Group", "aadLoginObjectID": "4e4ea47c-ee21-4add-ad2f-a75d0d8014e0", "aadLoginType": "Group" +======== + "aadAuthenticationOnly": false +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json } }, "sqlmi": { @@ -149,7 +173,11 @@ "value": { "peerToHubVirtualNetwork": true, "useRemoteGateway": false, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "name": "azml-vnet", +======== + "name": "azmlcmksqlmi-vnet", +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json "dnsServers": [ "10.18.1.4" ], @@ -185,7 +213,11 @@ "appService": { "comments": "App Service Subnet", "name": "appService", +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/AppServiceLinuxContainerPrivateEndpointIsFalse.json "addressPrefix": "10.1.10.0/25" +======== + "addressPrefix": "10.4.10.0/25" +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f459218a-e8bb-49c9-b768-ee6828a144aa_machinelearning_canadacentral.json }, "optional": [] } diff --git a/tests/schemas/lz-machinelearning/FullDeployment-With-Location.json b/tests/schemas/lz-machinelearning/FullDeployment-With-Location.json index 3b6e2524..499ba6c2 100644 --- a/tests/schemas/lz-machinelearning/FullDeployment-With-Location.json +++ b/tests/schemas/lz-machinelearning/FullDeployment-With-Location.json @@ -77,6 +77,7 @@ }, "resourceGroups": { "value": { +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-Location.json "automation": "azml-automation", "compute": "azml-compute", "monitor": "azml-monitor", @@ -84,6 +85,15 @@ "networkWatcher": "NetworkWatcherRG", "security": "azml-security", "storage": "azml-storage" +======== + "automation": "azmlcmk-automation", + "compute": "azmlcmk-compute", + "monitor": "azmlcmk-monitor", + "networking": "azmlcmk-networking", + "networkWatcher": "NetworkWatcherRG", + "security": "azmlcmk-security", + "storage": "azmlcmk-storage" +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/ec6c5689-db04-4f1e-b76d-834a51dd0e27_machinelearning_canadacentral.json } }, "useCMK": { @@ -101,7 +111,7 @@ }, "aks": { "value": { - "version": "1.21.2", + "version": "1.22.6", "enabled": true, "networkPlugin": "kubenet", "networkPolicy": "calico", @@ -122,10 +132,15 @@ "sqldb": { "value": { "enabled": true, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-Location.json "aadAuthenticationOnly": true, "aadLoginName": "DBA Group", "aadLoginObjectID": "4e4ea47c-ee21-4add-ad2f-a75d0d8014e0", "aadLoginType": "Group" +======== + "sqlAuthenticationUsername": "azadmin", + "aadAuthenticationOnly": false +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/ec6c5689-db04-4f1e-b76d-834a51dd0e27_machinelearning_canadacentral.json } }, "sqlmi": { @@ -154,7 +169,11 @@ "value": { "peerToHubVirtualNetwork": true, "useRemoteGateway": false, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-Location.json "name": "azml-vnet", +======== + "name": "azmlcmk-vnet", +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/ec6c5689-db04-4f1e-b76d-834a51dd0e27_machinelearning_canadacentral.json "dnsServers": [ "10.18.1.4" ], diff --git a/tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json b/tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json index 12b84573..d8727dbf 100644 --- a/tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json +++ b/tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json @@ -74,6 +74,7 @@ }, "resourceGroups": { "value": { +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json "automation": "azml-automation", "compute": "azml-compute", "monitor": "azml-monitor", @@ -81,6 +82,15 @@ "networkWatcher": "NetworkWatcherRG", "security": "azml-security", "storage": "azml-storage" +======== + "automation": "azmlnocmk-automation", + "compute": "azmlnocmk-compute", + "monitor": "azmlnocmk-monitor", + "networking": "azmlnocmk-networking", + "networkWatcher": "NetworkWatcherRG", + "security": "azmlnocmk-security", + "storage": "azmlnocmk-storage" +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f08c3057-1713-4a6f-b7e6-0df355b60c30_machinelearning_canadacentral.json } }, "useCMK": { @@ -98,7 +108,7 @@ }, "aks": { "value": { - "version": "1.21.2", + "version": "1.22.6", "enabled": true, "networkPlugin": "kubenet", "networkPolicy": "calico", @@ -119,10 +129,15 @@ "sqldb": { "value": { "enabled": true, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json "aadAuthenticationOnly": true, "aadLoginName": "DBA Group", "aadLoginObjectID": "4e4ea47c-ee21-4add-ad2f-a75d0d8014e0", "aadLoginType": "Group" +======== + "sqlAuthenticationUsername": "azadmin", + "aadAuthenticationOnly": false +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f08c3057-1713-4a6f-b7e6-0df355b60c30_machinelearning_canadacentral.json } }, "sqlmi": { @@ -151,7 +166,11 @@ "value": { "peerToHubVirtualNetwork": true, "useRemoteGateway": false, +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json "name": "azml-vnet", +======== + "name": "azmlnocmk-vnet", +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f08c3057-1713-4a6f-b7e6-0df355b60c30_machinelearning_canadacentral.json "dnsServers": [ "10.18.1.4" ], @@ -187,6 +206,7 @@ "appService": { "comments": "App Service Subnet", "name": "appService", +<<<<<<<< HEAD:tests/schemas/lz-machinelearning/FullDeployment-With-OptionalSubnets.json "addressPrefix": "10.1.10.0/25" }, "optional": [ @@ -216,6 +236,11 @@ } } ] +======== + "addressPrefix": "10.3.10.0/25" + }, + "optional": [] +>>>>>>>> c714e65b81d4bf5048bcf56351534a8be26c5c0c:config/subscriptions/CanadaESLZ-main/pubsec/LandingZones/DevTest/f08c3057-1713-4a6f-b7e6-0df355b60c30_machinelearning_canadacentral.json } } }