# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'LabAutoShutdownArgs',
    'LabConnectionSettingArgs',
    'LabNetworkArgs',
    'LabRosterArgs',
    'LabSecurityArgs',
    'LabVirtualMachineArgs',
    'LabVirtualMachineAdminUserArgs',
    'LabVirtualMachineImageReferenceArgs',
    'LabVirtualMachineNonAdminUserArgs',
    'LabVirtualMachineSkuArgs',
    'ScheduleRecurrenceArgs',
    'ServicePlanDefaultAutoShutdownArgs',
    'ServicePlanDefaultConnectionArgs',
    'ServicePlanSupportArgs',
]

@pulumi.input_type
class LabAutoShutdownArgs:
    def __init__(__self__, *,
                 disconnect_delay: Optional[pulumi.Input[str]] = None,
                 idle_delay: Optional[pulumi.Input[str]] = None,
                 no_connect_delay: Optional[pulumi.Input[str]] = None,
                 shutdown_on_idle: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] disconnect_delay: The amount of time a VM will stay running after a user disconnects if this behavior is enabled. This value must be formatted as an ISO 8601 string.
               
               > **NOTE:** The `shutdownOnDisconnect` is `Disabled` when `disconnect_delay` isn't specified.
        :param pulumi.Input[str] idle_delay: The amount of time a VM will idle before it is shutdown if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        :param pulumi.Input[str] no_connect_delay: The amount of time a VM will stay running before it is shutdown if no connection is made and this behavior is enabled. This value must be formatted as an ISO 8601 string.
               
               > **NOTE:** The `shutdownWhenNotConnected` is `Disabled` when `no_connect_delay` isn't specified.
        :param pulumi.Input[str] shutdown_on_idle: A VM will get shutdown when it has idled for a period of time. Possible values are `LowUsage` and `UserAbsence`.
               
               > **NOTE:** This property is `None` when it isn't specified. No need to set `idle_delay` when `shutdown_on_idle` isn't specified.
        """
        if disconnect_delay is not None:
            pulumi.set(__self__, "disconnect_delay", disconnect_delay)
        if idle_delay is not None:
            pulumi.set(__self__, "idle_delay", idle_delay)
        if no_connect_delay is not None:
            pulumi.set(__self__, "no_connect_delay", no_connect_delay)
        if shutdown_on_idle is not None:
            pulumi.set(__self__, "shutdown_on_idle", shutdown_on_idle)

    @property
    @pulumi.getter(name="disconnectDelay")
    def disconnect_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will stay running after a user disconnects if this behavior is enabled. This value must be formatted as an ISO 8601 string.

        > **NOTE:** The `shutdownOnDisconnect` is `Disabled` when `disconnect_delay` isn't specified.
        """
        return pulumi.get(self, "disconnect_delay")

    @disconnect_delay.setter
    def disconnect_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "disconnect_delay", value)

    @property
    @pulumi.getter(name="idleDelay")
    def idle_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will idle before it is shutdown if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        """
        return pulumi.get(self, "idle_delay")

    @idle_delay.setter
    def idle_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "idle_delay", value)

    @property
    @pulumi.getter(name="noConnectDelay")
    def no_connect_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will stay running before it is shutdown if no connection is made and this behavior is enabled. This value must be formatted as an ISO 8601 string.

        > **NOTE:** The `shutdownWhenNotConnected` is `Disabled` when `no_connect_delay` isn't specified.
        """
        return pulumi.get(self, "no_connect_delay")

    @no_connect_delay.setter
    def no_connect_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "no_connect_delay", value)

    @property
    @pulumi.getter(name="shutdownOnIdle")
    def shutdown_on_idle(self) -> Optional[pulumi.Input[str]]:
        """
        A VM will get shutdown when it has idled for a period of time. Possible values are `LowUsage` and `UserAbsence`.

        > **NOTE:** This property is `None` when it isn't specified. No need to set `idle_delay` when `shutdown_on_idle` isn't specified.
        """
        return pulumi.get(self, "shutdown_on_idle")

    @shutdown_on_idle.setter
    def shutdown_on_idle(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "shutdown_on_idle", value)


