// *** 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;

namespace Pulumi.AliCloud.Cfg
{
    /// <summary>
    /// Provides a Alicloud Config Configuration Recorder resource. Cloud Config is a specialized service for evaluating resources. Cloud Config tracks configuration changes of your resources and evaluates configuration compliance. Cloud Config can help you evaluate numerous resources and maintain the continuous compliance of your cloud infrastructure.
    /// For information about Alicloud Config Configuration Recorder and how to use it, see [What is Configuration Recorder.](https://www.alibabacloud.com/help/en/doc-detail/153156.html)
    /// 
    /// &gt; **NOTE:** Available in v1.99.0+.
    /// 
    /// &gt; **NOTE:** The Cloud Config region only support `cn-shanghai` and `ap-southeast-1`.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var example = new AliCloud.Cfg.ConfigurationRecorder("example", new()
    ///     {
    ///         ResourceTypes = new[]
    ///         {
    ///             "ACS::ECS::Instance",
    ///             "ACS::ECS::Disk",
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Alicloud Config Configuration Recorder can be imported using the id, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import alicloud:cfg/configurationRecorder:ConfigurationRecorder example 122378463********
    /// ```
    /// </summary>
    [AliCloudResourceType("alicloud:cfg/configurationRecorder:ConfigurationRecorder")]
    public partial class ConfigurationRecorder : global::Pulumi.CustomResource
    {
        [Output("enterpriseEdition")]
        public Output<bool> EnterpriseEdition { get; private set; } = null!;

        /// <summary>
        /// Enterprise version configuration audit enabled status. Values: `REGISTRABLE`: Not enabled, `BUILDING`: Building and `REGISTERED`: Enabled.
        /// </summary>
        [Output("organizationEnableStatus")]
        public Output<string> OrganizationEnableStatus { get; private set; } = null!;

        /// <summary>
        /// The ID of the Enterprise management account.
        /// </summary>
        [Output("organizationMasterId")]
        public Output<int> OrganizationMasterId { get; private set; } = null!;

        /// <summary>
        /// A list of resource types to be monitored. [Resource types that support Cloud Config.](https://www.alibabacloud.com/help/en/doc-detail/127411.htm)
        /// * If you use an ordinary account, the `resource_types` supports the update operation after the process of creation is completed.
        /// * If you use an enterprise account, the `resource_types` does not support updating.
        /// </summary>
        [Output("resourceTypes")]
        public Output<ImmutableArray<string>> ResourceTypes { get; private set; } = null!;

        /// <summary>
        /// Status of resource monitoring. Values: `REGISTRABLE`: Not registered, `BUILDING`: Under construction, `REGISTERED`: Registered and `REBUILDING`: Rebuilding.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;


        /// <summary>
        /// Create a ConfigurationRecorder 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 ConfigurationRecorder(string name, ConfigurationRecorderArgs? args = null, CustomResourceOptions? options = null)
            : base("alicloud:cfg/configurationRecorder:ConfigurationRecorder", name, args ?? new ConfigurationRecorderArgs(), MakeResourceOptions(options, ""))
        {
        }

        private ConfigurationRecorder(string name, Input<string> id, ConfigurationRecorderState? state = null, CustomResourceOptions? options = null)
            : base("alicloud:cfg/configurationRecorder:ConfigurationRecorder", 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/rhysmdnz/pulumi-alicloud",
            };
            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 ConfigurationRecorder 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 ConfigurationRecorder Get(string name, Input<string> id, ConfigurationRecorderState? state = null, CustomResourceOptions? options = null)
        {
            return new ConfigurationRecorder(name, id, state, options);
        }
    }

    public sealed class ConfigurationRecorderArgs : global::Pulumi.ResourceArgs
    {
        [Input("enterpriseEdition")]
        public Input<bool>? EnterpriseEdition { get; set; }

        [Input("resourceTypes")]
        private InputList<string>? _resourceTypes;

        /// <summary>
        /// A list of resource types to be monitored. [Resource types that support Cloud Config.](https://www.alibabacloud.com/help/en/doc-detail/127411.htm)
        /// * If you use an ordinary account, the `resource_types` supports the update operation after the process of creation is completed.
        /// * If you use an enterprise account, the `resource_types` does not support updating.
        /// </summary>
        public InputList<string> ResourceTypes
        {
            get => _resourceTypes ?? (_resourceTypes = new InputList<string>());
            set => _resourceTypes = value;
        }

        public ConfigurationRecorderArgs()
        {
        }
        public static new ConfigurationRecorderArgs Empty => new ConfigurationRecorderArgs();
    }

    public sealed class ConfigurationRecorderState : global::Pulumi.ResourceArgs
    {
        [Input("enterpriseEdition")]
        public Input<bool>? EnterpriseEdition { get; set; }

        /// <summary>
        /// Enterprise version configuration audit enabled status. Values: `REGISTRABLE`: Not enabled, `BUILDING`: Building and `REGISTERED`: Enabled.
        /// </summary>
        [Input("organizationEnableStatus")]
        public Input<string>? OrganizationEnableStatus { get; set; }

        /// <summary>
        /// The ID of the Enterprise management account.
        /// </summary>
        [Input("organizationMasterId")]
        public Input<int>? OrganizationMasterId { get; set; }

        [Input("resourceTypes")]
        private InputList<string>? _resourceTypes;

        /// <summary>
        /// A list of resource types to be monitored. [Resource types that support Cloud Config.](https://www.alibabacloud.com/help/en/doc-detail/127411.htm)
        /// * If you use an ordinary account, the `resource_types` supports the update operation after the process of creation is completed.
        /// * If you use an enterprise account, the `resource_types` does not support updating.
        /// </summary>
        public InputList<string> ResourceTypes
        {
            get => _resourceTypes ?? (_resourceTypes = new InputList<string>());
            set => _resourceTypes = value;
        }

        /// <summary>
        /// Status of resource monitoring. Values: `REGISTRABLE`: Not registered, `BUILDING`: Under construction, `REGISTERED`: Registered and `REBUILDING`: Rebuilding.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        public ConfigurationRecorderState()
        {
        }
        public static new ConfigurationRecorderState Empty => new ConfigurationRecorderState();
    }
}
