{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/azure-test-labs/json-schema/azure-test-labs-lab-virtual-machine-schema.json",
  "title": "LabVirtualMachine",
  "description": "A virtual machine.",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/azure-test-labs-virtual-machines-api-openapi.yml#/components/schemas/LabVirtualMachine",
  "allOf": [
    {
      "$ref": "#/$defs/Resource"
    }
  ],
  "properties": {
    "properties": {
      "$ref": "#/$defs/LabVirtualMachineProperties",
      "description": "The properties of the resource.",
      "x-ms-client-flatten": true
    }
  },
  "required": [
    "properties"
  ],
  "type": "object",
  "$defs": {
    "ApplicableSchedule": {
      "allOf": [
        {
          "$ref": "#/$defs/Resource"
        }
      ],
      "description": "Schedules applicable to a virtual machine. The schedules may have been defined on a VM or on lab level.",
      "properties": {
        "properties": {
          "$ref": "#/$defs/ApplicableScheduleProperties",
          "description": "The properties of the resource.",
          "x-ms-client-flatten": true
        }
      },
      "required": [
        "properties"
      ],
      "type": "object"
    },
    "ApplicableScheduleProperties": {
      "description": "Properties of a schedules applicable to a virtual machine.",
      "properties": {
        "labVmsShutdown": {
          "$ref": "#/$defs/Schedule",
          "description": "The auto-shutdown schedule, if one has been set at the lab or lab resource level."
        },
        "labVmsStartup": {
          "$ref": "#/$defs/Schedule",
          "description": "The auto-startup schedule, if one has been set at the lab or lab resource level."
        }
      },
      "type": "object"
    },
    "ArtifactDeploymentStatusProperties": {
      "description": "Properties of an artifact deployment.",
      "properties": {
        "artifactsApplied": {
          "description": "The total count of the artifacts that were successfully applied.",
          "format": "int32",
          "type": "integer"
        },
        "deploymentStatus": {
          "description": "The deployment status of the artifact.",
          "type": "string"
        },
        "totalArtifacts": {
          "description": "The total count of the artifacts that were tentatively applied.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "ArtifactInstallProperties": {
      "description": "Properties of an artifact.",
      "properties": {
        "artifactId": {
          "description": "The artifact's identifier.",
          "type": "string"
        },
        "artifactTitle": {
          "description": "The artifact's title.",
          "type": "string"
        },
        "deploymentStatusMessage": {
          "description": "The status message from the deployment.",
          "type": "string"
        },
        "installTime": {
          "description": "The time that the artifact starts to install on the virtual machine.",
          "format": "date-time",
          "type": "string"
        },
        "parameters": {
          "description": "The parameters of the artifact.",
          "items": {
            "$ref": "#/$defs/ArtifactParameterProperties"
          },
          "type": "array"
        },
        "status": {
          "description": "The status of the artifact.",
          "type": "string"
        },
        "vmExtensionStatusMessage": {
          "description": "The status message from the virtual machine extension.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ArtifactParameterProperties": {
      "description": "Properties of an artifact parameter.",
      "properties": {
        "name": {
          "description": "The name of the artifact parameter.",
          "type": "string"
        },
        "value": {
          "description": "The value of the artifact parameter.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "AttachNewDataDiskOptions": {
      "description": "Properties to attach new disk to the Virtual Machine.",
      "properties": {
        "diskName": {
          "description": "The name of the disk to be attached.",
          "type": "string"
        },
        "diskSizeGiB": {
          "description": "Size of the disk to be attached in GibiBytes.",
          "format": "int32",
          "type": "integer"
        },
        "diskType": {
          "description": "The storage type for the disk (i.e. Standard, Premium).",
          "enum": [
            "Standard",
            "Premium",
            "StandardSSD"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "StorageType"
          }
        }
      },
      "type": "object"
    },
    "ComputeDataDisk": {
      "description": "A data disks attached to a virtual machine.",
      "properties": {
        "diskSizeGiB": {
          "description": "Gets data disk size in GiB.",
          "format": "int32",
          "type": "integer"
        },
        "diskUri": {
          "description": "When backed by a blob, the URI of underlying blob.",
          "type": "string"
        },
        "managedDiskId": {
          "description": "When backed by managed disk, this is the ID of the compute disk resource.",
          "type": "string"
        },
        "name": {
          "description": "Gets data disk name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ComputeVmInstanceViewStatus": {
      "description": "Status information about a virtual machine.",
      "properties": {
        "code": {
          "description": "Gets the status Code.",
          "type": "string"
        },
        "displayStatus": {
          "description": "Gets the short localizable label for the status.",
          "type": "string"
        },
        "message": {
          "description": "Gets the message associated with the status.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ComputeVmProperties": {
      "description": "Properties of a virtual machine returned by the Microsoft.Compute API.",
      "properties": {
        "dataDiskIds": {
          "description": "Gets data disks blob uri for the virtual machine.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "dataDisks": {
          "description": "Gets all data disks attached to the virtual machine.",
          "items": {
            "$ref": "#/$defs/ComputeDataDisk"
          },
          "type": "array"
        },
        "networkInterfaceId": {
          "description": "Gets the network interface ID of the virtual machine.",
          "type": "string"
        },
        "osDiskId": {
          "description": "Gets OS disk blob uri for the virtual machine.",
          "type": "string"
        },
        "osType": {
          "description": "Gets the OS type of the virtual machine.",
          "type": "string"
        },
        "statuses": {
          "description": "Gets the statuses of the virtual machine.",
          "items": {
            "$ref": "#/$defs/ComputeVmInstanceViewStatus"
          },
          "type": "array"
        },
        "vmSize": {
          "description": "Gets the size of the virtual machine.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DataDiskProperties": {
      "description": "Request body for adding a new or existing data disk to a virtual machine.",
      "properties": {
        "attachNewDataDiskOptions": {
          "$ref": "#/$defs/AttachNewDataDiskOptions",
          "description": "Specifies options to attach a new disk to the virtual machine."
        },
        "existingLabDiskId": {
          "description": "Specifies the existing lab disk id to attach to virtual machine.",
          "type": "string"
        },
        "hostCaching": {
          "description": "Caching option for a data disk (i.e. None, ReadOnly, ReadWrite).",
          "enum": [
            "None",
            "ReadOnly",
            "ReadWrite"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "HostCachingOptions"
          }
        }
      },
      "type": "object"
    },
    "DayDetails": {
      "description": "Properties of a daily schedule.",
      "properties": {
        "time": {
          "description": "The time of day the schedule will occur.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "GalleryImageReference": {
      "description": "The reference information for an Azure Marketplace image.",
      "properties": {
        "offer": {
          "description": "The offer of the gallery image.",
          "type": "string"
        },
        "osType": {
          "description": "The OS type of the gallery image.",
          "type": "string"
        },
        "publisher": {
          "description": "The publisher of the gallery image.",
          "type": "string"
        },
        "sku": {
          "description": "The SKU of the gallery image.",
          "type": "string"
        },
        "version": {
          "description": "The version of the gallery image.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HourDetails": {
      "description": "Properties of an hourly schedule.",
      "properties": {
        "minute": {
          "description": "Minutes of the hour the schedule will run.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "InboundNatRule": {
      "description": "A rule for NAT - exposing a VM's port (backendPort) on the public IP address using a load balancer.",
      "properties": {
        "backendPort": {
          "description": "The port to which the external traffic will be redirected.",
          "format": "int32",
          "type": "integer"
        },
        "frontendPort": {
          "description": "The external endpoint port of the inbound connection. Possible values range between 1 and 65535, inclusive. If unspecified, a value will be allocated automatically.",
          "format": "int32",
          "type": "integer"
        },
        "transportProtocol": {
          "description": "The transport protocol for the endpoint.",
          "enum": [
            "Tcp",
            "Udp"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "TransportProtocol"
          }
        }
      },
      "type": "object"
    },
    "LabVirtualMachineProperties": {
      "description": "Properties of a virtual machine.",
      "properties": {
        "allowClaim": {
          "description": "Indicates whether another user can take ownership of the virtual machine",
          "type": "boolean"
        },
        "applicableSchedule": {
          "$ref": "#/$defs/ApplicableSchedule",
          "description": "The applicable schedule for the virtual machine.",
          "readOnly": true
        },
        "artifactDeploymentStatus": {
          "$ref": "#/$defs/ArtifactDeploymentStatusProperties",
          "description": "The artifact deployment status for the virtual machine."
        },
        "artifacts": {
          "description": "The artifacts to be installed on the virtual machine.",
          "items": {
            "$ref": "#/$defs/ArtifactInstallProperties"
          },
          "type": "array"
        },
        "computeId": {
          "description": "The resource identifier (Microsoft.Compute) of the virtual machine.",
          "type": "string"
        },
        "computeVm": {
          "$ref": "#/$defs/ComputeVmProperties",
          "description": "The compute virtual machine properties.",
          "readOnly": true
        },
        "createdByUser": {
          "description": "The email address of creator of the virtual machine.",
          "type": "string"
        },
        "createdByUserId": {
          "description": "The object identifier of the creator of the virtual machine.",
          "type": "string"
        },
        "createdDate": {
          "description": "The creation date of the virtual machine.",
          "format": "date-time",
          "type": "string"
        },
        "customImageId": {
          "description": "The custom image identifier of the virtual machine.",
          "type": "string"
        },
        "dataDiskParameters": {
          "description": "New or existing data disks to attach to the virtual machine after creation",
          "items": {
            "$ref": "#/$defs/DataDiskProperties"
          },
          "type": "array"
        },
        "disallowPublicIpAddress": {
          "description": "Indicates whether the virtual machine is to be created without a public IP address.",
          "type": "boolean"
        },
        "environmentId": {
          "description": "The resource ID of the environment that contains this virtual machine, if any.",
          "type": "string"
        },
        "expirationDate": {
          "description": "The expiration date for VM.",
          "format": "date-time",
          "type": "string"
        },
        "fqdn": {
          "description": "The fully-qualified domain name of the virtual machine.",
          "type": "string"
        },
        "galleryImageReference": {
          "$ref": "#/$defs/GalleryImageReference",
          "description": "The Microsoft Azure Marketplace image reference of the virtual machine."
        },
        "isAuthenticationWithSshKey": {
          "description": "Indicates whether this virtual machine uses an SSH key for authentication.",
          "type": "boolean"
        },
        "labSubnetName": {
          "description": "The lab subnet name of the virtual machine.",
          "type": "string"
        },
        "labVirtualNetworkId": {
          "description": "The lab virtual network identifier of the virtual machine.",
          "type": "string"
        },
        "lastKnownPowerState": {
          "description": "Last known compute power state captured in DTL",
          "type": "string"
        },
        "networkInterface": {
          "$ref": "#/$defs/NetworkInterfaceProperties",
          "description": "The network interface properties."
        },
        "notes": {
          "description": "The notes of the virtual machine.",
          "type": "string"
        },
        "osType": {
          "description": "The OS type of the virtual machine.",
          "type": "string"
        },
        "ownerObjectId": {
          "description": "The object identifier of the owner of the virtual machine.",
          "type": "string"
        },
        "ownerUserPrincipalName": {
          "description": "The user principal name of the virtual machine owner.",
          "type": "string"
        },
        "password": {
          "description": "The password of the virtual machine administrator.",
          "type": "string"
        },
        "planId": {
          "description": "The id of the plan associated with the virtual machine image",
          "type": "string"
        },
        "provisioningState": {
          "description": "The provisioning status of the resource.",
          "readOnly": true,
          "type": "string"
        },
        "scheduleParameters": {
          "description": "Virtual Machine schedules to be created",
          "items": {
            "$ref": "#/$defs/ScheduleCreationParameter"
          },
          "type": "array"
        },
        "size": {
          "description": "The size of the virtual machine.",
          "type": "string"
        },
        "sshKey": {
          "description": "The SSH key of the virtual machine administrator.",
          "type": "string"
        },
        "storageType": {
          "description": "Storage type to use for virtual machine (i.e. Standard, Premium).",
          "type": "string"
        },
        "uniqueIdentifier": {
          "description": "The unique immutable identifier of a resource (Guid).",
          "readOnly": true,
          "type": "string"
        },
        "userName": {
          "description": "The user name of the virtual machine.",
          "type": "string"
        },
        "virtualMachineCreationSource": {
          "description": "Tells source of creation of lab virtual machine. Output property only.",
          "enum": [
            "FromCustomImage",
            "FromGalleryImage",
            "FromSharedGalleryImage"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "VirtualMachineCreationSource"
          }
        }
      },
      "type": "object"
    },
    "NetworkInterfaceProperties": {
      "description": "Properties of a network interface.",
      "properties": {
        "dnsName": {
          "description": "The DNS name.",
          "type": "string"
        },
        "privateIpAddress": {
          "description": "The private IP address.",
          "type": "string"
        },
        "publicIpAddress": {
          "description": "The public IP address.",
          "type": "string"
        },
        "publicIpAddressId": {
          "description": "The resource ID of the public IP address.",
          "type": "string"
        },
        "rdpAuthority": {
          "description": "The RdpAuthority property is a server DNS host name or IP address followed by the service port number for RDP (Remote Desktop Protocol).",
          "type": "string"
        },
        "sharedPublicIpAddressConfiguration": {
          "$ref": "#/$defs/SharedPublicIpAddressConfiguration",
          "description": "The configuration for sharing a public IP address across multiple virtual machines."
        },
        "sshAuthority": {
          "description": "The SshAuthority property is a server DNS host name or IP address followed by the service port number for SSH.",
          "type": "string"
        },
        "subnetId": {
          "description": "The resource ID of the sub net.",
          "type": "string"
        },
        "virtualNetworkId": {
          "description": "The resource ID of the virtual network.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "NotificationSettings": {
      "description": "Notification settings for a schedule.",
      "properties": {
        "emailRecipient": {
          "description": "The email recipient to send notifications to (can be a list of semi-colon separated email addresses).",
          "type": "string"
        },
        "notificationLocale": {
          "description": "The locale to use when sending a notification (fallback for unsupported languages is EN).",
          "type": "string"
        },
        "status": {
          "description": "If notifications are enabled for this schedule (i.e. Enabled, Disabled).",
          "enum": [
            "Enabled",
            "Disabled"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "EnableStatus"
          }
        },
        "timeInMinutes": {
          "description": "Time in minutes before event at which notification will be sent.",
          "format": "int32",
          "type": "integer"
        },
        "webhookUrl": {
          "description": "The webhook URL to which the notification will be sent.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "Resource": {
      "description": "An Azure resource.",
      "properties": {
        "id": {
          "description": "The identifier of the resource.",
          "readOnly": true,
          "type": "string"
        },
        "location": {
          "description": "The location of the resource.",
          "type": "string"
        },
        "name": {
          "description": "The name of the resource.",
          "readOnly": true,
          "type": "string"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The tags of the resource.",
          "type": "object"
        },
        "type": {
          "description": "The type of the resource.",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object",
      "x-ms-azure-resource": true
    },
    "Schedule": {
      "allOf": [
        {
          "$ref": "#/$defs/Resource"
        }
      ],
      "description": "A schedule.",
      "properties": {
        "properties": {
          "$ref": "#/$defs/ScheduleProperties",
          "description": "The properties of the resource.",
          "x-ms-client-flatten": true
        }
      },
      "required": [
        "properties"
      ],
      "type": "object"
    },
    "ScheduleCreationParameter": {
      "description": "Properties for creating a schedule.",
      "properties": {
        "location": {
          "description": "The location of the new virtual machine or environment",
          "type": "string"
        },
        "name": {
          "description": "The name of the virtual machine or environment",
          "type": "string"
        },
        "properties": {
          "$ref": "#/$defs/ScheduleCreationParameterProperties",
          "description": "The properties of the schedule.",
          "x-ms-client-flatten": true
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The tags of the resource.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "ScheduleCreationParameterProperties": {
      "description": "Properties for schedule creation.",
      "properties": {
        "dailyRecurrence": {
          "$ref": "#/$defs/DayDetails",
          "description": "If the schedule will occur once each day of the week, specify the daily recurrence."
        },
        "hourlyRecurrence": {
          "$ref": "#/$defs/HourDetails",
          "description": "If the schedule will occur multiple times a day, specify the hourly recurrence."
        },
        "notificationSettings": {
          "$ref": "#/$defs/NotificationSettings",
          "description": "Notification settings."
        },
        "status": {
          "description": "The status of the schedule (i.e. Enabled, Disabled)",
          "enum": [
            "Enabled",
            "Disabled"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "EnableStatus"
          }
        },
        "targetResourceId": {
          "description": "The resource ID to which the schedule belongs",
          "type": "string"
        },
        "taskType": {
          "description": "The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).",
          "type": "string"
        },
        "timeZoneId": {
          "description": "The time zone ID (e.g. Pacific Standard time).",
          "type": "string"
        },
        "weeklyRecurrence": {
          "$ref": "#/$defs/WeekDetails",
          "description": "If the schedule will occur only some days of the week, specify the weekly recurrence."
        }
      },
      "type": "object"
    },
    "ScheduleProperties": {
      "description": "Properties of a schedule.",
      "properties": {
        "createdDate": {
          "description": "The creation date of the schedule.",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "dailyRecurrence": {
          "$ref": "#/$defs/DayDetails",
          "description": "If the schedule will occur once each day of the week, specify the daily recurrence."
        },
        "hourlyRecurrence": {
          "$ref": "#/$defs/HourDetails",
          "description": "If the schedule will occur multiple times a day, specify the hourly recurrence."
        },
        "notificationSettings": {
          "$ref": "#/$defs/NotificationSettings",
          "description": "Notification settings."
        },
        "provisioningState": {
          "description": "The provisioning status of the resource.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "The status of the schedule (i.e. Enabled, Disabled)",
          "enum": [
            "Enabled",
            "Disabled"
          ],
          "type": "string",
          "x-ms-enum": {
            "modelAsString": true,
            "name": "EnableStatus"
          }
        },
        "targetResourceId": {
          "description": "The resource ID to which the schedule belongs",
          "type": "string"
        },
        "taskType": {
          "description": "The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).",
          "type": "string"
        },
        "timeZoneId": {
          "description": "The time zone ID (e.g. Pacific Standard time).",
          "type": "string"
        },
        "uniqueIdentifier": {
          "description": "The unique immutable identifier of a resource (Guid).",
          "readOnly": true,
          "type": "string"
        },
        "weeklyRecurrence": {
          "$ref": "#/$defs/WeekDetails",
          "description": "If the schedule will occur only some days of the week, specify the weekly recurrence."
        }
      },
      "type": "object"
    },
    "SharedPublicIpAddressConfiguration": {
      "description": "Properties of a virtual machine that determine how it is connected to a load balancer.",
      "properties": {
        "inboundNatRules": {
          "description": "The incoming NAT rules",
          "items": {
            "$ref": "#/$defs/InboundNatRule"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "WeekDetails": {
      "description": "Properties of a weekly schedule.",
      "properties": {
        "time": {
          "description": "The time of the day the schedule will occur.",
          "type": "string"
        },
        "weekdays": {
          "description": "The days of the week for which the schedule is set (e.g. Sunday, Monday, Tuesday, etc.).",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    }
  }
}