@pulumi.input_type
class LabConnectionSettingArgs:
    def __init__(__self__, *,
                 client_rdp_access: Optional[pulumi.Input[str]] = None,
                 client_ssh_access: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] client_rdp_access: The enabled access level for Client Access over RDP. Possible value is `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        :param pulumi.Input[str] client_ssh_access: The enabled access level for Client Access over SSH. Possible value is `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        """
        if client_rdp_access is not None:
            pulumi.set(__self__, "client_rdp_access", client_rdp_access)
        if client_ssh_access is not None:
            pulumi.set(__self__, "client_ssh_access", client_ssh_access)

    @property
    @pulumi.getter(name="clientRdpAccess")
    def client_rdp_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Client Access over RDP. Possible value is `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "client_rdp_access")

    @client_rdp_access.setter
    def client_rdp_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "client_rdp_access", value)

    @property
    @pulumi.getter(name="clientSshAccess")
    def client_ssh_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Client Access over SSH. Possible value is `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "client_ssh_access")

    @client_ssh_access.setter
    def client_ssh_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "client_ssh_access", value)


@pulumi.input_type
class LabNetworkArgs:
    def __init__(__self__, *,
                 load_balancer_id: Optional[pulumi.Input[str]] = None,
                 public_ip_id: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] load_balancer_id: The resource ID of the Load Balancer for the network profile of the Lab Service Lab.
        :param pulumi.Input[str] public_ip_id: The resource ID of the Public IP for the network profile of the Lab Service Lab.
        :param pulumi.Input[str] subnet_id: The resource ID of the Subnet for the network profile of the Lab Service Lab.
        """
        if load_balancer_id is not None:
            pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        if public_ip_id is not None:
            pulumi.set(__self__, "public_ip_id", public_ip_id)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Load Balancer for the network profile of the Lab Service Lab.
        """
        return pulumi.get(self, "load_balancer_id")

    @load_balancer_id.setter
    def load_balancer_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "load_balancer_id", value)

    @property
    @pulumi.getter(name="publicIpId")
    def public_ip_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Public IP for the network profile of the Lab Service Lab.
        """
        return pulumi.get(self, "public_ip_id")

    @public_ip_id.setter
    def public_ip_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "public_ip_id", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Subnet for the network profile of the Lab Service Lab.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


@pulumi.input_type
class LabRosterArgs:
    def __init__(__self__, *,
                 active_directory_group_id: Optional[pulumi.Input[str]] = None,
                 lms_instance: Optional[pulumi.Input[str]] = None,
                 lti_client_id: Optional[pulumi.Input[str]] = None,
                 lti_context_id: Optional[pulumi.Input[str]] = None,
                 lti_roster_endpoint: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] active_directory_group_id: The AAD group ID which this Lab Service Lab roster is populated from.
        :param pulumi.Input[str] lms_instance: The base URI identifying the lms instance.
        :param pulumi.Input[str] lti_client_id: The unique id of the Azure Lab Service tool in the lms.
        :param pulumi.Input[str] lti_context_id: The unique context identifier for the Lab Service Lab in the lms.
        :param pulumi.Input[str] lti_roster_endpoint: The URI of the names and roles service endpoint on the lms for the class attached to this Lab Service Lab.
        """
        if active_directory_group_id is not None:
            pulumi.set(__self__, "active_directory_group_id", active_directory_group_id)
        if lms_instance is not None:
            pulumi.set(__self__, "lms_instance", lms_instance)
        if lti_client_id is not None:
            pulumi.set(__self__, "lti_client_id", lti_client_id)
        if lti_context_id is not None:
            pulumi.set(__self__, "lti_context_id", lti_context_id)
        if lti_roster_endpoint is not None:
            pulumi.set(__self__, "lti_roster_endpoint", lti_roster_endpoint)

    @property
    @pulumi.getter(name="activeDirectoryGroupId")
    def active_directory_group_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AAD group ID which this Lab Service Lab roster is populated from.
        """
        return pulumi.get(self, "active_directory_group_id")

    @active_directory_group_id.setter
    def active_directory_group_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "active_directory_group_id", value)

    @property
    @pulumi.getter(name="lmsInstance")
    def lms_instance(self) -> Optional[pulumi.Input[str]]:
        """
        The base URI identifying the lms instance.
        """
        return pulumi.get(self, "lms_instance")

    @lms_instance.setter
    def lms_instance(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "lms_instance", value)

    @property
    @pulumi.getter(name="ltiClientId")
    def lti_client_id(self) -> Optional[pulumi.Input[str]]:
        """
        The unique id of the Azure Lab Service tool in the lms.
        """
        return pulumi.get(self, "lti_client_id")

    @lti_client_id.setter
    def lti_client_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "lti_client_id", value)

    @property
    @pulumi.getter(name="ltiContextId")
    def lti_context_id(self) -> Optional[pulumi.Input[str]]:
        """
        The unique context identifier for the Lab Service Lab in the lms.
        """
        return pulumi.get(self, "lti_context_id")

    @lti_context_id.setter
    def lti_context_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "lti_context_id", value)

    @property
    @pulumi.getter(name="ltiRosterEndpoint")
    def lti_roster_endpoint(self) -> Optional[pulumi.Input[str]]:
        """
        The URI of the names and roles service endpoint on the lms for the class attached to this Lab Service Lab.
        """
        return pulumi.get(self, "lti_roster_endpoint")

    @lti_roster_endpoint.setter
    def lti_roster_endpoint(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "lti_roster_endpoint", value)


