diff --git a/schemas/v0.4.0/landingzones/lz-generic-subscription.json b/schemas/v0.4.0/landingzones/lz-generic-subscription.json new file mode 100644 index 00000000..f9a28bc7 --- /dev/null +++ b/schemas/v0.4.0/landingzones/lz-generic-subscription.json @@ -0,0 +1,274 @@ +{ + "$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" + }, + "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": "object", + "additionalProperties": false, + "properties": { + "oz": { + "$ref": "#/definitions/Subnet" + }, + "paz": { + "$ref": "#/definitions/Subnet" + }, + "rz": { + "$ref": "#/definitions/Subnet" + }, + "hrz": { + "$ref": "#/definitions/Subnet" + }, + "optional": { + "type": "array", + "items": { + "$ref": "#/definitions/Subnet" + } + } + }, + "required": [ + "oz", + "paz", + "rz", + "hrz", + "optional" + ], + "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" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "nsg": { + "$ref": "#/definitions/Nsg" + }, + "udr": { + "$ref": "#/definitions/Nsg" + }, + "delegations": { + "$ref": "#/definitions/Delegations" + } + }, + "required": [ + "addressPrefix", + "comments", + "name", + "nsg", + "udr" + ], + "title": "subnet" + } + } +} \ No newline at end of file diff --git a/schemas/v0.4.0/landingzones/lz-healthcare.json b/schemas/v0.4.0/landingzones/lz-healthcare.json new file mode 100644 index 00000000..f1d74ab3 --- /dev/null +++ b/schemas/v0.4.0/landingzones/lz-healthcare.json @@ -0,0 +1,277 @@ +{ + "$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" + }, + "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": { + "oz": { + "$ref": "#/definitions/Subnet" + }, + "paz": { + "$ref": "#/definitions/Subnet" + }, + "rz": { + "$ref": "#/definitions/Subnet" + }, + "hrz": { + "$ref": "#/definitions/Subnet" + }, + "databricksPublic": { + "$ref": "#/definitions/Subnet" + }, + "databricksPrivate": { + "$ref": "#/definitions/Subnet" + }, + "privateEndpoints": { + "$ref": "#/definitions/Subnet" + }, + "web": { + "$ref": "#/definitions/Subnet" + } + }, + "required": [ + "oz", + "paz", + "rz", + "hrz", + "databricksPublic", + "databricksPrivate", + "privateEndpoints", + "web" + ], + "title": "Subnets" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "addressPrefix", + "comments", + "name" + ], + "title": "subnet" + } + } +} \ No newline at end of file diff --git a/schemas/v0.4.0/landingzones/lz-machinelearning.json b/schemas/v0.4.0/landingzones/lz-machinelearning.json new file mode 100644 index 00000000..c37a3f7a --- /dev/null +++ b/schemas/v0.4.0/landingzones/lz-machinelearning.json @@ -0,0 +1,298 @@ +{ + "$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" + }, + "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": { + "oz": { + "$ref": "#/definitions/Subnet" + }, + "paz": { + "$ref": "#/definitions/Subnet" + }, + "rz": { + "$ref": "#/definitions/Subnet" + }, + "hrz": { + "$ref": "#/definitions/Subnet" + }, + "sqlmi": { + "$ref": "#/definitions/Subnet" + }, + "databricksPublic": { + "$ref": "#/definitions/Subnet" + }, + "databricksPrivate": { + "$ref": "#/definitions/Subnet" + }, + "privateEndpoints": { + "$ref": "#/definitions/Subnet" + }, + "aks": { + "$ref": "#/definitions/Subnet" + }, + "appService": { + "$ref": "#/definitions/Subnet" + } + }, + "required": [ + "oz", + "paz", + "rz", + "hrz", + "sqlmi", + "databricksPublic", + "databricksPrivate", + "privateEndpoints", + "aks", + "appService" + ], + "title": "Subnets" + }, + "Subnet": { + "type": "object", + "additionalProperties": false, + "properties": { + "comments": { + "type": "string" + }, + "name": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + } + }, + "required": [ + "addressPrefix", + "comments", + "name" + ], + "title": "subnet" + } + } +} \ No newline at end of file diff --git a/schemas/v0.4.0/landingzones/types/aks.json b/schemas/v0.4.0/landingzones/types/aks.json new file mode 100644 index 00000000..1d3e8080 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/aml.json b/schemas/v0.4.0/landingzones/types/aml.json new file mode 100644 index 00000000..ef1577d4 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/appServiceLinuxContainer.json b/schemas/v0.4.0/landingzones/types/appServiceLinuxContainer.json new file mode 100644 index 00000000..f4316c33 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/automation.json b/schemas/v0.4.0/landingzones/types/automation.json new file mode 100644 index 00000000..89515791 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/backupRecoveryVault.json b/schemas/v0.4.0/landingzones/types/backupRecoveryVault.json new file mode 100644 index 00000000..d7c507f0 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/hubNetwork.json b/schemas/v0.4.0/landingzones/types/hubNetwork.json new file mode 100644 index 00000000..9d882724 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/keyVault.json b/schemas/v0.4.0/landingzones/types/keyVault.json new file mode 100644 index 00000000..e771589a --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/location.json b/schemas/v0.4.0/landingzones/types/location.json new file mode 100644 index 00000000..1e17aad8 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/resourceTags.json b/schemas/v0.4.0/landingzones/types/resourceTags.json new file mode 100644 index 00000000..5d6bd73f --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/securityCenter.json b/schemas/v0.4.0/landingzones/types/securityCenter.json new file mode 100644 index 00000000..66ceed6e --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/serviceHealthAlerts.json b/schemas/v0.4.0/landingzones/types/serviceHealthAlerts.json new file mode 100644 index 00000000..0bb153df --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/sqldb.json b/schemas/v0.4.0/landingzones/types/sqldb.json new file mode 100644 index 00000000..a774c92a --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/sqlmi.json b/schemas/v0.4.0/landingzones/types/sqlmi.json new file mode 100644 index 00000000..06209f45 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/subscriptionBudget.json b/schemas/v0.4.0/landingzones/types/subscriptionBudget.json new file mode 100644 index 00000000..c65c4164 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/subscriptionRoleAssignments.json b/schemas/v0.4.0/landingzones/types/subscriptionRoleAssignments.json new file mode 100644 index 00000000..137f9a86 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/subscriptionTags.json b/schemas/v0.4.0/landingzones/types/subscriptionTags.json new file mode 100644 index 00000000..66c82144 --- /dev/null +++ b/schemas/v0.4.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.4.0/landingzones/types/synapse.json b/schemas/v0.4.0/landingzones/types/synapse.json new file mode 100644 index 00000000..1de7e80f --- /dev/null +++ b/schemas/v0.4.0/landingzones/types/synapse.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "Synapse": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "value" + ], + "title": "Synapse" + }, + "Value": { + "type": "object", + "additionalProperties": false, + "properties": { + "username": { + "type": "string" + } + }, + "required": [ + "username" + ], + "title": "Value" + } + } +} \ No newline at end of file diff --git a/schemas/v0.4.0/readme.md b/schemas/v0.4.0/readme.md new file mode 100644 index 00000000..c9dfff09 --- /dev/null +++ b/schemas/v0.4.0/readme.md @@ -0,0 +1,243 @@ +# Schema Change History + +## Landing Zone Schemas + +### 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.