# coding=utf-8
# *** WARNING: this file was generated by the Pulumi SDK Generator. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

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__ = ['LaunchConfigurationArgs', 'LaunchConfiguration']

@pulumi.input_type
class LaunchConfigurationArgs:
    def __init__(__self__, *,
                 image_id: pulumi.Input[str],
                 instance_type: pulumi.Input[str],
                 associate_public_ip_address: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input['LaunchConfigurationBlockDeviceMappingArgs']]]] = None,
                 classic_link_vpc_id: Optional[pulumi.Input[str]] = None,
                 classic_link_vpc_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 instance_id: Optional[pulumi.Input[str]] = None,
                 instance_monitoring: Optional[pulumi.Input[bool]] = None,
                 kernel_id: Optional[pulumi.Input[str]] = None,
                 key_name: Optional[pulumi.Input[str]] = None,
                 launch_configuration_name: Optional[pulumi.Input[str]] = None,
                 metadata_options: Optional[pulumi.Input['LaunchConfigurationMetadataOptionsArgs']] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 ram_disk_id: Optional[pulumi.Input[str]] = None,
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 spot_price: Optional[pulumi.Input[str]] = None,
                 user_data: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a LaunchConfiguration resource.
        """
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "instance_type", instance_type)
        if associate_public_ip_address is not None:
            pulumi.set(__self__, "associate_public_ip_address", associate_public_ip_address)
        if block_device_mappings is not None:
            pulumi.set(__self__, "block_device_mappings", block_device_mappings)
        if classic_link_vpc_id is not None:
            pulumi.set(__self__, "classic_link_vpc_id", classic_link_vpc_id)
        if classic_link_vpc_security_groups is not None:
            pulumi.set(__self__, "classic_link_vpc_security_groups", classic_link_vpc_security_groups)
        if ebs_optimized is not None:
            pulumi.set(__self__, "ebs_optimized", ebs_optimized)
        if iam_instance_profile is not None:
            pulumi.set(__self__, "iam_instance_profile", iam_instance_profile)
        if instance_id is not None:
            pulumi.set(__self__, "instance_id", instance_id)
        if instance_monitoring is not None:
            pulumi.set(__self__, "instance_monitoring", instance_monitoring)
        if kernel_id is not None:
            pulumi.set(__self__, "kernel_id", kernel_id)
        if key_name is not None:
            pulumi.set(__self__, "key_name", key_name)
        if launch_configuration_name is not None:
            pulumi.set(__self__, "launch_configuration_name", launch_configuration_name)
        if metadata_options is not None:
            pulumi.set(__self__, "metadata_options", metadata_options)
        if placement_tenancy is not None:
            pulumi.set(__self__, "placement_tenancy", placement_tenancy)
        if ram_disk_id is not None:
            pulumi.set(__self__, "ram_disk_id", ram_disk_id)
        if security_groups is not None:
            pulumi.set(__self__, "security_groups", security_groups)
        if spot_price is not None:
            pulumi.set(__self__, "spot_price", spot_price)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "image_id")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="associatePublicIpAddress")
    def associate_public_ip_address(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "associate_public_ip_address")

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

    @property
    @pulumi.getter(name="blockDeviceMappings")
    def block_device_mappings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['LaunchConfigurationBlockDeviceMappingArgs']]]]:
        return pulumi.get(self, "block_device_mappings")

    @block_device_mappings.setter
    def block_device_mappings(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['LaunchConfigurationBlockDeviceMappingArgs']]]]):
        pulumi.set(self, "block_device_mappings", value)

    @property
    @pulumi.getter(name="classicLinkVPCId")
    def classic_link_vpc_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "classic_link_vpc_id")

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

    @property
    @pulumi.getter(name="classicLinkVPCSecurityGroups")
    def classic_link_vpc_security_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "classic_link_vpc_security_groups")

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

    @property
    @pulumi.getter(name="ebsOptimized")
    def ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "ebs_optimized")

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

    @property
    @pulumi.getter(name="iamInstanceProfile")
    def iam_instance_profile(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "iam_instance_profile")

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

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "instance_id")

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

    @property
    @pulumi.getter(name="instanceMonitoring")
    def instance_monitoring(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "instance_monitoring")

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

    @property
    @pulumi.getter(name="kernelId")
    def kernel_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "kernel_id")

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

    @property
    @pulumi.getter(name="keyName")
    def key_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "key_name")

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

    @property
    @pulumi.getter(name="launchConfigurationName")
    def launch_configuration_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "launch_configuration_name")

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

    @property
    @pulumi.getter(name="metadataOptions")
    def metadata_options(self) -> Optional[pulumi.Input['LaunchConfigurationMetadataOptionsArgs']]:
        return pulumi.get(self, "metadata_options")

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

    @property
    @pulumi.getter(name="placementTenancy")
    def placement_tenancy(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "placement_tenancy")

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

    @property
    @pulumi.getter(name="ramDiskId")
    def ram_disk_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "ram_disk_id")

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

    @property
    @pulumi.getter(name="securityGroups")
    def security_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "security_groups")

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

    @property
    @pulumi.getter(name="spotPrice")
    def spot_price(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "spot_price")

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

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "user_data")

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


warnings.warn("""LaunchConfiguration is not yet supported by AWS Native, so its creation will currently fail. Please use the classic AWS provider, if possible.""", DeprecationWarning)


class LaunchConfiguration(pulumi.CustomResource):
    warnings.warn("""LaunchConfiguration is not yet supported by AWS Native, so its creation will currently fail. Please use the classic AWS provider, if possible.""", DeprecationWarning)

    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 associate_public_ip_address: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['LaunchConfigurationBlockDeviceMappingArgs']]]]] = None,
                 classic_link_vpc_id: Optional[pulumi.Input[str]] = None,
                 classic_link_vpc_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 instance_id: Optional[pulumi.Input[str]] = None,
                 instance_monitoring: Optional[pulumi.Input[bool]] = None,
                 instance_type: Optional[pulumi.Input[str]] = None,
                 kernel_id: Optional[pulumi.Input[str]] = None,
                 key_name: Optional[pulumi.Input[str]] = None,
                 launch_configuration_name: Optional[pulumi.Input[str]] = None,
                 metadata_options: Optional[pulumi.Input[pulumi.InputType['LaunchConfigurationMetadataOptionsArgs']]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 ram_disk_id: Optional[pulumi.Input[str]] = None,
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 spot_price: Optional[pulumi.Input[str]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Resource Type definition for AWS::AutoScaling::LaunchConfiguration

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: LaunchConfigurationArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Resource Type definition for AWS::AutoScaling::LaunchConfiguration

        :param str resource_name: The name of the resource.
        :param LaunchConfigurationArgs 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(LaunchConfigurationArgs, 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,
                 associate_public_ip_address: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['LaunchConfigurationBlockDeviceMappingArgs']]]]] = None,
                 classic_link_vpc_id: Optional[pulumi.Input[str]] = None,
                 classic_link_vpc_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 instance_id: Optional[pulumi.Input[str]] = None,
                 instance_monitoring: Optional[pulumi.Input[bool]] = None,
                 instance_type: Optional[pulumi.Input[str]] = None,
                 kernel_id: Optional[pulumi.Input[str]] = None,
                 key_name: Optional[pulumi.Input[str]] = None,
                 launch_configuration_name: Optional[pulumi.Input[str]] = None,
                 metadata_options: Optional[pulumi.Input[pulumi.InputType['LaunchConfigurationMetadataOptionsArgs']]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 ram_disk_id: Optional[pulumi.Input[str]] = None,
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 spot_price: Optional[pulumi.Input[str]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        pulumi.log.warn("""LaunchConfiguration is deprecated: LaunchConfiguration is not yet supported by AWS Native, so its creation will currently fail. Please use the classic AWS provider, if possible.""")
        if opts is None:
            opts = pulumi.ResourceOptions()
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.version is None:
            opts.version = _utilities.get_version()
        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__ = LaunchConfigurationArgs.__new__(LaunchConfigurationArgs)

            __props__.__dict__["associate_public_ip_address"] = associate_public_ip_address
            __props__.__dict__["block_device_mappings"] = block_device_mappings
            __props__.__dict__["classic_link_vpc_id"] = classic_link_vpc_id
            __props__.__dict__["classic_link_vpc_security_groups"] = classic_link_vpc_security_groups
            __props__.__dict__["ebs_optimized"] = ebs_optimized
            __props__.__dict__["iam_instance_profile"] = iam_instance_profile
            if image_id is None and not opts.urn:
                raise TypeError("Missing required property 'image_id'")
            __props__.__dict__["image_id"] = image_id
            __props__.__dict__["instance_id"] = instance_id
            __props__.__dict__["instance_monitoring"] = instance_monitoring
            if instance_type is None and not opts.urn:
                raise TypeError("Missing required property 'instance_type'")
            __props__.__dict__["instance_type"] = instance_type
            __props__.__dict__["kernel_id"] = kernel_id
            __props__.__dict__["key_name"] = key_name
            __props__.__dict__["launch_configuration_name"] = launch_configuration_name
            __props__.__dict__["metadata_options"] = metadata_options
            __props__.__dict__["placement_tenancy"] = placement_tenancy
            __props__.__dict__["ram_disk_id"] = ram_disk_id
            __props__.__dict__["security_groups"] = security_groups
            __props__.__dict__["spot_price"] = spot_price
            __props__.__dict__["user_data"] = user_data
        super(LaunchConfiguration, __self__).__init__(
            'aws-native:autoscaling:LaunchConfiguration',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'LaunchConfiguration':
        """
        Get an existing LaunchConfiguration 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__ = LaunchConfigurationArgs.__new__(LaunchConfigurationArgs)

        __props__.__dict__["associate_public_ip_address"] = None
        __props__.__dict__["block_device_mappings"] = None
        __props__.__dict__["classic_link_vpc_id"] = None
        __props__.__dict__["classic_link_vpc_security_groups"] = None
        __props__.__dict__["ebs_optimized"] = None
        __props__.__dict__["iam_instance_profile"] = None
        __props__.__dict__["image_id"] = None
        __props__.__dict__["instance_id"] = None
        __props__.__dict__["instance_monitoring"] = None
        __props__.__dict__["instance_type"] = None
        __props__.__dict__["kernel_id"] = None
        __props__.__dict__["key_name"] = None
        __props__.__dict__["launch_configuration_name"] = None
        __props__.__dict__["metadata_options"] = None
        __props__.__dict__["placement_tenancy"] = None
        __props__.__dict__["ram_disk_id"] = None
        __props__.__dict__["security_groups"] = None
        __props__.__dict__["spot_price"] = None
        __props__.__dict__["user_data"] = None
        return LaunchConfiguration(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="associatePublicIpAddress")
    def associate_public_ip_address(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "associate_public_ip_address")

    @property
    @pulumi.getter(name="blockDeviceMappings")
    def block_device_mappings(self) -> pulumi.Output[Optional[Sequence['outputs.LaunchConfigurationBlockDeviceMapping']]]:
        return pulumi.get(self, "block_device_mappings")

    @property
    @pulumi.getter(name="classicLinkVPCId")
    def classic_link_vpc_id(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "classic_link_vpc_id")

    @property
    @pulumi.getter(name="classicLinkVPCSecurityGroups")
    def classic_link_vpc_security_groups(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "classic_link_vpc_security_groups")

    @property
    @pulumi.getter(name="ebsOptimized")
    def ebs_optimized(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "ebs_optimized")

    @property
    @pulumi.getter(name="iamInstanceProfile")
    def iam_instance_profile(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "iam_instance_profile")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> pulumi.Output[str]:
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="instanceMonitoring")
    def instance_monitoring(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "instance_monitoring")

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Output[str]:
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="kernelId")
    def kernel_id(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "kernel_id")

    @property
    @pulumi.getter(name="keyName")
    def key_name(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "key_name")

    @property
    @pulumi.getter(name="launchConfigurationName")
    def launch_configuration_name(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "launch_configuration_name")

    @property
    @pulumi.getter(name="metadataOptions")
    def metadata_options(self) -> pulumi.Output[Optional['outputs.LaunchConfigurationMetadataOptions']]:
        return pulumi.get(self, "metadata_options")

    @property
    @pulumi.getter(name="placementTenancy")
    def placement_tenancy(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "placement_tenancy")

    @property
    @pulumi.getter(name="ramDiskId")
    def ram_disk_id(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "ram_disk_id")

    @property
    @pulumi.getter(name="securityGroups")
    def security_groups(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "security_groups")

    @property
    @pulumi.getter(name="spotPrice")
    def spot_price(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "spot_price")

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "user_data")