@pulumi.input_type
class LabSecurityArgs:
    def __init__(__self__, *,
                 open_access_enabled: pulumi.Input[bool],
                 registration_code: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] open_access_enabled: Is open access enabled to allow any user or only specified users to register to a Lab Service Lab?
        :param pulumi.Input[str] registration_code: The registration code for the Lab Service Lab.
        """
        pulumi.set(__self__, "open_access_enabled", open_access_enabled)
        if registration_code is not None:
            pulumi.set(__self__, "registration_code", registration_code)

    @property
    @pulumi.getter(name="openAccessEnabled")
    def open_access_enabled(self) -> pulumi.Input[bool]:
        """
        Is open access enabled to allow any user or only specified users to register to a Lab Service Lab?
        """
        return pulumi.get(self, "open_access_enabled")

    @open_access_enabled.setter
    def open_access_enabled(self, value: pulumi.Input[bool]):
        pulumi.set(self, "open_access_enabled", value)

    @property
    @pulumi.getter(name="registrationCode")
    def registration_code(self) -> Optional[pulumi.Input[str]]:
        """
        The registration code for the Lab Service Lab.
        """
        return pulumi.get(self, "registration_code")

    @registration_code.setter
    def registration_code(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "registration_code", value)


@pulumi.input_type
class LabVirtualMachineArgs:
    def __init__(__self__, *,
                 admin_user: pulumi.Input['LabVirtualMachineAdminUserArgs'],
                 image_reference: pulumi.Input['LabVirtualMachineImageReferenceArgs'],
                 sku: pulumi.Input['LabVirtualMachineSkuArgs'],
                 additional_capability_gpu_drivers_installed: Optional[pulumi.Input[bool]] = None,
                 create_option: Optional[pulumi.Input[str]] = None,
                 non_admin_user: Optional[pulumi.Input['LabVirtualMachineNonAdminUserArgs']] = None,
                 shared_password_enabled: Optional[pulumi.Input[bool]] = None,
                 usage_quota: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['LabVirtualMachineAdminUserArgs'] admin_user: An `admin_user` block as defined below.
        :param pulumi.Input['LabVirtualMachineImageReferenceArgs'] image_reference: An `image_reference` block as defined below.
        :param pulumi.Input['LabVirtualMachineSkuArgs'] sku: A `sku` block as defined below.
        :param pulumi.Input[bool] additional_capability_gpu_drivers_installed: Is flagged to pre-install dedicated GPU drivers? Defaults to `false`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] create_option: The create option to indicate what Lab Service Lab VMs are created from. Possible values are `Image` and `TemplateVM`. Defaults to `Image`. Changing this forces a new resource to be created.
        :param pulumi.Input['LabVirtualMachineNonAdminUserArgs'] non_admin_user: A `non_admin_user` block as defined below.
        :param pulumi.Input[bool] shared_password_enabled: Is the shared password enabled with the same password for all user VMs? Defaults to `false`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] usage_quota: The initial quota allocated to each Lab Service Lab user. Defaults to `PT0S`. This value must be formatted as an ISO 8601 string.
        """
        pulumi.set(__self__, "admin_user", admin_user)
        pulumi.set(__self__, "image_reference", image_reference)
        pulumi.set(__self__, "sku", sku)
        if additional_capability_gpu_drivers_installed is not None:
            pulumi.set(__self__, "additional_capability_gpu_drivers_installed", additional_capability_gpu_drivers_installed)
        if create_option is not None:
            pulumi.set(__self__, "create_option", create_option)
        if non_admin_user is not None:
            pulumi.set(__self__, "non_admin_user", non_admin_user)
        if shared_password_enabled is not None:
            pulumi.set(__self__, "shared_password_enabled", shared_password_enabled)
        if usage_quota is not None:
            pulumi.set(__self__, "usage_quota", usage_quota)

    @property
    @pulumi.getter(name="adminUser")
    def admin_user(self) -> pulumi.Input['LabVirtualMachineAdminUserArgs']:
        """
        An `admin_user` block as defined below.
        """
        return pulumi.get(self, "admin_user")

    @admin_user.setter
    def admin_user(self, value: pulumi.Input['LabVirtualMachineAdminUserArgs']):
        pulumi.set(self, "admin_user", value)

    @property
    @pulumi.getter(name="imageReference")
    def image_reference(self) -> pulumi.Input['LabVirtualMachineImageReferenceArgs']:
        """
        An `image_reference` block as defined below.
        """
        return pulumi.get(self, "image_reference")

    @image_reference.setter
    def image_reference(self, value: pulumi.Input['LabVirtualMachineImageReferenceArgs']):
        pulumi.set(self, "image_reference", value)

    @property
    @pulumi.getter
    def sku(self) -> pulumi.Input['LabVirtualMachineSkuArgs']:
        """
        A `sku` block as defined below.
        """
        return pulumi.get(self, "sku")

    @sku.setter
    def sku(self, value: pulumi.Input['LabVirtualMachineSkuArgs']):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter(name="additionalCapabilityGpuDriversInstalled")
    def additional_capability_gpu_drivers_installed(self) -> Optional[pulumi.Input[bool]]:
        """
        Is flagged to pre-install dedicated GPU drivers? Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "additional_capability_gpu_drivers_installed")

    @additional_capability_gpu_drivers_installed.setter
    def additional_capability_gpu_drivers_installed(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "additional_capability_gpu_drivers_installed", value)

    @property
    @pulumi.getter(name="createOption")
    def create_option(self) -> Optional[pulumi.Input[str]]:
        """
        The create option to indicate what Lab Service Lab VMs are created from. Possible values are `Image` and `TemplateVM`. Defaults to `Image`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "create_option")

    @create_option.setter
    def create_option(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "create_option", value)

    @property
    @pulumi.getter(name="nonAdminUser")
    def non_admin_user(self) -> Optional[pulumi.Input['LabVirtualMachineNonAdminUserArgs']]:
        """
        A `non_admin_user` block as defined below.
        """
        return pulumi.get(self, "non_admin_user")

    @non_admin_user.setter
    def non_admin_user(self, value: Optional[pulumi.Input['LabVirtualMachineNonAdminUserArgs']]):
        pulumi.set(self, "non_admin_user", value)

    @property
    @pulumi.getter(name="sharedPasswordEnabled")
    def shared_password_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the shared password enabled with the same password for all user VMs? Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "shared_password_enabled")

    @shared_password_enabled.setter
    def shared_password_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "shared_password_enabled", value)

    @property
    @pulumi.getter(name="usageQuota")
    def usage_quota(self) -> Optional[pulumi.Input[str]]:
        """
        The initial quota allocated to each Lab Service Lab user. Defaults to `PT0S`. This value must be formatted as an ISO 8601 string.
        """
        return pulumi.get(self, "usage_quota")

    @usage_quota.setter
    def usage_quota(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "usage_quota", value)


