<filename>sdk/dotnet/Metal/Cluster.cs<gh_stars>0// *** 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.AwsEksa.Metal
{
    [AwsEksaResourceType("aws-eksa:metal:Cluster")]
    public partial class Cluster : Pulumi.ComponentResource
    {
        /// <summary>
        /// The IP address of the admin server
        /// </summary>
        [Output("adminIp")]
        public Output<string> AdminIp { get; private set; } = null!;

        /// <summary>
        /// The private SSH key to connect to the nodes
        /// </summary>
        [Output("privateSshKey")]
        public Output<string> PrivateSshKey { get; private set; } = null!;


        /// <summary>
        /// Create a Cluster 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 Cluster(string name, ClusterArgs args, ComponentResourceOptions? options = null)
            : base("aws-eksa:metal:Cluster", name, args ?? new ClusterArgs(), MakeResourceOptions(options, ""), remote: true)
        {
        }

        private static ComponentResourceOptions MakeResourceOptions(ComponentResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new ComponentResourceOptions
            {
                Version = Utilities.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 ClusterArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// The name of your EKSA Metal Cluster
        /// </summary>
        [Input("clusterName", required: true)]
        public Input<string> ClusterName { get; set; } = null!;

        /// <summary>
        /// The number of control plane nodes. Set to 3 or 5 for a highly available setup
        /// </summary>
        [Input("controlPlaneCount")]
        public double? ControlPlaneCount { get; set; }

        /// <summary>
        /// Device type for the control plane nodes
        /// </summary>
        [Input("controlPlaneDeviceType")]
        public Input<string>? ControlPlaneDeviceType { get; set; }

        /// <summary>
        /// The number of data plane nodes
        /// </summary>
        [Input("dataPlaneCount")]
        public double? DataPlaneCount { get; set; }

        /// <summary>
        /// Device type for the data plane nodes
        /// </summary>
        [Input("dataPlaneDeviceType")]
        public Input<string>? DataPlaneDeviceType { get; set; }

        /// <summary>
        /// The metro to deploy this cluster to
        /// </summary>
        [Input("metro", required: true)]
        public Input<string> Metro { get; set; } = null!;

        /// <summary>
        /// The project to deploy this cluster to
        /// </summary>
        [Input("projectId", required: true)]
        public Input<string> ProjectId { get; set; } = null!;

        public ClusterArgs()
        {
            ControlPlaneCount = 1;
            ControlPlaneDeviceType = "c3.small.x86";
            DataPlaneCount = 1;
            DataPlaneDeviceType = "c3.small.x86";
        }
    }
}
