{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-azure/json-schema/microsoft-azure-active-session-host-configuration-schema.json",
  "title": "ActiveSessionHostConfiguration",
  "description": "Represents a ActiveSessionHostConfiguration definition. This has all of the sessionHostConfiguration properties except provisioningState",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/microsoft-azure-activesessionhostconfiguration-api-openapi.yml#/components/schemas/ActiveSessionHostConfiguration",
  "type": "object",
  "allOf": [
    {
      "$ref": "../../../../../common-types/resource-management/v1/types.json#/definitions/Resource"
    }
  ],
  "required": [
    "properties"
  ],
  "properties": {
    "systemData": {
      "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/systemData",
      "description": "Metadata pertaining to creation and last modification of the resource."
    },
    "properties": {
      "description": "Detailed properties for SessionHostConfiguration",
      "x-ms-client-flatten": true,
      "$ref": "#/$defs/ActiveSessionHostConfigurationProperties"
    }
  },
  "$defs": {
    "ActiveDirectoryInfoProperties": {
      "description": "Active directory info. Only one should be populated based on the join type.",
      "type": "object",
      "required": [
        "domainCredentials",
        "ouPath"
      ],
      "properties": {
        "domainCredentials": {
          "$ref": "#/$defs/KeyVaultCredentialsProperties",
          "description": "Credentials needed to create the virtual machine."
        },
        "ouPath": {
          "type": "string",
          "description": "The ou path."
        },
        "domainName": {
          "type": "string",
          "description": "The domain a virtual machine connected to a hostpool will join."
        }
      }
    },
    "ActiveSessionHostConfigurationProperties": {
      "description": "Session host configurations of HostPool.",
      "type": "object",
      "required": [
        "vmNamePrefix",
        "networkInfo",
        "vmSizeId",
        "diskInfo",
        "imageInfo",
        "domainInfo",
        "vmAdminCredentials"
      ],
      "properties": {
        "version": {
          "format": "date-time",
          "type": "string",
          "description": "The timestamp of the last update.",
          "readOnly": true
        },
        "friendlyName": {
          "type": "string",
          "description": "Friendly name to describe this version of the SessionHostConfiguration.",
          "maxLength": 260
        },
        "vmTags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Hashtable that lists key/value pair tags to apply to the VMs"
        },
        "vmLocation": {
          "type": "string",
          "description": "The Location for the session host to be created in. It will default to the location of the hostpool if not provided."
        },
        "vmResourceGroup": {
          "type": "string",
          "description": "The ResourceGroup for the session hosts to be created in. It will default to the ResourceGroup of the hostpool if not provided."
        },
        "vmNamePrefix": {
          "type": "string",
          "description": "The prefix that should be associated with session host names",
          "maxLength": 11
        },
        "availabilityZones": {
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "description": "Value for availability zones to be used by the session host. Should be from [1,2,3]."
        },
        "networkInfo": {
          "$ref": "#/$defs/NetworkInfoProperties",
          "description": "Network information."
        },
        "vmSizeId": {
          "type": "string",
          "description": "The id of the size of a virtual machine connected to a hostpool."
        },
        "diskInfo": {
          "$ref": "#/$defs/DiskInfoProperties",
          "description": "Disk information."
        },
        "customConfigurationScriptUrl": {
          "type": "string",
          "description": "The uri to the storage blob containing the arm template to be run on the virtual machine after provisioning."
        },
        "imageInfo": {
          "$ref": "#/$defs/ImageInfoProperties",
          "description": "Image configurations of HostPool."
        },
        "domainInfo": {
          "$ref": "#/$defs/DomainInfoProperties",
          "description": "Domain configurations of session hosts."
        },
        "securityInfo": {
          "$ref": "#/$defs/SecurityInfoProperties",
          "description": "Security information."
        },
        "vmAdminCredentials": {
          "$ref": "#/$defs/KeyVaultCredentialsProperties",
          "description": "Local Admin credentials for session hosts."
        },
        "bootDiagnosticsInfo": {
          "$ref": "#/$defs/BootDiagnosticsInfoProperties",
          "description": "Boot Diagnostics information."
        }
      }
    },
    "AzureActiveDirectoryInfoProperties": {
      "description": "Azure Active directory info. Only one should be populated based on the join type.",
      "type": "object",
      "required": [
        "mdmProviderGuid"
      ],
      "properties": {
        "mdmProviderGuid": {
          "type": "string",
          "description": "The mdm guid."
        }
      }
    },
    "BootDiagnosticsInfoProperties": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Whether boot diagnostics should be enabled on the Virtual Machine."
        },
        "storageUri": {
          "type": "string",
          "description": "Uri of the storage account to use for placing the console output and screenshot. <br><br>If storageUri is not specified while enabling boot diagnostics, managed storage will be used."
        }
      },
      "description": "Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> You can easily view the output of your console log. <br><br> Azure also enables you to see a screenshot of the VM from the hypervisor."
    },
    "CustomInfoProperties": {
      "description": "Custom image information.",
      "type": "object",
      "required": [
        "resourceId"
      ],
      "properties": {
        "resourceId": {
          "type": "string",
          "format": "arm-id",
          "description": "The resource id of the custom image."
        }
      }
    },
    "DiskInfoProperties": {
      "description": "Disk information.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Standard_LRS",
            "Premium_LRS",
            "StandardSSD_LRS"
          ],
          "x-ms-enum": {
            "name": "VirtualMachineDiskType",
            "modelAsString": true,
            "values": [
              {
                "value": "Standard_LRS",
                "description": "Standard HDD locally redundant storage. Best for backup, non-critical, and infrequent access."
              },
              {
                "value": "Premium_LRS",
                "description": "Premium SSD locally redundant storage. Best for production and performance sensitive workloads."
              },
              {
                "value": "StandardSSD_LRS",
                "description": "Standard SSD locally redundant storage. Best for web servers, lightly used enterprise applications and dev/test."
              }
            ]
          },
          "description": "The disk type used by virtual machine in hostpool session host."
        }
      }
    },
    "DomainInfoProperties": {
      "description": "Domain configurations of session hosts.",
      "type": "object",
      "required": [
        "joinType"
      ],
      "properties": {
        "joinType": {
          "enum": [
            "ActiveDirectory",
            "AzureActiveDirectory"
          ],
          "x-ms-enum": {
            "name": "DomainJoinType",
            "modelAsString": true,
            "values": [
              {
                "value": "ActiveDirectory",
                "description": "Using microsoft active directory."
              },
              {
                "value": "AzureActiveDirectory",
                "description": "Using microsoft azure active directory."
              }
            ]
          },
          "type": "string",
          "description": "The type of domain join done by the virtual machine."
        },
        "activeDirectoryInfo": {
          "$ref": "#/$defs/ActiveDirectoryInfoProperties",
          "description": "Active directory info. Only one should be populated based on the join type."
        },
        "azureActiveDirectoryInfo": {
          "$ref": "#/$defs/AzureActiveDirectoryInfoProperties",
          "description": "Azure active directory info. Only one should be populated based on the join type."
        }
      }
    },
    "ImageInfoProperties": {
      "description": "Image configurations of session host in a HostPool.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "enum": [
            "Marketplace",
            "Custom"
          ],
          "x-ms-enum": {
            "name": "type",
            "modelAsString": true,
            "values": [
              {
                "value": "Marketplace",
                "description": "Using default marketplace images offered by Azure Marketplace."
              },
              {
                "value": "Custom",
                "description": "Using a custom image."
              }
            ]
          },
          "type": "string",
          "description": "The type of image session hosts use in the hostpool."
        },
        "marketplaceInfo": {
          "$ref": "#/$defs/MarketplaceInfoProperties",
          "description": "The values to uniquely identify a marketplace image. Only one should be populated based on the image type."
        },
        "customInfo": {
          "$ref": "#/$defs/CustomInfoProperties",
          "description": "The values to uniquely identify a custom image. Only one should be populated based on the image type."
        }
      }
    },
    "KeyVaultCredentialsProperties": {
      "description": "Credentials kept in the keyvault.",
      "type": "object",
      "required": [
        "usernameKeyVaultSecretUri",
        "passwordKeyVaultSecretUri"
      ],
      "properties": {
        "usernameKeyVaultSecretUri": {
          "type": "string",
          "description": "The uri to access the secret that the username is stored in."
        },
        "passwordKeyVaultSecretUri": {
          "type": "string",
          "description": "The uri to access the secret that the password is stored in."
        }
      }
    },
    "MarketplaceInfoProperties": {
      "description": "Marketplace image information.",
      "type": "object",
      "required": [
        "offer",
        "publisher",
        "sku",
        "exactVersion"
      ],
      "properties": {
        "offer": {
          "type": "string",
          "description": "The offer of the image."
        },
        "publisher": {
          "type": "string",
          "description": "The publisher of the image."
        },
        "sku": {
          "type": "string",
          "description": "The sku of the image."
        },
        "exactVersion": {
          "type": "string",
          "description": "The exact version of the image."
        }
      }
    },
    "NetworkInfoProperties": {
      "description": "Network information.",
      "type": "object",
      "required": [
        "subnetId"
      ],
      "properties": {
        "subnetId": {
          "type": "string",
          "description": "The resource ID of the subnet."
        },
        "securityGroupId": {
          "type": "string",
          "description": "The resource ID of the security group. Any allowable/open ports should be specified in the NSG."
        }
      }
    },
    "SecurityInfoProperties": {
      "description": "Security information.",
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Standard",
            "TrustedLaunch",
            "ConfidentialVM"
          ],
          "x-ms-enum": {
            "name": "VirtualMachineSecurityType",
            "modelAsString": true,
            "values": [
              {
                "value": "Standard",
                "description": "Standard security protocol. No additional parameters"
              },
              {
                "value": "TrustedLaunch",
                "description": "TrustedLaunch allows for secure boot adn vTPM"
              },
              {
                "value": "ConfidentialVM",
                "description": "Confidential Virtual Machine security protocol"
              }
            ]
          },
          "default": "Standard",
          "description": "The security type used by virtual machine in hostpool session host. Default is Standard."
        },
        "secureBootEnabled": {
          "type": "boolean",
          "description": "Whether to use secureBoot on the virtual machine."
        },
        "vTpmEnabled": {
          "type": "boolean",
          "description": "Whether to use vTPM on the virtual machine."
        }
      }
    }
  }
}