@pulumi.input_type
class LabVirtualMachineAdminUserArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password for the Lab user. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The username to use when signing in to Lab Service Lab VMs. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password for the Lab user. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username to use when signing in to Lab Service Lab VMs. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


@pulumi.input_type
class LabVirtualMachineImageReferenceArgs:
    def __init__(__self__, *,
                 id: Optional[pulumi.Input[str]] = None,
                 offer: Optional[pulumi.Input[str]] = None,
                 publisher: Optional[pulumi.Input[str]] = None,
                 sku: Optional[pulumi.Input[str]] = None,
                 version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: The resource ID of the image. Changing this forces a new resource to be created.
        :param pulumi.Input[str] offer: The image offer if applicable. Changing this forces a new resource to be created.
        :param pulumi.Input[str] publisher: The image publisher. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The image SKU. Changing this forces a new resource to be created.
        :param pulumi.Input[str] version: The image version specified on creation. Changing this forces a new resource to be created.
        """
        if id is not None:
            pulumi.set(__self__, "id", id)
        if offer is not None:
            pulumi.set(__self__, "offer", offer)
        if publisher is not None:
            pulumi.set(__self__, "publisher", publisher)
        if sku is not None:
            pulumi.set(__self__, "sku", sku)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def offer(self) -> Optional[pulumi.Input[str]]:
        """
        The image offer if applicable. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

    @offer.setter
    def offer(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "offer", value)

    @property
    @pulumi.getter
    def publisher(self) -> Optional[pulumi.Input[str]]:
        """
        The image publisher. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

    @publisher.setter
    def publisher(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "publisher", value)

    @property
    @pulumi.getter
    def sku(self) -> Optional[pulumi.Input[str]]:
        """
        The image SKU. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

    @sku.setter
    def sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[str]]:
        """
        The image version specified on creation. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "version", value)


@pulumi.input_type
class LabVirtualMachineNonAdminUserArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password for the user.
        :param pulumi.Input[str] username: The username to use when signing in to Lab Service Lab VMs.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password for the user.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username to use when signing in to Lab Service Lab VMs.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


@pulumi.input_type
class LabVirtualMachineSkuArgs:
    def __init__(__self__, *,
                 capacity: pulumi.Input[int],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[int] capacity: The capacity for the SKU. Possible values are between `0` and `400`.
               
               > **NOTE:** Once `active_directory_group_id` is enabled, `capacity` wouldn't take effect, and it would be automatically set to the number of members in AAD Group by service API. So it has to use `ignore_changes` to avoid the difference of tf plan.
        :param pulumi.Input[str] name: The name of the SKU. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "capacity", capacity)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def capacity(self) -> pulumi.Input[int]:
        """
        The capacity for the SKU. Possible values are between `0` and `400`.

        > **NOTE:** Once `active_directory_group_id` is enabled, `capacity` wouldn't take effect, and it would be automatically set to the number of members in AAD Group by service API. So it has to use `ignore_changes` to avoid the difference of tf plan.
        """
        return pulumi.get(self, "capacity")

    @capacity.setter
    def capacity(self, value: pulumi.Input[int]):
        pulumi.set(self, "capacity", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the SKU. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class ScheduleRecurrenceArgs:
    def __init__(__self__, *,
                 expiration_date: pulumi.Input[str],
                 frequency: pulumi.Input[str],
                 interval: Optional[pulumi.Input[int]] = None,
                 week_days: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] expiration_date: When the recurrence will expire in RFC-3339 format.
        :param pulumi.Input[str] frequency: The frequency of the recurrence. Possible values are `Daily` and `Weekly`.
        :param pulumi.Input[int] interval: The interval to invoke the schedule on. Possible values are between `1` and `365`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] week_days: The interval to invoke the schedule on. Possible values are `Sunday`, `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday` and `Saturday`.
        """
        pulumi.set(__self__, "expiration_date", expiration_date)
        pulumi.set(__self__, "frequency", frequency)
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if week_days is not None:
            pulumi.set(__self__, "week_days", week_days)

    @property
    @pulumi.getter(name="expirationDate")
    def expiration_date(self) -> pulumi.Input[str]:
        """
        When the recurrence will expire in RFC-3339 format.
        """
        return pulumi.get(self, "expiration_date")

    @expiration_date.setter
    def expiration_date(self, value: pulumi.Input[str]):
        pulumi.set(self, "expiration_date", value)

    @property
    @pulumi.getter
    def frequency(self) -> pulumi.Input[str]:
        """
        The frequency of the recurrence. Possible values are `Daily` and `Weekly`.
        """
        return pulumi.get(self, "frequency")

    @frequency.setter
    def frequency(self, value: pulumi.Input[str]):
        pulumi.set(self, "frequency", value)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[int]]:
        """
        The interval to invoke the schedule on. Possible values are between `1` and `365`.
        """
        return pulumi.get(self, "interval")

    @interval.setter
    def interval(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "interval", value)

    @property
    @pulumi.getter(name="weekDays")
    def week_days(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The interval to invoke the schedule on. Possible values are `Sunday`, `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday` and `Saturday`.
        """
        return pulumi.get(self, "week_days")

    @week_days.setter
    def week_days(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "week_days", value)


@pulumi.input_type
class ServicePlanDefaultAutoShutdownArgs:
    def __init__(__self__, *,
                 disconnect_delay: Optional[pulumi.Input[str]] = None,
                 idle_delay: Optional[pulumi.Input[str]] = None,
                 no_connect_delay: Optional[pulumi.Input[str]] = None,
                 shutdown_on_idle: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] disconnect_delay: The amount of time a VM will stay running after a user disconnects if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        :param pulumi.Input[str] idle_delay: The amount of time a VM will idle before it is shutdown if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        :param pulumi.Input[str] no_connect_delay: The amount of time a VM will stay running before it is shutdown if no connection is made and this behavior is enabled. This value must be formatted as an ISO 8601 string.
        :param pulumi.Input[str] shutdown_on_idle: Will a VM get shutdown when it has idled for a period of time? Possible values are `LowUsage` and `UserAbsence`.
               
               > **NOTE:** This property is `None` when it isn't specified. No need to set `idle_delay` when `shutdown_on_idle` isn't specified.
        """
        if disconnect_delay is not None:
            pulumi.set(__self__, "disconnect_delay", disconnect_delay)
        if idle_delay is not None:
            pulumi.set(__self__, "idle_delay", idle_delay)
        if no_connect_delay is not None:
            pulumi.set(__self__, "no_connect_delay", no_connect_delay)
        if shutdown_on_idle is not None:
            pulumi.set(__self__, "shutdown_on_idle", shutdown_on_idle)

    @property
    @pulumi.getter(name="disconnectDelay")
    def disconnect_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will stay running after a user disconnects if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        """
        return pulumi.get(self, "disconnect_delay")

    @disconnect_delay.setter
    def disconnect_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "disconnect_delay", value)

    @property
    @pulumi.getter(name="idleDelay")
    def idle_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will idle before it is shutdown if this behavior is enabled. This value must be formatted as an ISO 8601 string.
        """
        return pulumi.get(self, "idle_delay")

    @idle_delay.setter
    def idle_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "idle_delay", value)

    @property
    @pulumi.getter(name="noConnectDelay")
    def no_connect_delay(self) -> Optional[pulumi.Input[str]]:
        """
        The amount of time a VM will stay running before it is shutdown if no connection is made and this behavior is enabled. This value must be formatted as an ISO 8601 string.
        """
        return pulumi.get(self, "no_connect_delay")

    @no_connect_delay.setter
    def no_connect_delay(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "no_connect_delay", value)

    @property
    @pulumi.getter(name="shutdownOnIdle")
    def shutdown_on_idle(self) -> Optional[pulumi.Input[str]]:
        """
        Will a VM get shutdown when it has idled for a period of time? Possible values are `LowUsage` and `UserAbsence`.

        > **NOTE:** This property is `None` when it isn't specified. No need to set `idle_delay` when `shutdown_on_idle` isn't specified.
        """
        return pulumi.get(self, "shutdown_on_idle")

    @shutdown_on_idle.setter
    def shutdown_on_idle(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "shutdown_on_idle", value)


