# coding=utf-8
# *** WARNING: this file was generated by pulumi. ***
# *** 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
from . import outputs
from ._inputs import *

__all__ = ['EnvironmentArgs', 'Environment']

@pulumi.input_type
class EnvironmentArgs:
    def __init__(__self__, *,
                 lab_name: pulumi.Input[str],
                 resource_group_name: pulumi.Input[str],
                 user_name: pulumi.Input[str],
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input['EnvironmentDeploymentPropertiesArgs']] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a Environment resource.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[str] user_name: The name of the user profile.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input['EnvironmentDeploymentPropertiesArgs'] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        """
        pulumi.set(__self__, "lab_name", lab_name)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "user_name", user_name)
        if arm_template_display_name is not None:
            pulumi.set(__self__, "arm_template_display_name", arm_template_display_name)
        if deployment_properties is not None:
            pulumi.set(__self__, "deployment_properties", deployment_properties)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="labName")
    def lab_name(self) -> pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, "lab_name")

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

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[str]:
        """
        The name of the resource group.
        """
        return pulumi.get(self, "resource_group_name")

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

    @property
    @pulumi.getter(name="userName")
    def user_name(self) -> pulumi.Input[str]:
        """
        The name of the user profile.
        """
        return pulumi.get(self, "user_name")

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

    @property
    @pulumi.getter(name="armTemplateDisplayName")
    def arm_template_display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, "arm_template_display_name")

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

    @property
    @pulumi.getter(name="deploymentProperties")
    def deployment_properties(self) -> Optional[pulumi.Input['EnvironmentDeploymentPropertiesArgs']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, "deployment_properties")

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

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, "location")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the environment.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, "tags")

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


class Environment(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]] = None,
                 lab_name: Optional[pulumi.Input[str]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 user_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: EnvironmentArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]] = None,
                 lab_name: Optional[pulumi.Input[str]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 user_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)

            __props__.__dict__["arm_template_display_name"] = arm_template_display_name
            __props__.__dict__["deployment_properties"] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__["lab_name"] = lab_name
            __props__.__dict__["location"] = location
            __props__.__dict__["name"] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            __props__.__dict__["tags"] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__["user_name"] = user_name
            __props__.__dict__["created_by_user"] = None
            __props__.__dict__["provisioning_state"] = None
            __props__.__dict__["resource_group_id"] = None
            __props__.__dict__["type"] = None
            __props__.__dict__["unique_identifier"] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_="azure-native:devtestlab:Environment"), pulumi.Alias(type_="azure-native:devtestlab/v20160515:Environment")])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)

        __props__.__dict__["arm_template_display_name"] = None
        __props__.__dict__["created_by_user"] = None
        __props__.__dict__["deployment_properties"] = None
        __props__.__dict__["location"] = None
        __props__.__dict__["name"] = None
        __props__.__dict__["provisioning_state"] = None
        __props__.__dict__["resource_group_id"] = None
        __props__.__dict__["tags"] = None
        __props__.__dict__["type"] = None
        __props__.__dict__["unique_identifier"] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="armTemplateDisplayName")
    def arm_template_display_name(self) -> pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, "arm_template_display_name")

    @property
    @pulumi.getter(name="createdByUser")
    def created_by_user(self) -> pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, "created_by_user")

    @property
    @pulumi.getter(name="deploymentProperties")
    def deployment_properties(self) -> pulumi.Output[Optional['outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, "deployment_properties")

    @property
    @pulumi.getter
    def location(self) -> pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, "location")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="provisioningState")
    def provisioning_state(self) -> pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, "provisioning_state")

    @property
    @pulumi.getter(name="resourceGroupId")
    def resource_group_id(self) -> pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, "resource_group_id")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter
    def type(self) -> pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="uniqueIdentifier")
    def unique_identifier(self) -> pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, "unique_identifier")


3e3843bfd83e82e9aa6c60d83798dfc1d1fc2c59
<mask token>


@pulumi.input_type
class EnvironmentArgs:
    <mask token>

    @property
    @pulumi.getter(name='labName')
    def lab_name(self) ->pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, 'lab_name')

    @lab_name.setter
    def lab_name(self, value: pulumi.Input[str]):
        pulumi.set(self, 'lab_name', value)
    <mask token>

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, 'resource_group_name', value)
    <mask token>
    <mask token>
    <mask token>

    @arm_template_display_name.setter
    def arm_template_display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, 'arm_template_display_name', value)
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>


class Environment(pulumi.CustomResource):

    @overload
    def __init__(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...

    @overload
    def __init__(__self__, resource_name: str, args: EnvironmentArgs, opts:
        Optional[pulumi.ResourceOptions]=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...

    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs
            , pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.
                __dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.
            get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError(
                'Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError(
                    '__props__ is only valid when passed in combination with a valid opts.id to get an existing resource'
                    )
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
            __props__.__dict__['arm_template_display_name'
                ] = arm_template_display_name
            __props__.__dict__['deployment_properties'] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__['lab_name'] = lab_name
            __props__.__dict__['location'] = location
            __props__.__dict__['name'] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError(
                    "Missing required property 'resource_group_name'")
            __props__.__dict__['resource_group_name'] = resource_group_name
            __props__.__dict__['tags'] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__['user_name'] = user_name
            __props__.__dict__['created_by_user'] = None
            __props__.__dict__['provisioning_state'] = None
            __props__.__dict__['resource_group_id'] = None
            __props__.__dict__['type'] = None
            __props__.__dict__['unique_identifier'] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_=
            'azure-native:devtestlab:Environment'), pulumi.Alias(type_=
            'azure-native:devtestlab/v20160515:Environment')])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment', resource_name,
            __props__, opts)

    @staticmethod
    def get(resource_name: str, id: pulumi.Input[str], opts: Optional[
        pulumi.ResourceOptions]=None) ->'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)
            )
        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
        __props__.__dict__['arm_template_display_name'] = None
        __props__.__dict__['created_by_user'] = None
        __props__.__dict__['deployment_properties'] = None
        __props__.__dict__['location'] = None
        __props__.__dict__['name'] = None
        __props__.__dict__['provisioning_state'] = None
        __props__.__dict__['resource_group_id'] = None
        __props__.__dict__['tags'] = None
        __props__.__dict__['type'] = None
        __props__.__dict__['unique_identifier'] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

    @property
    @pulumi.getter(name='createdByUser')
    def created_by_user(self) ->pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, 'created_by_user')

    @property
    @pulumi.getter(name='deploymentProperties')
    def deployment_properties(self) ->pulumi.Output[Optional[
        'outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, 'deployment_properties')

    @property
    @pulumi.getter
    def location(self) ->pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

    @property
    @pulumi.getter
    def name(self) ->pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, 'name')

    @property
    @pulumi.getter(name='provisioningState')
    def provisioning_state(self) ->pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, 'provisioning_state')

    @property
    @pulumi.getter(name='resourceGroupId')
    def resource_group_id(self) ->pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, 'resource_group_id')

    @property
    @pulumi.getter
    def tags(self) ->pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @property
    @pulumi.getter
    def type(self) ->pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, 'type')

    @property
    @pulumi.getter(name='uniqueIdentifier')
    def unique_identifier(self) ->pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, 'unique_identifier')

<mask token>


@pulumi.input_type
class EnvironmentArgs:
    <mask token>

    @property
    @pulumi.getter(name='labName')
    def lab_name(self) ->pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, 'lab_name')

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

    @property
    @pulumi.getter(name='resourceGroupName')
    def resource_group_name(self) ->pulumi.Input[str]:
        """
        The name of the resource group.
        """
        return pulumi.get(self, 'resource_group_name')

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, 'resource_group_name', value)
    <mask token>
    <mask token>
    <mask token>

    @arm_template_display_name.setter
    def arm_template_display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, 'arm_template_display_name', value)
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>

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

    @property
    @pulumi.getter
    def tags(self) ->Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')
    <mask token>


class Environment(pulumi.CustomResource):

    @overload
    def __init__(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...

    @overload
    def __init__(__self__, resource_name: str, args: EnvironmentArgs, opts:
        Optional[pulumi.ResourceOptions]=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...

    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs
            , pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.
                __dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.
            get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError(
                'Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError(
                    '__props__ is only valid when passed in combination with a valid opts.id to get an existing resource'
                    )
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
            __props__.__dict__['arm_template_display_name'
                ] = arm_template_display_name
            __props__.__dict__['deployment_properties'] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__['lab_name'] = lab_name
            __props__.__dict__['location'] = location
            __props__.__dict__['name'] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError(
                    "Missing required property 'resource_group_name'")
            __props__.__dict__['resource_group_name'] = resource_group_name
            __props__.__dict__['tags'] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__['user_name'] = user_name
            __props__.__dict__['created_by_user'] = None
            __props__.__dict__['provisioning_state'] = None
            __props__.__dict__['resource_group_id'] = None
            __props__.__dict__['type'] = None
            __props__.__dict__['unique_identifier'] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_=
            'azure-native:devtestlab:Environment'), pulumi.Alias(type_=
            'azure-native:devtestlab/v20160515:Environment')])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment', resource_name,
            __props__, opts)

    @staticmethod
    def get(resource_name: str, id: pulumi.Input[str], opts: Optional[
        pulumi.ResourceOptions]=None) ->'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)
            )
        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
        __props__.__dict__['arm_template_display_name'] = None
        __props__.__dict__['created_by_user'] = None
        __props__.__dict__['deployment_properties'] = None
        __props__.__dict__['location'] = None
        __props__.__dict__['name'] = None
        __props__.__dict__['provisioning_state'] = None
        __props__.__dict__['resource_group_id'] = None
        __props__.__dict__['tags'] = None
        __props__.__dict__['type'] = None
        __props__.__dict__['unique_identifier'] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

    @property
    @pulumi.getter(name='createdByUser')
    def created_by_user(self) ->pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, 'created_by_user')

    @property
    @pulumi.getter(name='deploymentProperties')
    def deployment_properties(self) ->pulumi.Output[Optional[
        'outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, 'deployment_properties')

    @property
    @pulumi.getter
    def location(self) ->pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

    @property
    @pulumi.getter
    def name(self) ->pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, 'name')

    @property
    @pulumi.getter(name='provisioningState')
    def provisioning_state(self) ->pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, 'provisioning_state')

    @property
    @pulumi.getter(name='resourceGroupId')
    def resource_group_id(self) ->pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, 'resource_group_id')

    @property
    @pulumi.getter
    def tags(self) ->pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @property
    @pulumi.getter
    def type(self) ->pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, 'type')

    @property
    @pulumi.getter(name='uniqueIdentifier')
    def unique_identifier(self) ->pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, 'unique_identifier')

<mask token>


@pulumi.input_type
class EnvironmentArgs:
    <mask token>

    @property
    @pulumi.getter(name='labName')
    def lab_name(self) ->pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, 'lab_name')

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

    @property
    @pulumi.getter(name='resourceGroupName')
    def resource_group_name(self) ->pulumi.Input[str]:
        """
        The name of the resource group.
        """
        return pulumi.get(self, 'resource_group_name')

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

    @property
    @pulumi.getter(name='userName')
    def user_name(self) ->pulumi.Input[str]:
        """
        The name of the user profile.
        """
        return pulumi.get(self, 'user_name')

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

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->Optional[pulumi.Input[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

    @arm_template_display_name.setter
    def arm_template_display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, 'arm_template_display_name', value)
    <mask token>

    @deployment_properties.setter
    def deployment_properties(self, value: Optional[pulumi.Input[
        'EnvironmentDeploymentPropertiesArgs']]):
        pulumi.set(self, 'deployment_properties', value)

    @property
    @pulumi.getter
    def location(self) ->Optional[pulumi.Input[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

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

    @property
    @pulumi.getter
    def name(self) ->Optional[pulumi.Input[str]]:
        """
        The name of the environment.
        """
        return pulumi.get(self, 'name')

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

    @property
    @pulumi.getter
    def tags(self) ->Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[
        str]]]]):
        pulumi.set(self, 'tags', value)


class Environment(pulumi.CustomResource):

    @overload
    def __init__(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...

    @overload
    def __init__(__self__, resource_name: str, args: EnvironmentArgs, opts:
        Optional[pulumi.ResourceOptions]=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...

    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs
            , pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.
                __dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.
            get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError(
                'Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError(
                    '__props__ is only valid when passed in combination with a valid opts.id to get an existing resource'
                    )
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
            __props__.__dict__['arm_template_display_name'
                ] = arm_template_display_name
            __props__.__dict__['deployment_properties'] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__['lab_name'] = lab_name
            __props__.__dict__['location'] = location
            __props__.__dict__['name'] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError(
                    "Missing required property 'resource_group_name'")
            __props__.__dict__['resource_group_name'] = resource_group_name
            __props__.__dict__['tags'] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__['user_name'] = user_name
            __props__.__dict__['created_by_user'] = None
            __props__.__dict__['provisioning_state'] = None
            __props__.__dict__['resource_group_id'] = None
            __props__.__dict__['type'] = None
            __props__.__dict__['unique_identifier'] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_=
            'azure-native:devtestlab:Environment'), pulumi.Alias(type_=
            'azure-native:devtestlab/v20160515:Environment')])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment', resource_name,
            __props__, opts)

    @staticmethod
    def get(resource_name: str, id: pulumi.Input[str], opts: Optional[
        pulumi.ResourceOptions]=None) ->'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)
            )
        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
        __props__.__dict__['arm_template_display_name'] = None
        __props__.__dict__['created_by_user'] = None
        __props__.__dict__['deployment_properties'] = None
        __props__.__dict__['location'] = None
        __props__.__dict__['name'] = None
        __props__.__dict__['provisioning_state'] = None
        __props__.__dict__['resource_group_id'] = None
        __props__.__dict__['tags'] = None
        __props__.__dict__['type'] = None
        __props__.__dict__['unique_identifier'] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

    @property
    @pulumi.getter(name='createdByUser')
    def created_by_user(self) ->pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, 'created_by_user')

    @property
    @pulumi.getter(name='deploymentProperties')
    def deployment_properties(self) ->pulumi.Output[Optional[
        'outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, 'deployment_properties')

    @property
    @pulumi.getter
    def location(self) ->pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

    @property
    @pulumi.getter
    def name(self) ->pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, 'name')

    @property
    @pulumi.getter(name='provisioningState')
    def provisioning_state(self) ->pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, 'provisioning_state')

    @property
    @pulumi.getter(name='resourceGroupId')
    def resource_group_id(self) ->pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, 'resource_group_id')

    @property
    @pulumi.getter
    def tags(self) ->pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @property
    @pulumi.getter
    def type(self) ->pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, 'type')

    @property
    @pulumi.getter(name='uniqueIdentifier')
    def unique_identifier(self) ->pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, 'unique_identifier')

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from ... import _utilities
from . import outputs
from ._inputs import *
__all__ = ['EnvironmentArgs', 'Environment']


@pulumi.input_type
class EnvironmentArgs:

    def __init__(__self__, *, lab_name: pulumi.Input[str],
        resource_group_name: pulumi.Input[str], user_name: pulumi.Input[str
        ], arm_template_display_name: Optional[pulumi.Input[str]]=None,
        deployment_properties: Optional[pulumi.Input[
        'EnvironmentDeploymentPropertiesArgs']]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None):
        """
        The set of arguments for constructing a Environment resource.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[str] user_name: The name of the user profile.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input['EnvironmentDeploymentPropertiesArgs'] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        """
        pulumi.set(__self__, 'lab_name', lab_name)
        pulumi.set(__self__, 'resource_group_name', resource_group_name)
        pulumi.set(__self__, 'user_name', user_name)
        if arm_template_display_name is not None:
            pulumi.set(__self__, 'arm_template_display_name',
                arm_template_display_name)
        if deployment_properties is not None:
            pulumi.set(__self__, 'deployment_properties', deployment_properties
                )
        if location is not None:
            pulumi.set(__self__, 'location', location)
        if name is not None:
            pulumi.set(__self__, 'name', name)
        if tags is not None:
            pulumi.set(__self__, 'tags', tags)

    @property
    @pulumi.getter(name='labName')
    def lab_name(self) ->pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, 'lab_name')

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

    @property
    @pulumi.getter(name='resourceGroupName')
    def resource_group_name(self) ->pulumi.Input[str]:
        """
        The name of the resource group.
        """
        return pulumi.get(self, 'resource_group_name')

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

    @property
    @pulumi.getter(name='userName')
    def user_name(self) ->pulumi.Input[str]:
        """
        The name of the user profile.
        """
        return pulumi.get(self, 'user_name')

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

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->Optional[pulumi.Input[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

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

    @property
    @pulumi.getter(name='deploymentProperties')
    def deployment_properties(self) ->Optional[pulumi.Input[
        'EnvironmentDeploymentPropertiesArgs']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, 'deployment_properties')

    @deployment_properties.setter
    def deployment_properties(self, value: Optional[pulumi.Input[
        'EnvironmentDeploymentPropertiesArgs']]):
        pulumi.set(self, 'deployment_properties', value)

    @property
    @pulumi.getter
    def location(self) ->Optional[pulumi.Input[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

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

    @property
    @pulumi.getter
    def name(self) ->Optional[pulumi.Input[str]]:
        """
        The name of the environment.
        """
        return pulumi.get(self, 'name')

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

    @property
    @pulumi.getter
    def tags(self) ->Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[
        str]]]]):
        pulumi.set(self, 'tags', value)


class Environment(pulumi.CustomResource):

    @overload
    def __init__(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...

    @overload
    def __init__(__self__, resource_name: str, args: EnvironmentArgs, opts:
        Optional[pulumi.ResourceOptions]=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...

    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs
            , pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.
                __dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.
        ResourceOptions]=None, arm_template_display_name: Optional[pulumi.
        Input[str]]=None, deployment_properties: Optional[pulumi.Input[
        pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]]=None,
        lab_name: Optional[pulumi.Input[str]]=None, location: Optional[
        pulumi.Input[str]]=None, name: Optional[pulumi.Input[str]]=None,
        resource_group_name: Optional[pulumi.Input[str]]=None, tags:
        Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]=None,
        user_name: Optional[pulumi.Input[str]]=None, __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.
            get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError(
                'Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError(
                    '__props__ is only valid when passed in combination with a valid opts.id to get an existing resource'
                    )
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
            __props__.__dict__['arm_template_display_name'
                ] = arm_template_display_name
            __props__.__dict__['deployment_properties'] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__['lab_name'] = lab_name
            __props__.__dict__['location'] = location
            __props__.__dict__['name'] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError(
                    "Missing required property 'resource_group_name'")
            __props__.__dict__['resource_group_name'] = resource_group_name
            __props__.__dict__['tags'] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__['user_name'] = user_name
            __props__.__dict__['created_by_user'] = None
            __props__.__dict__['provisioning_state'] = None
            __props__.__dict__['resource_group_id'] = None
            __props__.__dict__['type'] = None
            __props__.__dict__['unique_identifier'] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_=
            'azure-native:devtestlab:Environment'), pulumi.Alias(type_=
            'azure-native:devtestlab/v20160515:Environment')])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment', resource_name,
            __props__, opts)

    @staticmethod
    def get(resource_name: str, id: pulumi.Input[str], opts: Optional[
        pulumi.ResourceOptions]=None) ->'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)
            )
        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)
        __props__.__dict__['arm_template_display_name'] = None
        __props__.__dict__['created_by_user'] = None
        __props__.__dict__['deployment_properties'] = None
        __props__.__dict__['location'] = None
        __props__.__dict__['name'] = None
        __props__.__dict__['provisioning_state'] = None
        __props__.__dict__['resource_group_id'] = None
        __props__.__dict__['tags'] = None
        __props__.__dict__['type'] = None
        __props__.__dict__['unique_identifier'] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name='armTemplateDisplayName')
    def arm_template_display_name(self) ->pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, 'arm_template_display_name')

    @property
    @pulumi.getter(name='createdByUser')
    def created_by_user(self) ->pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, 'created_by_user')

    @property
    @pulumi.getter(name='deploymentProperties')
    def deployment_properties(self) ->pulumi.Output[Optional[
        'outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, 'deployment_properties')

    @property
    @pulumi.getter
    def location(self) ->pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, 'location')

    @property
    @pulumi.getter
    def name(self) ->pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, 'name')

    @property
    @pulumi.getter(name='provisioningState')
    def provisioning_state(self) ->pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, 'provisioning_state')

    @property
    @pulumi.getter(name='resourceGroupId')
    def resource_group_id(self) ->pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, 'resource_group_id')

    @property
    @pulumi.getter
    def tags(self) ->pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, 'tags')

    @property
    @pulumi.getter
    def type(self) ->pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, 'type')

    @property
    @pulumi.getter(name='uniqueIdentifier')
    def unique_identifier(self) ->pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, 'unique_identifier')

# coding=utf-8
# *** WARNING: this file was generated by pulumi. ***
# *** 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
from . import outputs
from ._inputs import *

__all__ = ['EnvironmentArgs', 'Environment']

@pulumi.input_type
class EnvironmentArgs:
    def __init__(__self__, *,
                 lab_name: pulumi.Input[str],
                 resource_group_name: pulumi.Input[str],
                 user_name: pulumi.Input[str],
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input['EnvironmentDeploymentPropertiesArgs']] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a Environment resource.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[str] user_name: The name of the user profile.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input['EnvironmentDeploymentPropertiesArgs'] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        """
        pulumi.set(__self__, "lab_name", lab_name)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "user_name", user_name)
        if arm_template_display_name is not None:
            pulumi.set(__self__, "arm_template_display_name", arm_template_display_name)
        if deployment_properties is not None:
            pulumi.set(__self__, "deployment_properties", deployment_properties)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="labName")
    def lab_name(self) -> pulumi.Input[str]:
        """
        The name of the lab.
        """
        return pulumi.get(self, "lab_name")

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

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[str]:
        """
        The name of the resource group.
        """
        return pulumi.get(self, "resource_group_name")

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

    @property
    @pulumi.getter(name="userName")
    def user_name(self) -> pulumi.Input[str]:
        """
        The name of the user profile.
        """
        return pulumi.get(self, "user_name")

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

    @property
    @pulumi.getter(name="armTemplateDisplayName")
    def arm_template_display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, "arm_template_display_name")

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

    @property
    @pulumi.getter(name="deploymentProperties")
    def deployment_properties(self) -> Optional[pulumi.Input['EnvironmentDeploymentPropertiesArgs']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, "deployment_properties")

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

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, "location")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the environment.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, "tags")

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


