import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Cluster contains information about a Google Distributed Cloud Edge Kubernetes cluster.
 *
 * To get more information about Cluster, see:
 *
 * * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/container/rest/v1/projects.locations.clusters)
 * * How-to Guides
 *     * [Create and manage clusters](https://cloud.google.com/distributed-cloud/edge/latest/docs/clusters)
 *
 * ## Example Usage
 *
 * ### Edgecontainer Cluster
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const project = gcp.organizations.getProject({});
 * const _default = new gcp.edgecontainer.Cluster("default", {
 *     name: "basic-cluster",
 *     location: "us-central1",
 *     authorization: {
 *         adminUsers: {
 *             username: "admin@hashicorptest.com",
 *         },
 *     },
 *     networking: {
 *         clusterIpv4CidrBlocks: ["10.0.0.0/16"],
 *         servicesIpv4CidrBlocks: ["10.1.0.0/16"],
 *     },
 *     fleet: {
 *         project: project.then(project => `projects/${project.number}`),
 *     },
 *     labels: {
 *         my_key: "my_val",
 *         other_key: "other_val",
 *     },
 * });
 * ```
 * ### Edgecontainer Cluster With Maintenance Window
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const project = gcp.organizations.getProject({});
 * const _default = new gcp.edgecontainer.Cluster("default", {
 *     name: "cluster-with-maintenance",
 *     location: "us-central1",
 *     authorization: {
 *         adminUsers: {
 *             username: "admin@hashicorptest.com",
 *         },
 *     },
 *     networking: {
 *         clusterIpv4CidrBlocks: ["10.0.0.0/16"],
 *         servicesIpv4CidrBlocks: ["10.1.0.0/16"],
 *     },
 *     fleet: {
 *         project: project.then(project => `projects/${project.number}`),
 *     },
 *     maintenancePolicy: {
 *         window: {
 *             recurringWindow: {
 *                 window: {
 *                     startTime: "2023-01-01T08:00:00Z",
 *                     endTime: "2023-01-01T17:00:00Z",
 *                 },
 *                 recurrence: "FREQ=WEEKLY;BYDAY=SA",
 *             },
 *         },
 *     },
 * });
 * ```
 * ### Edgecontainer Local Control Plane Cluster
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const project = gcp.organizations.getProject({});
 * const _default = new gcp.edgecontainer.Cluster("default", {
 *     name: "local-control-plane-cluster",
 *     location: "us-central1",
 *     authorization: {
 *         adminUsers: {
 *             username: "admin@hashicorptest.com",
 *         },
 *     },
 *     networking: {
 *         clusterIpv4CidrBlocks: ["10.0.0.0/16"],
 *         servicesIpv4CidrBlocks: ["10.1.0.0/16"],
 *     },
 *     fleet: {
 *         project: project.then(project => `projects/${project.number}`),
 *     },
 *     externalLoadBalancerIpv4AddressPools: ["10.100.0.0-10.100.0.10"],
 *     controlPlane: {
 *         local: {
 *             nodeLocation: "us-central1-edge-example-edgesite",
 *             nodeCount: 1,
 *             machineFilter: "machine-name",
 *             sharedDeploymentPolicy: "ALLOWED",
 *         },
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * Cluster can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/locations/{{location}}/clusters/{{name}}`
 *
 * * `{{project}}/{{location}}/{{name}}`
 *
 * * `{{location}}/{{name}}`
 *
 * When using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:edgecontainer/cluster:Cluster default projects/{{project}}/locations/{{location}}/clusters/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:edgecontainer/cluster:Cluster default {{project}}/{{location}}/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:edgecontainer/cluster:Cluster default {{location}}/{{name}}
 * ```
 */
export declare class Cluster extends pulumi.CustomResource {
    /**
     * Get an existing Cluster 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 Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: ClusterState, opts?: pulumi.CustomResourceOptions): Cluster;
    /**
     * Returns true if the given object is an instance of Cluster.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Cluster;
    /**
     * RBAC policy that will be applied and managed by GEC.
     * Structure is documented below.
     */
    readonly authorization: pulumi.Output<outputs.edgecontainer.ClusterAuthorization>;
    /**
     * The PEM-encoded public certificate of the cluster's CA.
     * **Note**: This property is sensitive and will not be displayed in the plan.
     */
    readonly clusterCaCertificate: pulumi.Output<string>;
    /**
     * The configuration of the cluster control plane.
     */
    readonly controlPlane: pulumi.Output<outputs.edgecontainer.ClusterControlPlane | undefined>;
    /**
     * Remote control plane disk encryption options. This field is only used when enabling CMEK support.
     */
    readonly controlPlaneEncryption: pulumi.Output<outputs.edgecontainer.ClusterControlPlaneEncryption>;
    /**
     * The control plane release version.
     */
    readonly controlPlaneVersion: pulumi.Output<string>;
    /**
     * (Output)
     * The time when the maintenance event request was created.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * The default maximum number of pods per node used if a maximum value is not specified explicitly for a node pool in this
     * cluster. If unspecified, the Kubernetes default value will be used.
     */
    readonly defaultMaxPodsPerNode: pulumi.Output<number>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    readonly effectiveLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * The IP address of the Kubernetes API server.
     */
    readonly endpoint: pulumi.Output<string>;
    /**
     * Address pools for cluster data plane external load balancing.
     */
    readonly externalLoadBalancerIpv4AddressPools: pulumi.Output<string[]>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    readonly fleet: pulumi.Output<outputs.edgecontainer.ClusterFleet>;
    /**
     * User-defined labels for the edgecloud cluster. **Note**: This field is non-authoritative, and will only manage the
     * labels present in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the
     * resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The location of the resource.
     */
    readonly location: pulumi.Output<string>;
    /**
     * All the maintenance events scheduled for the cluster, including the ones
     * ongoing, planned for the future and done in the past (up to 90 days).
     * Structure is documented below.
     */
    readonly maintenanceEvents: pulumi.Output<outputs.edgecontainer.ClusterMaintenanceEvent[]>;
    /**
     * Cluster-wide maintenance policy configuration.
     */
    readonly maintenancePolicy: pulumi.Output<outputs.edgecontainer.ClusterMaintenancePolicy>;
    /**
     * The GDCE cluster name.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    readonly networking: pulumi.Output<outputs.edgecontainer.ClusterNetworking>;
    /**
     * The lowest release version among all worker nodes. This field can be empty
     * if the cluster does not have any worker nodes.
     */
    readonly nodeVersion: pulumi.Output<string>;
    /**
     * The port number of the Kubernetes API server.
     */
    readonly port: pulumi.Output<number>;
    readonly project: pulumi.Output<string>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * The release channel a cluster is subscribed to. Possible values: ["RELEASE_CHANNEL_UNSPECIFIED", "NONE", "REGULAR"]
     */
    readonly releaseChannel: pulumi.Output<string>;
    /**
     * Indicates the status of the cluster.
     */
    readonly status: pulumi.Output<string>;
    /**
     * Config that customers are allowed to define for GDCE system add-ons.
     */
    readonly systemAddonsConfig: pulumi.Output<outputs.edgecontainer.ClusterSystemAddonsConfig>;
    /**
     * (Output)
     * The target version of the cluster.
     */
    readonly targetVersion: pulumi.Output<string>;
    /**
     * (Output)
     * The time when the maintenance event message was updated.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Create a Cluster resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: ClusterArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Cluster resources.
 */
export interface ClusterState {
    /**
     * RBAC policy that will be applied and managed by GEC.
     * Structure is documented below.
     */
    authorization?: pulumi.Input<inputs.edgecontainer.ClusterAuthorization>;
    /**
     * The PEM-encoded public certificate of the cluster's CA.
     * **Note**: This property is sensitive and will not be displayed in the plan.
     */
    clusterCaCertificate?: pulumi.Input<string>;
    /**
     * The configuration of the cluster control plane.
     */
    controlPlane?: pulumi.Input<inputs.edgecontainer.ClusterControlPlane>;
    /**
     * Remote control plane disk encryption options. This field is only used when enabling CMEK support.
     */
    controlPlaneEncryption?: pulumi.Input<inputs.edgecontainer.ClusterControlPlaneEncryption>;
    /**
     * The control plane release version.
     */
    controlPlaneVersion?: pulumi.Input<string>;
    /**
     * (Output)
     * The time when the maintenance event request was created.
     */
    createTime?: pulumi.Input<string>;
    /**
     * The default maximum number of pods per node used if a maximum value is not specified explicitly for a node pool in this
     * cluster. If unspecified, the Kubernetes default value will be used.
     */
    defaultMaxPodsPerNode?: pulumi.Input<number>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    effectiveLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The IP address of the Kubernetes API server.
     */
    endpoint?: pulumi.Input<string>;
    /**
     * Address pools for cluster data plane external load balancing.
     */
    externalLoadBalancerIpv4AddressPools?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    fleet?: pulumi.Input<inputs.edgecontainer.ClusterFleet>;
    /**
     * User-defined labels for the edgecloud cluster. **Note**: This field is non-authoritative, and will only manage the
     * labels present in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the
     * resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The location of the resource.
     */
    location?: pulumi.Input<string>;
    /**
     * All the maintenance events scheduled for the cluster, including the ones
     * ongoing, planned for the future and done in the past (up to 90 days).
     * Structure is documented below.
     */
    maintenanceEvents?: pulumi.Input<pulumi.Input<inputs.edgecontainer.ClusterMaintenanceEvent>[]>;
    /**
     * Cluster-wide maintenance policy configuration.
     */
    maintenancePolicy?: pulumi.Input<inputs.edgecontainer.ClusterMaintenancePolicy>;
    /**
     * The GDCE cluster name.
     */
    name?: pulumi.Input<string>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    networking?: pulumi.Input<inputs.edgecontainer.ClusterNetworking>;
    /**
     * The lowest release version among all worker nodes. This field can be empty
     * if the cluster does not have any worker nodes.
     */
    nodeVersion?: pulumi.Input<string>;
    /**
     * The port number of the Kubernetes API server.
     */
    port?: pulumi.Input<number>;
    project?: pulumi.Input<string>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The release channel a cluster is subscribed to. Possible values: ["RELEASE_CHANNEL_UNSPECIFIED", "NONE", "REGULAR"]
     */
    releaseChannel?: pulumi.Input<string>;
    /**
     * Indicates the status of the cluster.
     */
    status?: pulumi.Input<string>;
    /**
     * Config that customers are allowed to define for GDCE system add-ons.
     */
    systemAddonsConfig?: pulumi.Input<inputs.edgecontainer.ClusterSystemAddonsConfig>;
    /**
     * (Output)
     * The target version of the cluster.
     */
    targetVersion?: pulumi.Input<string>;
    /**
     * (Output)
     * The time when the maintenance event message was updated.
     */
    updateTime?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a Cluster resource.
 */
export interface ClusterArgs {
    /**
     * RBAC policy that will be applied and managed by GEC.
     * Structure is documented below.
     */
    authorization: pulumi.Input<inputs.edgecontainer.ClusterAuthorization>;
    /**
     * The configuration of the cluster control plane.
     */
    controlPlane?: pulumi.Input<inputs.edgecontainer.ClusterControlPlane>;
    /**
     * Remote control plane disk encryption options. This field is only used when enabling CMEK support.
     */
    controlPlaneEncryption?: pulumi.Input<inputs.edgecontainer.ClusterControlPlaneEncryption>;
    /**
     * The default maximum number of pods per node used if a maximum value is not specified explicitly for a node pool in this
     * cluster. If unspecified, the Kubernetes default value will be used.
     */
    defaultMaxPodsPerNode?: pulumi.Input<number>;
    /**
     * Address pools for cluster data plane external load balancing.
     */
    externalLoadBalancerIpv4AddressPools?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    fleet: pulumi.Input<inputs.edgecontainer.ClusterFleet>;
    /**
     * User-defined labels for the edgecloud cluster. **Note**: This field is non-authoritative, and will only manage the
     * labels present in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the
     * resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The location of the resource.
     */
    location: pulumi.Input<string>;
    /**
     * Cluster-wide maintenance policy configuration.
     */
    maintenancePolicy?: pulumi.Input<inputs.edgecontainer.ClusterMaintenancePolicy>;
    /**
     * The GDCE cluster name.
     */
    name?: pulumi.Input<string>;
    /**
     * Fleet related configuration.
     * Fleets are a Google Cloud concept for logically organizing clusters,
     * letting you use and manage multi-cluster capabilities and apply
     * consistent policies across your systems.
     * Structure is documented below.
     */
    networking: pulumi.Input<inputs.edgecontainer.ClusterNetworking>;
    project?: pulumi.Input<string>;
    /**
     * The release channel a cluster is subscribed to. Possible values: ["RELEASE_CHANNEL_UNSPECIFIED", "NONE", "REGULAR"]
     */
    releaseChannel?: pulumi.Input<string>;
    /**
     * Config that customers are allowed to define for GDCE system add-ons.
     */
    systemAddonsConfig?: pulumi.Input<inputs.edgecontainer.ClusterSystemAddonsConfig>;
    /**
     * (Output)
     * The target version of the cluster.
     */
    targetVersion?: pulumi.Input<string>;
}