@pulumi.input_type
class ServicePlanDefaultConnectionArgs:
    def __init__(__self__, *,
                 client_rdp_access: Optional[pulumi.Input[str]] = None,
                 client_ssh_access: Optional[pulumi.Input[str]] = None,
                 web_rdp_access: Optional[pulumi.Input[str]] = None,
                 web_ssh_access: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] client_rdp_access: The enabled access level for Client Access over RDP. Possible values are `Private` and `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        :param pulumi.Input[str] client_ssh_access: The enabled access level for Client Access over SSH. Possible values are `Private` and `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        :param pulumi.Input[str] web_rdp_access: The enabled access level for Web Access over RDP. Possible values are `Private` and `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        :param pulumi.Input[str] web_ssh_access: The enabled access level for Web Access over SSH. Possible values are `Private` and `Public`.
               
               > **NOTE:** This property is `None` when it isn't specified.
        """
        if client_rdp_access is not None:
            pulumi.set(__self__, "client_rdp_access", client_rdp_access)
        if client_ssh_access is not None:
            pulumi.set(__self__, "client_ssh_access", client_ssh_access)
        if web_rdp_access is not None:
            pulumi.set(__self__, "web_rdp_access", web_rdp_access)
        if web_ssh_access is not None:
            pulumi.set(__self__, "web_ssh_access", web_ssh_access)

    @property
    @pulumi.getter(name="clientRdpAccess")
    def client_rdp_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Client Access over RDP. Possible values are `Private` and `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "client_rdp_access")

    @client_rdp_access.setter
    def client_rdp_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "client_rdp_access", value)

    @property
    @pulumi.getter(name="clientSshAccess")
    def client_ssh_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Client Access over SSH. Possible values are `Private` and `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "client_ssh_access")

    @client_ssh_access.setter
    def client_ssh_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "client_ssh_access", value)

    @property
    @pulumi.getter(name="webRdpAccess")
    def web_rdp_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Web Access over RDP. Possible values are `Private` and `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "web_rdp_access")

    @web_rdp_access.setter
    def web_rdp_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "web_rdp_access", value)

    @property
    @pulumi.getter(name="webSshAccess")
    def web_ssh_access(self) -> Optional[pulumi.Input[str]]:
        """
        The enabled access level for Web Access over SSH. Possible values are `Private` and `Public`.

        > **NOTE:** This property is `None` when it isn't specified.
        """
        return pulumi.get(self, "web_ssh_access")

    @web_ssh_access.setter
    def web_ssh_access(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "web_ssh_access", value)