class Environment(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]] = None,
                 lab_name: Optional[pulumi.Input[str]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 user_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] arm_template_display_name: The display name of the Azure Resource Manager template that produced the environment.
        :param pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']] deployment_properties: The deployment properties of the environment.
        :param pulumi.Input[str] lab_name: The name of the lab.
        :param pulumi.Input[str] location: The location of the resource.
        :param pulumi.Input[str] name: The name of the environment.
        :param pulumi.Input[str] resource_group_name: The name of the resource group.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: The tags of the resource.
        :param pulumi.Input[str] user_name: The name of the user profile.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: EnvironmentArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        An environment, which is essentially an ARM template deployment.

        :param str resource_name: The name of the resource.
        :param EnvironmentArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(EnvironmentArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 arm_template_display_name: Optional[pulumi.Input[str]] = None,
                 deployment_properties: Optional[pulumi.Input[pulumi.InputType['EnvironmentDeploymentPropertiesArgs']]] = None,
                 lab_name: Optional[pulumi.Input[str]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 user_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = EnvironmentArgs.__new__(EnvironmentArgs)

            __props__.__dict__["arm_template_display_name"] = arm_template_display_name
            __props__.__dict__["deployment_properties"] = deployment_properties
            if lab_name is None and not opts.urn:
                raise TypeError("Missing required property 'lab_name'")
            __props__.__dict__["lab_name"] = lab_name
            __props__.__dict__["location"] = location
            __props__.__dict__["name"] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            __props__.__dict__["tags"] = tags
            if user_name is None and not opts.urn:
                raise TypeError("Missing required property 'user_name'")
            __props__.__dict__["user_name"] = user_name
            __props__.__dict__["created_by_user"] = None
            __props__.__dict__["provisioning_state"] = None
            __props__.__dict__["resource_group_id"] = None
            __props__.__dict__["type"] = None
            __props__.__dict__["unique_identifier"] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_="azure-native:devtestlab:Environment"), pulumi.Alias(type_="azure-native:devtestlab/v20160515:Environment")])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Environment, __self__).__init__(
            'azure-native:devtestlab/v20180915:Environment',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'Environment':
        """
        Get an existing Environment resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = EnvironmentArgs.__new__(EnvironmentArgs)

        __props__.__dict__["arm_template_display_name"] = None
        __props__.__dict__["created_by_user"] = None
        __props__.__dict__["deployment_properties"] = None
        __props__.__dict__["location"] = None
        __props__.__dict__["name"] = None
        __props__.__dict__["provisioning_state"] = None
        __props__.__dict__["resource_group_id"] = None
        __props__.__dict__["tags"] = None
        __props__.__dict__["type"] = None
        __props__.__dict__["unique_identifier"] = None
        return Environment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="armTemplateDisplayName")
    def arm_template_display_name(self) -> pulumi.Output[Optional[str]]:
        """
        The display name of the Azure Resource Manager template that produced the environment.
        """
        return pulumi.get(self, "arm_template_display_name")

    @property
    @pulumi.getter(name="createdByUser")
    def created_by_user(self) -> pulumi.Output[str]:
        """
        The creator of the environment.
        """
        return pulumi.get(self, "created_by_user")

    @property
    @pulumi.getter(name="deploymentProperties")
    def deployment_properties(self) -> pulumi.Output[Optional['outputs.EnvironmentDeploymentPropertiesResponse']]:
        """
        The deployment properties of the environment.
        """
        return pulumi.get(self, "deployment_properties")

    @property
    @pulumi.getter
    def location(self) -> pulumi.Output[Optional[str]]:
        """
        The location of the resource.
        """
        return pulumi.get(self, "location")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="provisioningState")
    def provisioning_state(self) -> pulumi.Output[str]:
        """
        The provisioning status of the resource.
        """
        return pulumi.get(self, "provisioning_state")

    @property
    @pulumi.getter(name="resourceGroupId")
    def resource_group_id(self) -> pulumi.Output[str]:
        """
        The identifier of the resource group containing the environment's resources.
        """
        return pulumi.get(self, "resource_group_id")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        The tags of the resource.
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter
    def type(self) -> pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="uniqueIdentifier")
    def unique_identifier(self) -> pulumi.Output[str]:
        """
        The unique immutable identifier of a resource (Guid).
        """
        return pulumi.get(self, "unique_identifier")

