<filename>sdk/dotnet/Eks.cs// *** WARNING: this file was generated by Pulumi SDK Generator. ***
// *** 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.CatalystsquadPlatform
{
    [CatalystsquadPlatformResourceType("catalystsquad-platform:index:Eks")]
    public partial class Eks : Pulumi.ComponentResource
    {
        [Output("cluster")]
        public Output<Pulumi.Aws.Eks.Cluster> Cluster { get; private set; } = null!;

        [Output("kubeConfig")]
        public Output<string> KubeConfig { get; private set; } = null!;

        [Output("kubernetesProvider")]
        public Output<Pulumi.Kubernetes.Provider?> KubernetesProvider { get; private set; } = null!;

        [Output("nodeGroupIAMRoleArn")]
        public Output<string?> NodeGroupIAMRoleArn { get; private set; } = null!;

        [Output("oidcProvider")]
        public Output<Pulumi.Aws.Iam.OpenIdConnectProvider> OidcProvider { get; private set; } = null!;


        /// <summary>
        /// Create a Eks 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 Eks(string name, EksArgs args, ComponentResourceOptions? options = null)
            : base("catalystsquad-platform:index:Eks", name, args ?? new EksArgs(), MakeResourceOptions(options, ""), remote: true)
        {
        }

        private static ComponentResourceOptions MakeResourceOptions(ComponentResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new ComponentResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "https://github.com/catalystsquad/pulumi-catalystsquad-platform/releases/download/v${VERSION}",
            };
            var merged = ComponentResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
    }

    public sealed class EksArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Optional, configures management of the eks auth configmap.
        /// </summary>
        [Input("authConfigmapConfig")]
        public Input<Inputs.AuthConfigMapConfigArgs>? AuthConfigmapConfig { get; set; }

        /// <summary>
        /// Optional, cluster autoscaler namespace for IRSA. Default: cluster-autoscaler
        /// </summary>
        [Input("clusterAutoscalerNamespace")]
        public Input<string>? ClusterAutoscalerNamespace { get; set; }

        /// <summary>
        /// Optional, cluster autoscaler service account name for IRSA. Default: cluster-autoscaler
        /// </summary>
        [Input("clusterAutoscalerServiceAccount")]
        public Input<string>? ClusterAutoscalerServiceAccount { get; set; }

        /// <summary>
        /// Optional, name of the EKS cluster. Default: &lt;stack name&gt;
        /// </summary>
        [Input("clusterName")]
        public Input<string>? ClusterName { get; set; }

        /// <summary>
        /// Optional, whether to enable cluster autoscaler IRSA resources. Default: true
        /// </summary>
        [Input("enableClusterAutoscalerResources")]
        public Input<bool>? EnableClusterAutoscalerResources { get; set; }

        /// <summary>
        /// Optional, whether to enable ECR access policy on nodegroups. Default: true
        /// </summary>
        [Input("enableECRAccess")]
        public Input<bool>? EnableECRAccess { get; set; }

        /// <summary>
        /// Optional, list of log types to enable on the cluster. Default: []
        /// </summary>
        [Input("enabledClusterLogTypes")]
        public Input<string>? EnabledClusterLogTypes { get; set; }

        /// <summary>
        /// Optional, k8s version of the EKS cluster. Default: 1.22.6
        /// </summary>
        [Input("k8sVersion")]
        public Input<string>? K8sVersion { get; set; }

        /// <summary>
        /// Optional, assume role arn to add to the kubeconfig.
        /// </summary>
        [Input("kubeConfigAssumeRoleArn")]
        public Input<string>? KubeConfigAssumeRoleArn { get; set; }

        /// <summary>
        /// Optional, AWS profile to add to the kubeconfig.
        /// </summary>
        [Input("kubeConfigAwsProfile")]
        public Input<string>? KubeConfigAwsProfile { get; set; }

        [Input("nodeGroupConfig", required: true)]
        private InputList<Inputs.EksNodeGroupArgs>? _nodeGroupConfig;

        /// <summary>
        /// Required, list of nodegroup configurations to create.
        /// </summary>
        public InputList<Inputs.EksNodeGroupArgs> NodeGroupConfig
        {
            get => _nodeGroupConfig ?? (_nodeGroupConfig = new InputList<Inputs.EksNodeGroupArgs>());
            set => _nodeGroupConfig = value;
        }

        /// <summary>
        /// Optional, k8s version of all node groups. Allows for upgrading the control plane before upgrading nodegroups. Default: &lt;k8sVersion&gt;
        /// </summary>
        [Input("nodeGroupVersion")]
        public Input<string>? NodeGroupVersion { get; set; }

        [Input("subnetIDs", required: true)]
        private InputList<string>? _subnetIDs;

        /// <summary>
        /// Required, list of subnet IDs to deploy the cluster and nodegroups to
        /// </summary>
        public InputList<string> SubnetIDs
        {
            get => _subnetIDs ?? (_subnetIDs = new InputList<string>());
            set => _subnetIDs = value;
        }

        public EksArgs()
        {
        }
    }
}