@pulumi.input_type
class ServicePlanSupportArgs:
    def __init__(__self__, *,
                 email: Optional[pulumi.Input[str]] = None,
                 instructions: Optional[pulumi.Input[str]] = None,
                 phone: Optional[pulumi.Input[str]] = None,
                 url: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] email: The email address for the support contact.
        :param pulumi.Input[str] instructions: The instructions for users of the Lab Service Plan.
        :param pulumi.Input[str] phone: The phone number for the support contact.
        :param pulumi.Input[str] url: The web address for users of the Lab Service Plan.
        """
        if email is not None:
            pulumi.set(__self__, "email", email)
        if instructions is not None:
            pulumi.set(__self__, "instructions", instructions)
        if phone is not None:
            pulumi.set(__self__, "phone", phone)
        if url is not None:
            pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter
    def email(self) -> Optional[pulumi.Input[str]]:
        """
        The email address for the support contact.
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter
    def instructions(self) -> Optional[pulumi.Input[str]]:
        """
        The instructions for users of the Lab Service Plan.
        """
        return pulumi.get(self, "instructions")

    @instructions.setter
    def instructions(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "instructions", value)

    @property
    @pulumi.getter
    def phone(self) -> Optional[pulumi.Input[str]]:
        """
        The phone number for the support contact.
        """
        return pulumi.get(self, "phone")

    @phone.setter
    def phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "phone", value)

    @property
    @pulumi.getter
    def url(self) -> Optional[pulumi.Input[str]]:
        """
        The web address for users of the Lab Service Plan.
        """
        return pulumi.get(self, "url")

    @url.setter
    def url(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "url", value)


