config/schema.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://raw.githubusercontent.com/vegazbabz/azure-demo-environment/main/config/schema.json",
  "title": "ADE Config Profile",
  "description": "Schema for Azure Demo Environment configuration profiles.",
  "type": "object",
  "required": ["profileName", "version", "modules"],
  "additionalProperties": false,
  "properties": {
    "$schema": { "type": "string" },
    "profileName": {
      "type": "string",
      "description": "Unique identifier for this profile."
    },
    "description": {
      "type": "string",
      "description": "Human-readable description of this profile."
    },
    "version": {
      "type": "string",
      "pattern": "^\\d+\\.\\d+\\.\\d+$",
      "description": "Semantic version of the profile format."
    },
    "modules": {
      "type": "object",
      "description": "Per-module enable/feature flags.",
      "additionalProperties": false,
      "properties": {
        "monitoring": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "alertRules": { "type": "boolean" },
                "alertEmail": { "type": "string" }
              }
            }
          }
        },
        "networking": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "bastionSku": { "type": "string", "enum": ["None", "Developer", "Basic", "Standard"] },
                "enableAppGateway": { "type": "boolean" },
                "enableFirewall": { "type": "string", "enum": ["None", "Standard", "Premium"] },
                "enableVpnGateway": { "type": "boolean" },
                "enableDdos": { "type": "boolean" },
                "enableNatGateway": { "type": "boolean" },
                "enablePrivateDnsZones": { "type": "boolean" },
                "networkWatcher": { "type": "boolean" }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "security": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "keyVault": { "type": "boolean" },
                "managedIdentity": { "type": "boolean" },
                "defenderForCloud": { "type": "boolean" },
                "sentinel": { "type": "boolean" },
                "allowedCidrRanges": { "type": "array", "items": { "type": "string" } }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "compute": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "windowsVm": { "type": "boolean" },
                "linuxVm": { "type": "boolean" },
                "vmss": { "type": "boolean" },
                "enableAutoShutdown": { "type": "boolean" },
                "vmSku": { "type": "string" },
                "domainController": { "type": "boolean" },
                "domainName": { "type": "string" }
              }
            }
          }
        },
        "storage": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "generalPurposeStorage": { "type": "boolean" },
                "dataLakeGen2": { "type": "boolean" },
                "fileShares": { "type": "boolean" },
                "enableSoftDelete": { "type": "boolean" },
                "enableVersioning": { "type": "boolean" },
                "allowedCidrRanges": { "type": "array", "items": { "type": "string" } }
              }
            }
          }
        },
        "databases": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "sqlDatabase": { "type": "boolean" },
                "sqlVm": { "type": "boolean" },
                "cosmosDb": { "type": "boolean" },
                "postgresql": { "type": "boolean" },
                "mysql": { "type": "boolean" },
                "redis": { "type": "boolean" },
                "sqlManagedInstance": { "type": "boolean" },
                "allowAllSqlIngress": { "type": "boolean" }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "appservices": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "windowsWebApp": { "type": "boolean" },
                "functionApp": { "type": "boolean" },
                "logicApp": { "type": "boolean" }
              }
            }
          }
        },
        "containers": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "containerRegistry": { "type": "boolean" },
                "kubernetesService": { "type": "boolean" },
                "containerApps": { "type": "boolean" },
                "containerInstances": { "type": "boolean" },
                "aksAuthorizedIpRanges":{ "type": "array", "items": { "type": "string" } }
              }
            }
          }
        },
        "integration": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "serviceBus": { "type": "boolean" },
                "eventHub": { "type": "boolean" },
                "eventGrid": { "type": "boolean" },
                "signalR": { "type": "boolean" },
                "apiManagement": { "type": "boolean" },
                "apimSku": { "type": "string", "enum": ["Developer", "Basic", "Standard", "Premium"] },
                "apimPublisherEmail": { "type": "string" },
                "apimPublisherName": { "type": "string" }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "ai": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "aiServices": { "type": "boolean" },
                "openAi": { "type": "boolean" },
                "cognitiveSearch": { "type": "boolean" },
                "machineLearning": { "type": "boolean" }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "data": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "dataFactory": { "type": "boolean" },
                "synapse": { "type": "boolean" },
                "databricks": { "type": "boolean" },
                "purview": { "type": "boolean" }
              }
            },
            "costWarnings": { "$ref": "#/definitions/costWarnings" }
          }
        },
        "governance": {
          "$ref": "#/definitions/moduleWithFeatures",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "automationAccount": { "type": "boolean" },
                "budget": { "type": "boolean" },
                "budgetAmount": { "type": "number", "minimum": 1 },
                "budgetAlertEmail": { "type": "string" },
                "resourceLocks": { "type": "boolean" },
                "policyAssignments": { "type": "boolean" },
                "autoShutdownTime": { "type": "string", "pattern": "^\\d{4}$" },
                "autoShutdownTimezone": { "type": "string" },
                "autoStartEnabled": { "type": "boolean" }
              }
            }
          }
        }
      }
    },
    "seedDummyData": {
      "type": "boolean",
      "description": "Whether to seed dummy data after deployment."
    },
    "globalSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "defaultLocation": { "type": "string" },
        "defaultPrefix": { "type": "string" },
        "tags": {
          "type": "object",
          "additionalProperties": { "type": "string" }
        }
      }
    }
  },
  "definitions": {
    "moduleWithFeatures": {
      "type": "object",
      "required": ["enabled"],
      "properties": {
        "enabled": { "type": "boolean" },
        "description": { "type": "string" },
        "features": { "type": "object" },
        "costWarnings":{ "$ref": "#/definitions/costWarnings" }
      }
    },
    "costWarnings": {
      "type": "object",
      "additionalProperties": { "type": "string" }
    }
  }
}