<reponame>Dwonczykj/gember_deploy// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace TencentCloudIAC.PulumiPackage.Tencentcloud.Lighthouse
{
    /// <summary>
    /// Provides a resource to create a lighthouse instance.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Tencentcloud = TencentCloudIAC.PulumiPackage.Tencentcloud;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var lighthouse = new Tencentcloud.Lighthouse.Instance("lighthouse", new Tencentcloud.Lighthouse.InstanceArgs
    ///         {
    ///             BlueprintId = "lhbp-f1lkcd41",
    ///             BundleId = "bundle2022_gen_01",
    ///             Containers = 
    ///             {
    ///                 new Tencentcloud.Lighthouse.Inputs.InstanceContainerArgs
    ///                 {
    ///                     Command = "ls -l",
    ///                     ContainerImage = "ccr.ccs.tencentyun.com/qcloud/nginx",
    ///                     ContainerName = "nginx",
    ///                     Envs = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerEnvArgs
    ///                         {
    ///                             Key = "key",
    ///                             Value = "value",
    ///                         },
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerEnvArgs
    ///                         {
    ///                             Key = "key2",
    ///                             Value = "value2",
    ///                         },
    ///                     },
    ///                     PublishPorts = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerPublishPortArgs
    ///                         {
    ///                             ContainerPort = 80,
    ///                             HostPort = 80,
    ///                             Ip = "127.0.0.1",
    ///                             Protocol = "tcp",
    ///                         },
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerPublishPortArgs
    ///                         {
    ///                             ContainerPort = 36000,
    ///                             HostPort = 36000,
    ///                             Ip = "127.0.0.1",
    ///                             Protocol = "tcp",
    ///                         },
    ///                     },
    ///                     Volumes = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerVolumeArgs
    ///                         {
    ///                             ContainerPath = "/data",
    ///                             HostPath = "/tmp",
    ///                         },
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerVolumeArgs
    ///                         {
    ///                             ContainerPath = "/var",
    ///                             HostPath = "/tmp",
    ///                         },
    ///                     },
    ///                 },
    ///                 new Tencentcloud.Lighthouse.Inputs.InstanceContainerArgs
    ///                 {
    ///                     Command = "echo \"hello\"",
    ///                     ContainerImage = "ccr.ccs.tencentyun.com/qcloud/resty",
    ///                     ContainerName = "resty",
    ///                     Envs = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerEnvArgs
    ///                         {
    ///                             Key = "key2",
    ///                             Value = "value2",
    ///                         },
    ///                     },
    ///                     PublishPorts = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerPublishPortArgs
    ///                         {
    ///                             ContainerPort = 80,
    ///                             HostPort = 80,
    ///                             Ip = "127.0.0.1",
    ///                             Protocol = "udp",
    ///                         },
    ///                     },
    ///                     Volumes = 
    ///                     {
    ///                         new Tencentcloud.Lighthouse.Inputs.InstanceContainerVolumeArgs
    ///                         {
    ///                             ContainerPath = "/var",
    ///                             HostPath = "/tmp",
    ///                         },
    ///                     },
    ///                 },
    ///             },
    ///             InstanceName = "hello world",
    ///             Period = 1,
    ///             RenewFlag = "NOTIFY_AND_AUTO_RENEW",
    ///             Zone = "ap-guangzhou-3",
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// </summary>
    [TencentcloudResourceType("tencentcloud:Lighthouse/instance:Instance")]
    public partial class Instance : Pulumi.CustomResource
    {
        /// <summary>
        /// ID of the Lighthouse image.
        /// </summary>
        [Output("blueprintId")]
        public Output<string> BlueprintId { get; private set; } = null!;

        /// <summary>
        /// ID of the Lighthouse package.
        /// </summary>
        [Output("bundleId")]
        public Output<string> BundleId { get; private set; } = null!;

        /// <summary>
        /// A unique string supplied by the client to ensure that the request is idempotent. Its maximum length is 64 ASCII characters. If this parameter is not specified, the idem-potency of the request cannot be guaranteed.
        /// </summary>
        [Output("clientToken")]
        public Output<string?> ClientToken { get; private set; } = null!;

        /// <summary>
        /// Configuration of the containers to create.
        /// </summary>
        [Output("containers")]
        public Output<ImmutableArray<Outputs.InstanceContainer>> Containers { get; private set; } = null!;

        /// <summary>
        /// Whether the request is a dry run only.true: dry run only. The request will not create instance(s). A dry run can check whether all the required parameters are specified, whether the request format is right, whether the request exceeds service limits, and whether the specified CVMs are available. If the dry run fails, the corresponding error code will be returned.If the dry run succeeds, the RequestId will be returned.false (default value): send a normal request and create instance(s) if all the requirements are met.
        /// </summary>
        [Output("dryRun")]
        public Output<bool?> DryRun { get; private set; } = null!;

        /// <summary>
        /// The display name of the Lighthouse instance.
        /// </summary>
        [Output("instanceName")]
        public Output<string> InstanceName { get; private set; } = null!;

        /// <summary>
        /// Login password of the instance. It is only available for Windows instances. If it is not specified, it means that the user choose to set the login password after the instance creation.
        /// </summary>
        [Output("loginConfiguration")]
        public Output<Outputs.InstanceLoginConfiguration?> LoginConfiguration { get; private set; } = null!;

        /// <summary>
        /// Subscription period in months. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.
        /// </summary>
        [Output("period")]
        public Output<int> Period { get; private set; } = null!;

        /// <summary>
        /// Auto-Renewal flag. Valid values: NOTIFY_AND_AUTO_RENEW: notify upon expiration and renew automatically; NOTIFY_AND_MANUAL_RENEW: notify upon expiration but do not renew automatically. You need to manually renew DISABLE_NOTIFY_AND_AUTO_RENEW: neither notify upon expiration nor renew automatically. Default value: NOTIFY_AND_MANUAL_RENEW.
        /// </summary>
        [Output("renewFlag")]
        public Output<string> RenewFlag { get; private set; } = null!;

        /// <summary>
        /// List of availability zones. A random AZ is selected by default.
        /// </summary>
        [Output("zone")]
        public Output<string?> Zone { get; private set; } = null!;


        /// <summary>
        /// Create a Instance resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public Instance(string name, InstanceArgs args, CustomResourceOptions? options = null)
            : base("tencentcloud:Lighthouse/instance:Instance", name, args ?? new InstanceArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Instance(string name, Input<string> id, InstanceState? state = null, CustomResourceOptions? options = null)
            : base("tencentcloud:Lighthouse/instance:Instance", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/tencentcloudstack",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing Instance resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static Instance Get(string name, Input<string> id, InstanceState? state = null, CustomResourceOptions? options = null)
        {
            return new Instance(name, id, state, options);
        }
    }

    public sealed class InstanceArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// ID of the Lighthouse image.
        /// </summary>
        [Input("blueprintId", required: true)]
        public Input<string> BlueprintId { get; set; } = null!;

        /// <summary>
        /// ID of the Lighthouse package.
        /// </summary>
        [Input("bundleId", required: true)]
        public Input<string> BundleId { get; set; } = null!;

        /// <summary>
        /// A unique string supplied by the client to ensure that the request is idempotent. Its maximum length is 64 ASCII characters. If this parameter is not specified, the idem-potency of the request cannot be guaranteed.
        /// </summary>
        [Input("clientToken")]
        public Input<string>? ClientToken { get; set; }

        [Input("containers")]
        private InputList<Inputs.InstanceContainerArgs>? _containers;

        /// <summary>
        /// Configuration of the containers to create.
        /// </summary>
        public InputList<Inputs.InstanceContainerArgs> Containers
        {
            get => _containers ?? (_containers = new InputList<Inputs.InstanceContainerArgs>());
            set => _containers = value;
        }

        /// <summary>
        /// Whether the request is a dry run only.true: dry run only. The request will not create instance(s). A dry run can check whether all the required parameters are specified, whether the request format is right, whether the request exceeds service limits, and whether the specified CVMs are available. If the dry run fails, the corresponding error code will be returned.If the dry run succeeds, the RequestId will be returned.false (default value): send a normal request and create instance(s) if all the requirements are met.
        /// </summary>
        [Input("dryRun")]
        public Input<bool>? DryRun { get; set; }

        /// <summary>
        /// The display name of the Lighthouse instance.
        /// </summary>
        [Input("instanceName", required: true)]
        public Input<string> InstanceName { get; set; } = null!;

        /// <summary>
        /// Login password of the instance. It is only available for Windows instances. If it is not specified, it means that the user choose to set the login password after the instance creation.
        /// </summary>
        [Input("loginConfiguration")]
        public Input<Inputs.InstanceLoginConfigurationArgs>? LoginConfiguration { get; set; }

        /// <summary>
        /// Subscription period in months. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.
        /// </summary>
        [Input("period", required: true)]
        public Input<int> Period { get; set; } = null!;

        /// <summary>
        /// Auto-Renewal flag. Valid values: NOTIFY_AND_AUTO_RENEW: notify upon expiration and renew automatically; NOTIFY_AND_MANUAL_RENEW: notify upon expiration but do not renew automatically. You need to manually renew DISABLE_NOTIFY_AND_AUTO_RENEW: neither notify upon expiration nor renew automatically. Default value: NOTIFY_AND_MANUAL_RENEW.
        /// </summary>
        [Input("renewFlag", required: true)]
        public Input<string> RenewFlag { get; set; } = null!;

        /// <summary>
        /// List of availability zones. A random AZ is selected by default.
        /// </summary>
        [Input("zone")]
        public Input<string>? Zone { get; set; }

        public InstanceArgs()
        {
        }
    }

    public sealed class InstanceState : Pulumi.ResourceArgs
    {
        /// <summary>
        /// ID of the Lighthouse image.
        /// </summary>
        [Input("blueprintId")]
        public Input<string>? BlueprintId { get; set; }

        /// <summary>
        /// ID of the Lighthouse package.
        /// </summary>
        [Input("bundleId")]
        public Input<string>? BundleId { get; set; }

        /// <summary>
        /// A unique string supplied by the client to ensure that the request is idempotent. Its maximum length is 64 ASCII characters. If this parameter is not specified, the idem-potency of the request cannot be guaranteed.
        /// </summary>
        [Input("clientToken")]
        public Input<string>? ClientToken { get; set; }

        [Input("containers")]
        private InputList<Inputs.InstanceContainerGetArgs>? _containers;

        /// <summary>
        /// Configuration of the containers to create.
        /// </summary>
        public InputList<Inputs.InstanceContainerGetArgs> Containers
        {
            get => _containers ?? (_containers = new InputList<Inputs.InstanceContainerGetArgs>());
            set => _containers = value;
        }

        /// <summary>
        /// Whether the request is a dry run only.true: dry run only. The request will not create instance(s). A dry run can check whether all the required parameters are specified, whether the request format is right, whether the request exceeds service limits, and whether the specified CVMs are available. If the dry run fails, the corresponding error code will be returned.If the dry run succeeds, the RequestId will be returned.false (default value): send a normal request and create instance(s) if all the requirements are met.
        /// </summary>
        [Input("dryRun")]
        public Input<bool>? DryRun { get; set; }

        /// <summary>
        /// The display name of the Lighthouse instance.
        /// </summary>
        [Input("instanceName")]
        public Input<string>? InstanceName { get; set; }

        /// <summary>
        /// Login password of the instance. It is only available for Windows instances. If it is not specified, it means that the user choose to set the login password after the instance creation.
        /// </summary>
        [Input("loginConfiguration")]
        public Input<Inputs.InstanceLoginConfigurationGetArgs>? LoginConfiguration { get; set; }

        /// <summary>
        /// Subscription period in months. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.
        /// </summary>
        [Input("period")]
        public Input<int>? Period { get; set; }

        /// <summary>
        /// Auto-Renewal flag. Valid values: NOTIFY_AND_AUTO_RENEW: notify upon expiration and renew automatically; NOTIFY_AND_MANUAL_RENEW: notify upon expiration but do not renew automatically. You need to manually renew DISABLE_NOTIFY_AND_AUTO_RENEW: neither notify upon expiration nor renew automatically. Default value: NOTIFY_AND_MANUAL_RENEW.
        /// </summary>
        [Input("renewFlag")]
        public Input<string>? RenewFlag { get; set; }

        /// <summary>
        /// List of availability zones. A random AZ is selected by default.
        /// </summary>
        [Input("zone")]
        public Input<string>? Zone { get; set; }

        public InstanceState()
        {
        }
    }
}
