Resources/Schema/New-CmAzPaasSql.Schema.json

{
    "$schema": "http://json-schema.org/draft-07/schema",
    "$id": "New-CmAzPaasSql",
    "type": "object",
    "title": "New-CmAzPaasSql",
    "description": "Settings Root.",
    "required": [
        "location",
        "service",
        "sqlConfig"
    ],
    "properties": {
        "component": {
            "$id": "#/component",
            "type": ["string", "null"],
            "title": "Component",
            "description": "Value to determine what cmdlet should be dynamically loaded for these settings."
        },
        "location": {
            "$id": "#/location",
            "type": "string",
            "title": "Location",
            "description": "Deployment location for all resources."
        },
        "service": {
            "$id": "#/service",
            "type": "object",
            "title": "Service",
            "description": "Contains dependency and publish details for service location.",
            "required": [
                "dependencies"
            ],
            "properties": {
                "dependencies": {
                    "$id": "#/service/dependencies",
                    "type": "object",
                    "title": "Dependencies",
                    "description": "Contains dependency details for service location.",
                    "required": [
                        "resourceGroup"
                    ],
                    "properties": {
                        "resourceGroup": {
                            "$id": "#/service/dependencies/resourceGroup",
                            "type": "string",
                            "title": "ResourceGroup",
                            "description": "Dependency value to fetch existing resource type."
                        },
                        "workspace": {
                            "$id": "#/service/dependencies/workspace",
                            "type": ["string", "null"],
                            "title": "Workspace",
                            "description": "Dependency value to fetch existing resource type."
                        },
                        "keyvault": {
                            "$id": "#/service/dependencies/keyvault",
                            "type": ["string", "null"],
                            "title": "Keyvault",
                            "description": "Global overriding dependency value to fetch existing resource type."
                        },
                        "vnet": {
                            "$id": "#/service/dependencies/vnet",
                            "type": ["string", "null"],
                            "title": "Vnet",
                            "description": "Global default dependency value to fetch existing resource type."
                        },
                        "privateZones": {
                            "$id": "#/service/dependencies/privateZones",
                            "type": ["array", "null"],
                            "title": "PrivateZones",
                            "description": "Dependency value to fetch existing resource type. Enables private zone integration."
                        }
                    },
                    "additionalProperties": false
                },
                "publish": {
                    "$id": "#/service/publish",
                    "type": ["object", "null"],
                    "title": "Publish",
                    "description": "Global default value to publish on deployed resource type.",
                    "properties": {
                        "server": {
                            "$id": "#/service/publish/server",
                            "type": ["string", "null"],
                            "title": "Server",
                            "description": "Global default value to publish on deployed resource type."
                        },
                        "database": {
                            "$id": "#/service/publish/database",
                            "type": ["string", "null"],
                            "title": "Database",
                            "description": "Global default value to publish on deployed resource type."
                        },
                        "elasticPool": {
                            "$id": "#/service/publish/elasticPool",
                            "type": ["string", "null"],
                            "title": "ElasticPool",
                            "description": "Global default value to publish on deployed resource type."
                        },
                        "privateEndpoint": {
                            "$id": "#/service/publish/privateEndpoint",
                            "type": ["string", "null"],
                            "title": "PrivateEndpoint",
                            "description": "Global default value to publish on deployed resource type."
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "logRetentionPeriodInDays": {
            "$id": "#/logRetentionPeriodInDays",
            "type": ["integer", "null"],
            "title": "LogRetentionPeriodInDays",
            "description": "Retention in days for SQLSecurityAuditEvents in an existing workspace.",
            "default": 30,
            "minimum": 1
        },
        "sqlConfig": {
            "$id": "#/sqlConfig",
            "type": "array",
            "title": "SqlConfig",
            "description": "Container of details required to deploy servers, databases and/or other associated resources.",
            "items": {
                "$id": "#/sqlConfig/items",
                "minItems": 1,
                "allOf": [
                    {
                        "$id": "#/sqlConfig/items",
                        "type": "object",
                        "required": [
                            "family",
                            "serverName",
                            "administratorLogin",
                            "passwordsecretName",
                            "sku"
                        ],
                        "properties": {
                            "family": {
                                "$id": "#/sqlConfig/items/allOf/family",
                                "type": "string",
                                "title": "Family",
                                "description": "The database product to use.",
                                "enum": ["azureSql", "postgressql", "mariaDb", "mySql"]
                            },
                            "privateEndpoints": {
                                "$id": "#/sqlConfig/items/allOf/privateEndpoints",
                                "type": ["array", "null"],
                                "title": "PrivateEndpoints",
                                "description": "Container for private endpoint details.",
                                "items": {
                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items",
                                    "allOf": [
                                        {
                                            "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf",
                                            "type": "object",
                                            "required": [
                                                "subnetName"
                                            ],
                                            "properties": {
                                                "subnetName": {
                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/subnetName",
                                                    "type": "string",
                                                    "title": "SubnetName",
                                                    "description": "Names of underlying sub-resources to create private connection with."
                                                },
                                                "name": {
                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/name",
                                                    "type": ["string", "null"],
                                                    "title": "Name",
                                                    "description": "Becomes part of private endpoint name."
                                                },
                                                "service": {
                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service",
                                                    "type": ["object", "null"],
                                                    "title": "Service",
                                                    "description": "Contains dependency and publish details for service location.",
                                                    "properties": {
                                                        "dependencies": {
                                                            "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service/dependencies",
                                                            "type": ["object", "null"],
                                                            "title": "Dependencies",
                                                            "description": "Contains dependency details for service location.",
                                                            "properties": {
                                                                "vnet": {
                                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service/dependencies/vnet",
                                                                    "type": ["string", "null"],
                                                                    "title": "Vnet",
                                                                    "description": "Local overriding dependency value to fetch existing resource type."
                                                                },
                                                                "privateZones": {
                                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service/dependencies/privateZones",
                                                                    "type": ["array", "null"],
                                                                    "title": "PrivateZones",
                                                                    "description": "Dependency value to fetch existing resource type. Enables private zone integration."
                                                                }
                                                            },
                                                            "additionalProperties": false
                                                        },
                                                        "publish": {
                                                            "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service/publish",
                                                            "type": ["object", "null"],
                                                            "title": "Publish",
                                                            "description": "Contains publish details for service location.",
                                                            "properties": {
                                                                "privateEndpoint": {
                                                                    "$id": "#/sqlConfig/items/allOf/privateEndpoints/items/allOf/service/publish/privateEndpoint",
                                                                    "type": ["string", "null"],
                                                                    "title": "privateEndpoint",
                                                                    "description": "Local overriding value to publish on deployed existing resource type."
                                                                }
                                                            },
                                                            "additionalProperties": false
                                                        }
                                                    },
                                                    "additionalProperties": false
                                                }
                                            },
                                            "additionalProperties": false
                                        }
                                    ]
                                }
                            },
                            "type": {
                                "$id": "#/sqlConfig/items/allOf/type",
                                "type": ["string", "null"],
                                "title": "Type",
                                "description": "The type of db instance to use.",
                                "enum": ["single", "elasticPool", "managed", "", null],
                                "default": ""
                            },
                            "serverName": {
                                "$id": "#/sqlConfig/items/allOf/serverName",
                                "type": "string",
                                "title": "ServerName",
                                "description": "Becomes part of the generated server's name, if no db is defined, one db is created with this value as part of the db's generated name."
                            },
                            "elasticPoolName": {
                                "$id": "#/sqlConfig/items/allOf/elasticPoolName",
                                "type": ["string", "null"],
                                "title": "ElasticPoolName",
                                "description": "Becomes part of the generated elastic pool's name"
                            },
                            "service": {
                                "$id": "#/sqlConfig/items/allOf/service",
                                "type": ["object", "null"],
                                "title": "Service",
                                "description": "Contains dependency and publish details for service location.",
                                "properties": {
                                    "publish": {
                                        "$id": "#/sqlConfig/items/allOf/service/publish",
                                        "type": ["object", "null"],
                                        "title": "Publish",
                                        "description": "Contains publish details for service location.",
                                        "properties": {
                                            "server": {
                                                "$id": "#/sqlConfig/items/allOf/service/publish/server",
                                                "type": ["string", "null"],
                                                "title": "Server",
                                                "description": "Local overriding value to publish on deployed existing resource type."
                                            },
                                            "elasticPool": {
                                                "$id": "#/sqlConfig/items/allOf/service/publish/elasticPool",
                                                "type": ["string", "null"],
                                                "title": "ElasticPool",
                                                "description": "Local overriding value to publish on deployed existing resource type."
                                            }
                                        },
                                        "additionalProperties": false
                                    },
                                    "dependencies": {
                                        "$id": "#/sqlConfig/items/allOf/service/dependencies",
                                        "type": ["object", "null"],
                                        "title": "Dependencies",
                                        "description": "Contains dependency details for service location.",
                                        "properties": {
                                            "keyvault": {
                                                "$id": "#/sqlConfig/items/allOf/service/dependencies/keyvault",
                                                "type": ["string", "null"],
                                                "title": "Keyvault",
                                                "description": "Local overriding dependency value to fetch existing resource type."
                                            }
                                        },
                                        "additionalProperties": false
                                    }
                                },
                                "additionalProperties": false
                            },
                            "version": {
                                "$id": "#/sqlConfig/items/allOf/version",
                                "type": ["string", "null"],
                                "title": "Version",
                                "description": "An explanation about purpose of this instance."
                            },
                            "databases": {
                                "$id": "#/sqlConfig/items/allOf/databases",
                                "type": ["array", "null"],
                                "title": "Databases",
                                "description": "List of details required to deploy all databases.",
                                "items": {
                                    "$id": "#/sqlConfig/items/allOf/databases/items",
                                    "minItems": 1,
                                    "anyOf": [
                                        {
                                            "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/string",
                                            "type": "string"
                                        },
                                        {
                                            "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/object",
                                            "type": "object",
                                            "required": [
                                                "name"
                                            ],
                                            "properties": {
                                                "name": {
                                                    "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/object/name",
                                                    "type": "string",
                                                    "title": "Name",
                                                    "description": "Becomes part of the generated database's name,"
                                                },
                                                "service": {
                                                    "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/object/service",
                                                    "type": ["object", "null"],
                                                    "title": "Service",
                                                    "description": "Contains dependency and publish details for service location.",
                                                    "properties": {
                                                        "publish": {
                                                            "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/object/service/publish",
                                                            "type": ["object", "null"],
                                                            "title": "Publish",
                                                            "description": "Contains publish details for service location.",
                                                            "properties": {
                                                                "database": {
                                                                    "$id": "#/sqlConfig/items/allOf/databases/items/anyOf/object/service/publish/database",
                                                                    "type": ["string", "null"],
                                                                    "title": "Database",
                                                                    "description": "Local overriding value to publish on deployed existing resource type."
                                                                }
                                                            },
                                                            "additionalProperties": false
                                                        }
                                                    },
                                                    "additionalProperties": false
                                                }
                                            },
                                            "additionalProperties": false
                                        }
                                    ]
                                }
                            },
                            "administratorLogin": {
                                "$id": "#/sqlConfig/items/allOf/administratorLogin",
                                "type": "string",
                                "title": "AdministratorLogin",
                                "description": "Administrator username."
                            },
                            "passwordsecretName": {
                                "$id": "#/sqlConfig/items/allOf/passwordsecretName",
                                "type": "string",
                                "title": "PasswordSecretName",
                                "description": "Name of secret in an existing key vault which represents the administrator password."
                            },
                            "sku": {
                                "$id": "#/sqlConfig/items/allOf/sku",
                                "type": "object",
                                "title": "Sku",
                                "description": "Sku details container.",
                                "required": [
                                    "name",
                                    "capacity"
                                ],
                                "properties": {
                                    "name": {
                                        "$id": "#/sqlConfig/items/allOf/sku/name",
                                        "type": "string",
                                        "title": "Name",
                                        "description": "The sku name."
                                    },
                                    "capacity": {
                                        "$id": "#/sqlConfig/items/allOf/sku/capacity",
                                        "type": "integer",
                                        "title": "Capacity",
                                        "description": "The sku capacity.",
                                        "minimum": 1
                                    }
                                },
                                "additionalProperties": false
                            },
                            "firewallRules": {
                                "$id": "#/sqlConfig/items/allOf/firewallRules",
                                "type": ["array", "null"],
                                "title": "FirewallRules",
                                "description": "List of ip ranges required to deploy all firewall rules.",
                                "default": [{
                                    "startIpAddress":"0.0.0.0",
                                    "endIpAddress":"255.255.255.255"
                                }],
                                "items": {
                                    "$id": "#/sqlConfig/items/allOf/firewallRules/items",
                                    "allOf": [
                                        {
                                            "$id": "#/sqlConfig/items/allOf/firewallRules/items",
                                            "type": "object",
                                            "description": "Firewall rule containing an ipaddress range.",
                                            "required": [
                                                "startIpAddress",
                                                "endIpAddress"
                                            ],
                                            "default": {
                                                "startIpAddress":"0.0.0.0",
                                                "endIpAddress":"255.255.255.255"
                                            },
                                            "properties": {
                                                "startIpAddress": {
                                                    "$id": "#/sqlConfig/items/allOf/firewallRules/items/allOf/startIpAddress",
                                                    "type": ["string", "null"],
                                                    "title": "StartIpAddress",
                                                    "description": "Minimum ip address value in range.",
                                                    "format": "ipv4",
                                                    "default": "0.0.0.0"
                                                },
                                                "endIpAddress": {
                                                    "$id": "#/sqlConfig/items/allOf/firewallRules/items/allOf/endIpAddress",
                                                    "type": ["string", "null"],
                                                    "title": "EndIpAddress",
                                                    "description": "Maximum ip address value in range.",
                                                    "format": "ipv4",
                                                    "default": "255.255.255.255"
                                                }
                                            },
                                            "additionalProperties": false
                                        }
                                    ]
                                }
                            }
                        },
                        "additionalProperties": false
                    }
                ]
            }
        }
    },
    "additionalProperties": false
}