// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.arckubernetes;

import com.pulumi.azure.Utilities;
import com.pulumi.azure.arckubernetes.ClusterArgs;
import com.pulumi.azure.arckubernetes.inputs.ClusterState;
import com.pulumi.azure.arckubernetes.outputs.ClusterIdentity;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Export;
import com.pulumi.core.annotations.ResourceType;
import com.pulumi.core.internal.Codegen;
import java.lang.Integer;
import java.lang.String;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;

/**
 * ## Import
 * 
 * Arc Kubernetes Cluster can be imported using the `resource id`, e.g.
 * 
 * ```sh
 *  $ pulumi import azure:arckubernetes/cluster:Cluster example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup1/providers/Microsoft.Kubernetes/connectedClusters/cluster1
 * ```
 * 
 */
@ResourceType(type="azure:arckubernetes/cluster:Cluster")
public class Cluster extends com.pulumi.resources.CustomResource {
    /**
     * Specifies the base64-encoded public certificate used by the agent to do the initial handshake to the backend services in Azure. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    @Export(name="agentPublicKeyCertificate", refs={String.class}, tree="[0]")
    private Output<String> agentPublicKeyCertificate;

    /**
     * @return Specifies the base64-encoded public certificate used by the agent to do the initial handshake to the backend services in Azure. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    public Output<String> agentPublicKeyCertificate() {
        return this.agentPublicKeyCertificate;
    }
    /**
     * Version of the agent running on the cluster resource.
     * 
     */
    @Export(name="agentVersion", refs={String.class}, tree="[0]")
    private Output<String> agentVersion;

    /**
     * @return Version of the agent running on the cluster resource.
     * 
     */
    public Output<String> agentVersion() {
        return this.agentVersion;
    }
    /**
     * The distribution running on this Arc Kubernetes Cluster.
     * 
     */
    @Export(name="distribution", refs={String.class}, tree="[0]")
    private Output<String> distribution;

    /**
     * @return The distribution running on this Arc Kubernetes Cluster.
     * 
     */
    public Output<String> distribution() {
        return this.distribution;
    }
    /**
     * An `identity` block as defined below. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    @Export(name="identity", refs={ClusterIdentity.class}, tree="[0]")
    private Output<ClusterIdentity> identity;

    /**
     * @return An `identity` block as defined below. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    public Output<ClusterIdentity> identity() {
        return this.identity;
    }
    /**
     * The infrastructure on which the Arc Kubernetes Cluster is running on.
     * 
     */
    @Export(name="infrastructure", refs={String.class}, tree="[0]")
    private Output<String> infrastructure;

    /**
     * @return The infrastructure on which the Arc Kubernetes Cluster is running on.
     * 
     */
    public Output<String> infrastructure() {
        return this.infrastructure;
    }
    /**
     * The Kubernetes version of the cluster resource.
     * 
     */
    @Export(name="kubernetesVersion", refs={String.class}, tree="[0]")
    private Output<String> kubernetesVersion;

    /**
     * @return The Kubernetes version of the cluster resource.
     * 
     */
    public Output<String> kubernetesVersion() {
        return this.kubernetesVersion;
    }
    /**
     * Specifies the Azure Region where the Arc Kubernetes Cluster should exist. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    @Export(name="location", refs={String.class}, tree="[0]")
    private Output<String> location;

    /**
     * @return Specifies the Azure Region where the Arc Kubernetes Cluster should exist. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    public Output<String> location() {
        return this.location;
    }
    /**
     * Specifies the name which should be used for this Arc Kubernetes Cluster. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    @Export(name="name", refs={String.class}, tree="[0]")
    private Output<String> name;

    /**
     * @return Specifies the name which should be used for this Arc Kubernetes Cluster. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    public Output<String> name() {
        return this.name;
    }
    /**
     * The cluster offering.
     * 
     */
    @Export(name="offering", refs={String.class}, tree="[0]")
    private Output<String> offering;

    /**
     * @return The cluster offering.
     * 
     */
    public Output<String> offering() {
        return this.offering;
    }
    /**
     * Specifies the name of the Resource Group where the Arc Kubernetes Cluster should exist. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    @Export(name="resourceGroupName", refs={String.class}, tree="[0]")
    private Output<String> resourceGroupName;

    /**
     * @return Specifies the name of the Resource Group where the Arc Kubernetes Cluster should exist. Changing this forces a new Arc Kubernetes Cluster to be created.
     * 
     */
    public Output<String> resourceGroupName() {
        return this.resourceGroupName;
    }
    /**
     * A mapping of tags which should be assigned to the Arc Kubernetes Cluster.
     * 
     */
    @Export(name="tags", refs={Map.class,String.class}, tree="[0,1,1]")
    private Output</* @Nullable */ Map<String,String>> tags;

    /**
     * @return A mapping of tags which should be assigned to the Arc Kubernetes Cluster.
     * 
     */
    public Output<Optional<Map<String,String>>> tags() {
        return Codegen.optional(this.tags);
    }
    /**
     * Number of CPU cores present in the cluster resource.
     * 
     */
    @Export(name="totalCoreCount", refs={Integer.class}, tree="[0]")
    private Output<Integer> totalCoreCount;

    /**
     * @return Number of CPU cores present in the cluster resource.
     * 
     */
    public Output<Integer> totalCoreCount() {
        return this.totalCoreCount;
    }
    /**
     * Number of nodes present in the cluster resource.
     * 
     */
    @Export(name="totalNodeCount", refs={Integer.class}, tree="[0]")
    private Output<Integer> totalNodeCount;

    /**
     * @return Number of nodes present in the cluster resource.
     * 
     */
    public Output<Integer> totalNodeCount() {
        return this.totalNodeCount;
    }

    /**
     *
     * @param name The _unique_ name of the resulting resource.
     */
    public Cluster(String name) {
        this(name, ClusterArgs.Empty);
    }
    /**
     *
     * @param name The _unique_ name of the resulting resource.
     * @param args The arguments to use to populate this resource's properties.
     */
    public Cluster(String name, ClusterArgs args) {
        this(name, args, null);
    }
    /**
     *
     * @param name The _unique_ name of the resulting resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param options A bag of options that control this resource's behavior.
     */
    public Cluster(String name, ClusterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) {
        super("azure:arckubernetes/cluster:Cluster", name, args == null ? ClusterArgs.Empty : args, makeResourceOptions(options, Codegen.empty()));
    }

    private Cluster(String name, Output<String> id, @Nullable ClusterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) {
        super("azure:arckubernetes/cluster:Cluster", name, state, makeResourceOptions(options, id));
    }

    private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output<String> id) {
        var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder()
            .version(Utilities.getVersion())
            .build();
        return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id);
    }

    /**
     * Get an existing Host resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state
     * @param options Optional settings to control the behavior of the CustomResource.
     */
    public static Cluster get(String name, Output<String> id, @Nullable ClusterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) {
        return new Cluster(name, id, state, options);
    }
}
