# coding=utf-8
# *** 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! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['BareMetalAdminClusterArgs', 'BareMetalAdminCluster']

@pulumi.input_type
class BareMetalAdminClusterArgs:
    def __init__(__self__, *,
                 location: pulumi.Input[str],
                 annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 bare_metal_version: Optional[pulumi.Input[str]] = None,
                 cluster_operations: Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']] = None,
                 control_plane: Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 load_balancer: Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']] = None,
                 maintenance_config: Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_config: Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']] = None,
                 node_access_config: Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']] = None,
                 node_config: Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 proxy: Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']] = None,
                 security_config: Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']] = None,
                 storage: Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']] = None):
        """
        The set of arguments for constructing a BareMetalAdminCluster resource.
        :param pulumi.Input[str] location: The location of the resource.
               
               
               - - -
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations on the Bare Metal Admin Cluster.
               This field has the same restrictions as Kubernetes annotations.
               The total size of all keys and values combined is limited to 256k.
               Key can have 2 segments: prefix (optional) and name (required),
               separated by a slash (/).
               Prefix must be a DNS subdomain.
               Name must be 63 characters or less, begin and end with alphanumerics,
               with dashes (-), underscores (_), dots (.), and alphanumerics between.
        :param pulumi.Input[str] bare_metal_version: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input['BareMetalAdminClusterClusterOperationsArgs'] cluster_operations: Specifies the Admin Cluster's observability infrastructure.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterControlPlaneArgs'] control_plane: Specifies the control plane configuration.
               Structure is documented below.
        :param pulumi.Input[str] description: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input['BareMetalAdminClusterLoadBalancerArgs'] load_balancer: Specifies the load balancer configuration.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs'] maintenance_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] name: The bare metal admin cluster name.
        :param pulumi.Input['BareMetalAdminClusterNetworkConfigArgs'] network_config: Network configuration.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs'] node_access_config: Specifies the node access related settings for the bare metal user cluster.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterNodeConfigArgs'] node_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input['BareMetalAdminClusterProxyArgs'] proxy: Specifies the cluster proxy configuration.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterSecurityConfigArgs'] security_config: Specifies the security related settings for the Bare Metal User Cluster.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterStorageArgs'] storage: Specifies the cluster storage configuration.
               Structure is documented below.
        """
        pulumi.set(__self__, "location", location)
        if annotations is not None:
            pulumi.set(__self__, "annotations", annotations)
        if bare_metal_version is not None:
            pulumi.set(__self__, "bare_metal_version", bare_metal_version)
        if cluster_operations is not None:
            pulumi.set(__self__, "cluster_operations", cluster_operations)
        if control_plane is not None:
            pulumi.set(__self__, "control_plane", control_plane)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if load_balancer is not None:
            pulumi.set(__self__, "load_balancer", load_balancer)
        if maintenance_config is not None:
            pulumi.set(__self__, "maintenance_config", maintenance_config)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_config is not None:
            pulumi.set(__self__, "network_config", network_config)
        if node_access_config is not None:
            pulumi.set(__self__, "node_access_config", node_access_config)
        if node_config is not None:
            pulumi.set(__self__, "node_config", node_config)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if proxy is not None:
            pulumi.set(__self__, "proxy", proxy)
        if security_config is not None:
            pulumi.set(__self__, "security_config", security_config)
        if storage is not None:
            pulumi.set(__self__, "storage", storage)

    @property
    @pulumi.getter
    def location(self) -> pulumi.Input[str]:
        """
        The location of the resource.


        - - -
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: pulumi.Input[str]):
        pulumi.set(self, "location", value)

    @property
    @pulumi.getter
    def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Annotations on the Bare Metal Admin Cluster.
        This field has the same restrictions as Kubernetes annotations.
        The total size of all keys and values combined is limited to 256k.
        Key can have 2 segments: prefix (optional) and name (required),
        separated by a slash (/).
        Prefix must be a DNS subdomain.
        Name must be 63 characters or less, begin and end with alphanumerics,
        with dashes (-), underscores (_), dots (.), and alphanumerics between.
        """
        return pulumi.get(self, "annotations")

    @annotations.setter
    def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "annotations", value)

    @property
    @pulumi.getter(name="bareMetalVersion")
    def bare_metal_version(self) -> Optional[pulumi.Input[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "bare_metal_version")

    @bare_metal_version.setter
    def bare_metal_version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "bare_metal_version", value)

    @property
    @pulumi.getter(name="clusterOperations")
    def cluster_operations(self) -> Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']]:
        """
        Specifies the Admin Cluster's observability infrastructure.
        Structure is documented below.
        """
        return pulumi.get(self, "cluster_operations")

    @cluster_operations.setter
    def cluster_operations(self, value: Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']]):
        pulumi.set(self, "cluster_operations", value)

    @property
    @pulumi.getter(name="controlPlane")
    def control_plane(self) -> Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']]:
        """
        Specifies the control plane configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "control_plane")

    @control_plane.setter
    def control_plane(self, value: Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']]):
        pulumi.set(self, "control_plane", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter(name="loadBalancer")
    def load_balancer(self) -> Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']]:
        """
        Specifies the load balancer configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "load_balancer")

    @load_balancer.setter
    def load_balancer(self, value: Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']]):
        pulumi.set(self, "load_balancer", value)

    @property
    @pulumi.getter(name="maintenanceConfig")
    def maintenance_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "maintenance_config")

    @maintenance_config.setter
    def maintenance_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']]):
        pulumi.set(self, "maintenance_config", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The bare metal admin cluster name.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="networkConfig")
    def network_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']]:
        """
        Network configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "network_config")

    @network_config.setter
    def network_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']]):
        pulumi.set(self, "network_config", value)

    @property
    @pulumi.getter(name="nodeAccessConfig")
    def node_access_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']]:
        """
        Specifies the node access related settings for the bare metal user cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "node_access_config")

    @node_access_config.setter
    def node_access_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']]):
        pulumi.set(self, "node_access_config", value)

    @property
    @pulumi.getter(name="nodeConfig")
    def node_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "node_config")

    @node_config.setter
    def node_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']]):
        pulumi.set(self, "node_config", value)

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @project.setter
    def project(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "project", value)

    @property
    @pulumi.getter
    def proxy(self) -> Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']]:
        """
        Specifies the cluster proxy configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "proxy")

    @proxy.setter
    def proxy(self, value: Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']]):
        pulumi.set(self, "proxy", value)

    @property
    @pulumi.getter(name="securityConfig")
    def security_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']]:
        """
        Specifies the security related settings for the Bare Metal User Cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "security_config")

    @security_config.setter
    def security_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']]):
        pulumi.set(self, "security_config", value)

    @property
    @pulumi.getter
    def storage(self) -> Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']]:
        """
        Specifies the cluster storage configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "storage")

    @storage.setter
    def storage(self, value: Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']]):
        pulumi.set(self, "storage", value)


@pulumi.input_type
class _BareMetalAdminClusterState:
    def __init__(__self__, *,
                 annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 bare_metal_version: Optional[pulumi.Input[str]] = None,
                 cluster_operations: Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']] = None,
                 control_plane: Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']] = None,
                 create_time: Optional[pulumi.Input[str]] = None,
                 delete_time: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 endpoint: Optional[pulumi.Input[str]] = None,
                 etag: Optional[pulumi.Input[str]] = None,
                 fleets: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterFleetArgs']]]] = None,
                 load_balancer: Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']] = None,
                 local_name: Optional[pulumi.Input[str]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 maintenance_config: Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_config: Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']] = None,
                 node_access_config: Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']] = None,
                 node_config: Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 proxy: Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']] = None,
                 reconciling: Optional[pulumi.Input[bool]] = None,
                 security_config: Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 statuses: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterStatusArgs']]]] = None,
                 storage: Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']] = None,
                 uid: Optional[pulumi.Input[str]] = None,
                 update_time: Optional[pulumi.Input[str]] = None,
                 validation_checks: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterValidationCheckArgs']]]] = None):
        """
        Input properties used for looking up and filtering BareMetalAdminCluster resources.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations on the Bare Metal Admin Cluster.
               This field has the same restrictions as Kubernetes annotations.
               The total size of all keys and values combined is limited to 256k.
               Key can have 2 segments: prefix (optional) and name (required),
               separated by a slash (/).
               Prefix must be a DNS subdomain.
               Name must be 63 characters or less, begin and end with alphanumerics,
               with dashes (-), underscores (_), dots (.), and alphanumerics between.
        :param pulumi.Input[str] bare_metal_version: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input['BareMetalAdminClusterClusterOperationsArgs'] cluster_operations: Specifies the Admin Cluster's observability infrastructure.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterControlPlaneArgs'] control_plane: Specifies the control plane configuration.
               Structure is documented below.
        :param pulumi.Input[str] create_time: The time the cluster was created, in RFC3339 text format.
        :param pulumi.Input[str] delete_time: The time the cluster was deleted, in RFC3339 text format.
        :param pulumi.Input[str] description: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input[str] endpoint: The IP address name of Bare Metal Admin Cluster's API server.
        :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other
               fields, and may be sent on update and delete requests to ensure the
               client has an up-to-date value before proceeding.
               Allows clients to perform consistent read-modify-writes
               through optimistic concurrency control.
        :param pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterFleetArgs']]] fleets: 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.
               See [Anthos Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
               more details on Anthos multi-cluster capabilities using Fleets.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterLoadBalancerArgs'] load_balancer: Specifies the load balancer configuration.
               Structure is documented below.
        :param pulumi.Input[str] local_name: The object name of the Bare Metal Admin Cluster custom resource on the
               associated admin cluster. This field is used to support conflicting
               names when enrolling existing clusters to the API. When used as a part of
               cluster enrollment, this field will differ from the ID in the resource
               name. For new clusters, this field will match the user provided cluster ID
               and be visible in the last component of the resource name. It is not
               modifiable.
               All users should use this name to access their cluster using gkectl or
               kubectl and should expect to see the local name when viewing admin
               cluster controller logs.
        :param pulumi.Input[str] location: The location of the resource.
               
               
               - - -
        :param pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs'] maintenance_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] name: The bare metal admin cluster name.
        :param pulumi.Input['BareMetalAdminClusterNetworkConfigArgs'] network_config: Network configuration.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs'] node_access_config: Specifies the node access related settings for the bare metal user cluster.
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterNodeConfigArgs'] node_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input['BareMetalAdminClusterProxyArgs'] proxy: Specifies the cluster proxy configuration.
               Structure is documented below.
        :param pulumi.Input[bool] reconciling: If set, there are currently changes in flight to the Bare Metal Admin Cluster.
        :param pulumi.Input['BareMetalAdminClusterSecurityConfigArgs'] security_config: Specifies the security related settings for the Bare Metal User Cluster.
               Structure is documented below.
        :param pulumi.Input[str] state: (Output)
               The lifecycle state of the condition.
        :param pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterStatusArgs']]] statuses: (Output)
               Specifies the detailed validation check status
               Structure is documented below.
        :param pulumi.Input['BareMetalAdminClusterStorageArgs'] storage: Specifies the cluster storage configuration.
               Structure is documented below.
        :param pulumi.Input[str] uid: The unique identifier of the Bare Metal Admin Cluster.
        :param pulumi.Input[str] update_time: The time the cluster was last updated, in RFC3339 text format.
        :param pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterValidationCheckArgs']]] validation_checks: Specifies the security related settings for the Bare Metal Admin Cluster.
               Structure is documented below.
        """
        if annotations is not None:
            pulumi.set(__self__, "annotations", annotations)
        if bare_metal_version is not None:
            pulumi.set(__self__, "bare_metal_version", bare_metal_version)
        if cluster_operations is not None:
            pulumi.set(__self__, "cluster_operations", cluster_operations)
        if control_plane is not None:
            pulumi.set(__self__, "control_plane", control_plane)
        if create_time is not None:
            pulumi.set(__self__, "create_time", create_time)
        if delete_time is not None:
            pulumi.set(__self__, "delete_time", delete_time)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if endpoint is not None:
            pulumi.set(__self__, "endpoint", endpoint)
        if etag is not None:
            pulumi.set(__self__, "etag", etag)
        if fleets is not None:
            pulumi.set(__self__, "fleets", fleets)
        if load_balancer is not None:
            pulumi.set(__self__, "load_balancer", load_balancer)
        if local_name is not None:
            pulumi.set(__self__, "local_name", local_name)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if maintenance_config is not None:
            pulumi.set(__self__, "maintenance_config", maintenance_config)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_config is not None:
            pulumi.set(__self__, "network_config", network_config)
        if node_access_config is not None:
            pulumi.set(__self__, "node_access_config", node_access_config)
        if node_config is not None:
            pulumi.set(__self__, "node_config", node_config)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if proxy is not None:
            pulumi.set(__self__, "proxy", proxy)
        if reconciling is not None:
            pulumi.set(__self__, "reconciling", reconciling)
        if security_config is not None:
            pulumi.set(__self__, "security_config", security_config)
        if state is not None:
            pulumi.set(__self__, "state", state)
        if statuses is not None:
            pulumi.set(__self__, "statuses", statuses)
        if storage is not None:
            pulumi.set(__self__, "storage", storage)
        if uid is not None:
            pulumi.set(__self__, "uid", uid)
        if update_time is not None:
            pulumi.set(__self__, "update_time", update_time)
        if validation_checks is not None:
            pulumi.set(__self__, "validation_checks", validation_checks)

    @property
    @pulumi.getter
    def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Annotations on the Bare Metal Admin Cluster.
        This field has the same restrictions as Kubernetes annotations.
        The total size of all keys and values combined is limited to 256k.
        Key can have 2 segments: prefix (optional) and name (required),
        separated by a slash (/).
        Prefix must be a DNS subdomain.
        Name must be 63 characters or less, begin and end with alphanumerics,
        with dashes (-), underscores (_), dots (.), and alphanumerics between.
        """
        return pulumi.get(self, "annotations")

    @annotations.setter
    def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "annotations", value)

    @property
    @pulumi.getter(name="bareMetalVersion")
    def bare_metal_version(self) -> Optional[pulumi.Input[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "bare_metal_version")

    @bare_metal_version.setter
    def bare_metal_version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "bare_metal_version", value)

    @property
    @pulumi.getter(name="clusterOperations")
    def cluster_operations(self) -> Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']]:
        """
        Specifies the Admin Cluster's observability infrastructure.
        Structure is documented below.
        """
        return pulumi.get(self, "cluster_operations")

    @cluster_operations.setter
    def cluster_operations(self, value: Optional[pulumi.Input['BareMetalAdminClusterClusterOperationsArgs']]):
        pulumi.set(self, "cluster_operations", value)

    @property
    @pulumi.getter(name="controlPlane")
    def control_plane(self) -> Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']]:
        """
        Specifies the control plane configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "control_plane")

    @control_plane.setter
    def control_plane(self, value: Optional[pulumi.Input['BareMetalAdminClusterControlPlaneArgs']]):
        pulumi.set(self, "control_plane", value)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> Optional[pulumi.Input[str]]:
        """
        The time the cluster was created, in RFC3339 text format.
        """
        return pulumi.get(self, "create_time")

    @create_time.setter
    def create_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "create_time", value)

    @property
    @pulumi.getter(name="deleteTime")
    def delete_time(self) -> Optional[pulumi.Input[str]]:
        """
        The time the cluster was deleted, in RFC3339 text format.
        """
        return pulumi.get(self, "delete_time")

    @delete_time.setter
    def delete_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "delete_time", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter
    def endpoint(self) -> Optional[pulumi.Input[str]]:
        """
        The IP address name of Bare Metal Admin Cluster's API server.
        """
        return pulumi.get(self, "endpoint")

    @endpoint.setter
    def endpoint(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "endpoint", value)

    @property
    @pulumi.getter
    def etag(self) -> Optional[pulumi.Input[str]]:
        """
        This checksum is computed by the server based on the value of other
        fields, and may be sent on update and delete requests to ensure the
        client has an up-to-date value before proceeding.
        Allows clients to perform consistent read-modify-writes
        through optimistic concurrency control.
        """
        return pulumi.get(self, "etag")

    @etag.setter
    def etag(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "etag", value)

    @property
    @pulumi.getter
    def fleets(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterFleetArgs']]]]:
        """
        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.
        See [Anthos Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
        more details on Anthos multi-cluster capabilities using Fleets.
        Structure is documented below.
        """
        return pulumi.get(self, "fleets")

    @fleets.setter
    def fleets(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterFleetArgs']]]]):
        pulumi.set(self, "fleets", value)

    @property
    @pulumi.getter(name="loadBalancer")
    def load_balancer(self) -> Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']]:
        """
        Specifies the load balancer configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "load_balancer")

    @load_balancer.setter
    def load_balancer(self, value: Optional[pulumi.Input['BareMetalAdminClusterLoadBalancerArgs']]):
        pulumi.set(self, "load_balancer", value)

    @property
    @pulumi.getter(name="localName")
    def local_name(self) -> Optional[pulumi.Input[str]]:
        """
        The object name of the Bare Metal Admin Cluster custom resource on the
        associated admin cluster. This field is used to support conflicting
        names when enrolling existing clusters to the API. When used as a part of
        cluster enrollment, this field will differ from the ID in the resource
        name. For new clusters, this field will match the user provided cluster ID
        and be visible in the last component of the resource name. It is not
        modifiable.
        All users should use this name to access their cluster using gkectl or
        kubectl and should expect to see the local name when viewing admin
        cluster controller logs.
        """
        return pulumi.get(self, "local_name")

    @local_name.setter
    def local_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_name", value)

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The location of the resource.


        - - -
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "location", value)

    @property
    @pulumi.getter(name="maintenanceConfig")
    def maintenance_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "maintenance_config")

    @maintenance_config.setter
    def maintenance_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterMaintenanceConfigArgs']]):
        pulumi.set(self, "maintenance_config", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The bare metal admin cluster name.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="networkConfig")
    def network_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']]:
        """
        Network configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "network_config")

    @network_config.setter
    def network_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNetworkConfigArgs']]):
        pulumi.set(self, "network_config", value)

    @property
    @pulumi.getter(name="nodeAccessConfig")
    def node_access_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']]:
        """
        Specifies the node access related settings for the bare metal user cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "node_access_config")

    @node_access_config.setter
    def node_access_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNodeAccessConfigArgs']]):
        pulumi.set(self, "node_access_config", value)

    @property
    @pulumi.getter(name="nodeConfig")
    def node_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "node_config")

    @node_config.setter
    def node_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterNodeConfigArgs']]):
        pulumi.set(self, "node_config", value)

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @project.setter
    def project(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "project", value)

    @property
    @pulumi.getter
    def proxy(self) -> Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']]:
        """
        Specifies the cluster proxy configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "proxy")

    @proxy.setter
    def proxy(self, value: Optional[pulumi.Input['BareMetalAdminClusterProxyArgs']]):
        pulumi.set(self, "proxy", value)

    @property
    @pulumi.getter
    def reconciling(self) -> Optional[pulumi.Input[bool]]:
        """
        If set, there are currently changes in flight to the Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "reconciling")

    @reconciling.setter
    def reconciling(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "reconciling", value)

    @property
    @pulumi.getter(name="securityConfig")
    def security_config(self) -> Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']]:
        """
        Specifies the security related settings for the Bare Metal User Cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "security_config")

    @security_config.setter
    def security_config(self, value: Optional[pulumi.Input['BareMetalAdminClusterSecurityConfigArgs']]):
        pulumi.set(self, "security_config", value)

    @property
    @pulumi.getter
    def state(self) -> Optional[pulumi.Input[str]]:
        """
        (Output)
        The lifecycle state of the condition.
        """
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "state", value)

    @property
    @pulumi.getter
    def statuses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterStatusArgs']]]]:
        """
        (Output)
        Specifies the detailed validation check status
        Structure is documented below.
        """
        return pulumi.get(self, "statuses")

    @statuses.setter
    def statuses(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterStatusArgs']]]]):
        pulumi.set(self, "statuses", value)

    @property
    @pulumi.getter
    def storage(self) -> Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']]:
        """
        Specifies the cluster storage configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "storage")

    @storage.setter
    def storage(self, value: Optional[pulumi.Input['BareMetalAdminClusterStorageArgs']]):
        pulumi.set(self, "storage", value)

    @property
    @pulumi.getter
    def uid(self) -> Optional[pulumi.Input[str]]:
        """
        The unique identifier of the Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "uid")

    @uid.setter
    def uid(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "uid", value)

    @property
    @pulumi.getter(name="updateTime")
    def update_time(self) -> Optional[pulumi.Input[str]]:
        """
        The time the cluster was last updated, in RFC3339 text format.
        """
        return pulumi.get(self, "update_time")

    @update_time.setter
    def update_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "update_time", value)

    @property
    @pulumi.getter(name="validationChecks")
    def validation_checks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterValidationCheckArgs']]]]:
        """
        Specifies the security related settings for the Bare Metal Admin Cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "validation_checks")

    @validation_checks.setter
    def validation_checks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['BareMetalAdminClusterValidationCheckArgs']]]]):
        pulumi.set(self, "validation_checks", value)


class BareMetalAdminCluster(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 bare_metal_version: Optional[pulumi.Input[str]] = None,
                 cluster_operations: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterClusterOperationsArgs']]] = None,
                 control_plane: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterControlPlaneArgs']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 load_balancer: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterLoadBalancerArgs']]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 maintenance_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterMaintenanceConfigArgs']]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNetworkConfigArgs']]] = None,
                 node_access_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeAccessConfigArgs']]] = None,
                 node_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeConfigArgs']]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 proxy: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterProxyArgs']]] = None,
                 security_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterSecurityConfigArgs']]] = None,
                 storage: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterStorageArgs']]] = None,
                 __props__=None):
        """
        ## Example Usage
        ### Gkeonprem Bare Metal Admin Cluster Basic

        ```python
        import pulumi
        import pulumi_gcp as gcp

        admin_cluster_basic = gcp.gkeonprem.BareMetalAdminCluster("admin-cluster-basic",
            location="us-west1",
            bare_metal_version="1.13.4",
            network_config=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigArgs(
                island_mode_cidr=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigIslandModeCidrArgs(
                    service_address_cidr_blocks=["172.26.0.0/16"],
                    pod_address_cidr_blocks=["10.240.0.0/13"],
                ),
            ),
            node_config=gcp.gkeonprem.BareMetalAdminClusterNodeConfigArgs(
                max_pods_per_node=250,
            ),
            control_plane=gcp.gkeonprem.BareMetalAdminClusterControlPlaneArgs(
                control_plane_node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigArgs(
                    node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigArgs(
                        labels={},
                        operating_system="LINUX",
                        node_configs=[
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.2",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.3",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.4",
                            ),
                        ],
                    ),
                ),
            ),
            load_balancer=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerArgs(
                port_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerPortConfigArgs(
                    control_plane_load_balancer_port=443,
                ),
                vip_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerVipConfigArgs(
                    control_plane_vip="10.200.0.5",
                ),
            ),
            storage=gcp.gkeonprem.BareMetalAdminClusterStorageArgs(
                lvp_share_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigArgs(
                    lvp_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigLvpConfigArgs(
                        path="/mnt/localpv-share",
                        storage_class="local-shared",
                    ),
                    shared_path_pv_count=5,
                ),
                lvp_node_mounts_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpNodeMountsConfigArgs(
                    path="/mnt/localpv-disk",
                    storage_class="local-disks",
                ),
            ),
            node_access_config=gcp.gkeonprem.BareMetalAdminClusterNodeAccessConfigArgs(
                login_user="root",
            ),
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```
        ### Gkeonprem Bare Metal Admin Cluster Full

        ```python
        import pulumi
        import pulumi_gcp as gcp

        admin_cluster_basic = gcp.gkeonprem.BareMetalAdminCluster("admin-cluster-basic",
            location="us-west1",
            description="test description",
            bare_metal_version="1.13.4",
            annotations={},
            network_config=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigArgs(
                island_mode_cidr=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigIslandModeCidrArgs(
                    service_address_cidr_blocks=["172.26.0.0/16"],
                    pod_address_cidr_blocks=["10.240.0.0/13"],
                ),
            ),
            node_config=gcp.gkeonprem.BareMetalAdminClusterNodeConfigArgs(
                max_pods_per_node=250,
            ),
            control_plane=gcp.gkeonprem.BareMetalAdminClusterControlPlaneArgs(
                control_plane_node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigArgs(
                    node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigArgs(
                        labels={},
                        operating_system="LINUX",
                        node_configs=[
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.2",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.3",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.4",
                            ),
                        ],
                        taints=[gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigTaintArgs(
                            key="test-key",
                            value="test-value",
                            effect="NO_EXECUTE",
                        )],
                    ),
                ),
                api_server_args=[gcp.gkeonprem.BareMetalAdminClusterControlPlaneApiServerArgArgs(
                    argument="test argument",
                    value="test value",
                )],
            ),
            load_balancer=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerArgs(
                port_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerPortConfigArgs(
                    control_plane_load_balancer_port=443,
                ),
                vip_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerVipConfigArgs(
                    control_plane_vip="10.200.0.5",
                ),
                manual_lb_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerManualLbConfigArgs(
                    enabled=True,
                ),
            ),
            storage=gcp.gkeonprem.BareMetalAdminClusterStorageArgs(
                lvp_share_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigArgs(
                    lvp_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigLvpConfigArgs(
                        path="/mnt/localpv-share",
                        storage_class="local-shared",
                    ),
                    shared_path_pv_count=5,
                ),
                lvp_node_mounts_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpNodeMountsConfigArgs(
                    path="/mnt/localpv-disk",
                    storage_class="local-disks",
                ),
            ),
            node_access_config=gcp.gkeonprem.BareMetalAdminClusterNodeAccessConfigArgs(
                login_user="root",
            ),
            security_config=gcp.gkeonprem.BareMetalAdminClusterSecurityConfigArgs(
                authorization=gcp.gkeonprem.BareMetalAdminClusterSecurityConfigAuthorizationArgs(
                    admin_users=[gcp.gkeonprem.BareMetalAdminClusterSecurityConfigAuthorizationAdminUserArgs(
                        username="admin@hashicorptest.com",
                    )],
                ),
            ),
            maintenance_config=gcp.gkeonprem.BareMetalAdminClusterMaintenanceConfigArgs(
                maintenance_address_cidr_blocks=[
                    "10.0.0.1/32",
                    "10.0.0.2/32",
                ],
            ),
            cluster_operations=gcp.gkeonprem.BareMetalAdminClusterClusterOperationsArgs(
                enable_application_logs=True,
            ),
            proxy=gcp.gkeonprem.BareMetalAdminClusterProxyArgs(
                uri="test proxy uri",
                no_proxies=["127.0.0.1"],
            ),
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```

        ## Import

        BareMetalAdminCluster can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default projects/{{project}}/locations/{{location}}/bareMetalAdminClusters/{{name}}
        ```

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default {{project}}/{{location}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default {{location}}/{{name}}
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations on the Bare Metal Admin Cluster.
               This field has the same restrictions as Kubernetes annotations.
               The total size of all keys and values combined is limited to 256k.
               Key can have 2 segments: prefix (optional) and name (required),
               separated by a slash (/).
               Prefix must be a DNS subdomain.
               Name must be 63 characters or less, begin and end with alphanumerics,
               with dashes (-), underscores (_), dots (.), and alphanumerics between.
        :param pulumi.Input[str] bare_metal_version: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterClusterOperationsArgs']] cluster_operations: Specifies the Admin Cluster's observability infrastructure.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterControlPlaneArgs']] control_plane: Specifies the control plane configuration.
               Structure is documented below.
        :param pulumi.Input[str] description: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterLoadBalancerArgs']] load_balancer: Specifies the load balancer configuration.
               Structure is documented below.
        :param pulumi.Input[str] location: The location of the resource.
               
               
               - - -
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterMaintenanceConfigArgs']] maintenance_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] name: The bare metal admin cluster name.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNetworkConfigArgs']] network_config: Network configuration.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeAccessConfigArgs']] node_access_config: Specifies the node access related settings for the bare metal user cluster.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeConfigArgs']] node_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterProxyArgs']] proxy: Specifies the cluster proxy configuration.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterSecurityConfigArgs']] security_config: Specifies the security related settings for the Bare Metal User Cluster.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterStorageArgs']] storage: Specifies the cluster storage configuration.
               Structure is documented below.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: BareMetalAdminClusterArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        ## Example Usage
        ### Gkeonprem Bare Metal Admin Cluster Basic

        ```python
        import pulumi
        import pulumi_gcp as gcp

        admin_cluster_basic = gcp.gkeonprem.BareMetalAdminCluster("admin-cluster-basic",
            location="us-west1",
            bare_metal_version="1.13.4",
            network_config=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigArgs(
                island_mode_cidr=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigIslandModeCidrArgs(
                    service_address_cidr_blocks=["172.26.0.0/16"],
                    pod_address_cidr_blocks=["10.240.0.0/13"],
                ),
            ),
            node_config=gcp.gkeonprem.BareMetalAdminClusterNodeConfigArgs(
                max_pods_per_node=250,
            ),
            control_plane=gcp.gkeonprem.BareMetalAdminClusterControlPlaneArgs(
                control_plane_node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigArgs(
                    node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigArgs(
                        labels={},
                        operating_system="LINUX",
                        node_configs=[
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.2",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.3",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.4",
                            ),
                        ],
                    ),
                ),
            ),
            load_balancer=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerArgs(
                port_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerPortConfigArgs(
                    control_plane_load_balancer_port=443,
                ),
                vip_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerVipConfigArgs(
                    control_plane_vip="10.200.0.5",
                ),
            ),
            storage=gcp.gkeonprem.BareMetalAdminClusterStorageArgs(
                lvp_share_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigArgs(
                    lvp_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigLvpConfigArgs(
                        path="/mnt/localpv-share",
                        storage_class="local-shared",
                    ),
                    shared_path_pv_count=5,
                ),
                lvp_node_mounts_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpNodeMountsConfigArgs(
                    path="/mnt/localpv-disk",
                    storage_class="local-disks",
                ),
            ),
            node_access_config=gcp.gkeonprem.BareMetalAdminClusterNodeAccessConfigArgs(
                login_user="root",
            ),
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```
        ### Gkeonprem Bare Metal Admin Cluster Full

        ```python
        import pulumi
        import pulumi_gcp as gcp

        admin_cluster_basic = gcp.gkeonprem.BareMetalAdminCluster("admin-cluster-basic",
            location="us-west1",
            description="test description",
            bare_metal_version="1.13.4",
            annotations={},
            network_config=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigArgs(
                island_mode_cidr=gcp.gkeonprem.BareMetalAdminClusterNetworkConfigIslandModeCidrArgs(
                    service_address_cidr_blocks=["172.26.0.0/16"],
                    pod_address_cidr_blocks=["10.240.0.0/13"],
                ),
            ),
            node_config=gcp.gkeonprem.BareMetalAdminClusterNodeConfigArgs(
                max_pods_per_node=250,
            ),
            control_plane=gcp.gkeonprem.BareMetalAdminClusterControlPlaneArgs(
                control_plane_node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigArgs(
                    node_pool_config=gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigArgs(
                        labels={},
                        operating_system="LINUX",
                        node_configs=[
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.2",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.3",
                            ),
                            gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigNodeConfigArgs(
                                labels={},
                                node_ip="10.200.0.4",
                            ),
                        ],
                        taints=[gcp.gkeonprem.BareMetalAdminClusterControlPlaneControlPlaneNodePoolConfigNodePoolConfigTaintArgs(
                            key="test-key",
                            value="test-value",
                            effect="NO_EXECUTE",
                        )],
                    ),
                ),
                api_server_args=[gcp.gkeonprem.BareMetalAdminClusterControlPlaneApiServerArgArgs(
                    argument="test argument",
                    value="test value",
                )],
            ),
            load_balancer=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerArgs(
                port_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerPortConfigArgs(
                    control_plane_load_balancer_port=443,
                ),
                vip_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerVipConfigArgs(
                    control_plane_vip="10.200.0.5",
                ),
                manual_lb_config=gcp.gkeonprem.BareMetalAdminClusterLoadBalancerManualLbConfigArgs(
                    enabled=True,
                ),
            ),
            storage=gcp.gkeonprem.BareMetalAdminClusterStorageArgs(
                lvp_share_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigArgs(
                    lvp_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpShareConfigLvpConfigArgs(
                        path="/mnt/localpv-share",
                        storage_class="local-shared",
                    ),
                    shared_path_pv_count=5,
                ),
                lvp_node_mounts_config=gcp.gkeonprem.BareMetalAdminClusterStorageLvpNodeMountsConfigArgs(
                    path="/mnt/localpv-disk",
                    storage_class="local-disks",
                ),
            ),
            node_access_config=gcp.gkeonprem.BareMetalAdminClusterNodeAccessConfigArgs(
                login_user="root",
            ),
            security_config=gcp.gkeonprem.BareMetalAdminClusterSecurityConfigArgs(
                authorization=gcp.gkeonprem.BareMetalAdminClusterSecurityConfigAuthorizationArgs(
                    admin_users=[gcp.gkeonprem.BareMetalAdminClusterSecurityConfigAuthorizationAdminUserArgs(
                        username="admin@hashicorptest.com",
                    )],
                ),
            ),
            maintenance_config=gcp.gkeonprem.BareMetalAdminClusterMaintenanceConfigArgs(
                maintenance_address_cidr_blocks=[
                    "10.0.0.1/32",
                    "10.0.0.2/32",
                ],
            ),
            cluster_operations=gcp.gkeonprem.BareMetalAdminClusterClusterOperationsArgs(
                enable_application_logs=True,
            ),
            proxy=gcp.gkeonprem.BareMetalAdminClusterProxyArgs(
                uri="test proxy uri",
                no_proxies=["127.0.0.1"],
            ),
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```

        ## Import

        BareMetalAdminCluster can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default projects/{{project}}/locations/{{location}}/bareMetalAdminClusters/{{name}}
        ```

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default {{project}}/{{location}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster default {{location}}/{{name}}
        ```

        :param str resource_name: The name of the resource.
        :param BareMetalAdminClusterArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(BareMetalAdminClusterArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 bare_metal_version: Optional[pulumi.Input[str]] = None,
                 cluster_operations: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterClusterOperationsArgs']]] = None,
                 control_plane: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterControlPlaneArgs']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 load_balancer: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterLoadBalancerArgs']]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 maintenance_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterMaintenanceConfigArgs']]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNetworkConfigArgs']]] = None,
                 node_access_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeAccessConfigArgs']]] = None,
                 node_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeConfigArgs']]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 proxy: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterProxyArgs']]] = None,
                 security_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterSecurityConfigArgs']]] = None,
                 storage: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterStorageArgs']]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = BareMetalAdminClusterArgs.__new__(BareMetalAdminClusterArgs)

            __props__.__dict__["annotations"] = annotations
            __props__.__dict__["bare_metal_version"] = bare_metal_version
            __props__.__dict__["cluster_operations"] = cluster_operations
            __props__.__dict__["control_plane"] = control_plane
            __props__.__dict__["description"] = description
            __props__.__dict__["load_balancer"] = load_balancer
            if location is None and not opts.urn:
                raise TypeError("Missing required property 'location'")
            __props__.__dict__["location"] = location
            __props__.__dict__["maintenance_config"] = maintenance_config
            __props__.__dict__["name"] = name
            __props__.__dict__["network_config"] = network_config
            __props__.__dict__["node_access_config"] = node_access_config
            __props__.__dict__["node_config"] = node_config
            __props__.__dict__["project"] = project
            __props__.__dict__["proxy"] = proxy
            __props__.__dict__["security_config"] = security_config
            __props__.__dict__["storage"] = storage
            __props__.__dict__["create_time"] = None
            __props__.__dict__["delete_time"] = None
            __props__.__dict__["endpoint"] = None
            __props__.__dict__["etag"] = None
            __props__.__dict__["fleets"] = None
            __props__.__dict__["local_name"] = None
            __props__.__dict__["reconciling"] = None
            __props__.__dict__["state"] = None
            __props__.__dict__["statuses"] = None
            __props__.__dict__["uid"] = None
            __props__.__dict__["update_time"] = None
            __props__.__dict__["validation_checks"] = None
        super(BareMetalAdminCluster, __self__).__init__(
            'gcp:gkeonprem/bareMetalAdminCluster:BareMetalAdminCluster',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            bare_metal_version: Optional[pulumi.Input[str]] = None,
            cluster_operations: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterClusterOperationsArgs']]] = None,
            control_plane: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterControlPlaneArgs']]] = None,
            create_time: Optional[pulumi.Input[str]] = None,
            delete_time: Optional[pulumi.Input[str]] = None,
            description: Optional[pulumi.Input[str]] = None,
            endpoint: Optional[pulumi.Input[str]] = None,
            etag: Optional[pulumi.Input[str]] = None,
            fleets: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterFleetArgs']]]]] = None,
            load_balancer: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterLoadBalancerArgs']]] = None,
            local_name: Optional[pulumi.Input[str]] = None,
            location: Optional[pulumi.Input[str]] = None,
            maintenance_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterMaintenanceConfigArgs']]] = None,
            name: Optional[pulumi.Input[str]] = None,
            network_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNetworkConfigArgs']]] = None,
            node_access_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeAccessConfigArgs']]] = None,
            node_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeConfigArgs']]] = None,
            project: Optional[pulumi.Input[str]] = None,
            proxy: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterProxyArgs']]] = None,
            reconciling: Optional[pulumi.Input[bool]] = None,
            security_config: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterSecurityConfigArgs']]] = None,
            state: Optional[pulumi.Input[str]] = None,
            statuses: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterStatusArgs']]]]] = None,
            storage: Optional[pulumi.Input[pulumi.InputType['BareMetalAdminClusterStorageArgs']]] = None,
            uid: Optional[pulumi.Input[str]] = None,
            update_time: Optional[pulumi.Input[str]] = None,
            validation_checks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterValidationCheckArgs']]]]] = None) -> 'BareMetalAdminCluster':
        """
        Get an existing BareMetalAdminCluster resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations on the Bare Metal Admin Cluster.
               This field has the same restrictions as Kubernetes annotations.
               The total size of all keys and values combined is limited to 256k.
               Key can have 2 segments: prefix (optional) and name (required),
               separated by a slash (/).
               Prefix must be a DNS subdomain.
               Name must be 63 characters or less, begin and end with alphanumerics,
               with dashes (-), underscores (_), dots (.), and alphanumerics between.
        :param pulumi.Input[str] bare_metal_version: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterClusterOperationsArgs']] cluster_operations: Specifies the Admin Cluster's observability infrastructure.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterControlPlaneArgs']] control_plane: Specifies the control plane configuration.
               Structure is documented below.
        :param pulumi.Input[str] create_time: The time the cluster was created, in RFC3339 text format.
        :param pulumi.Input[str] delete_time: The time the cluster was deleted, in RFC3339 text format.
        :param pulumi.Input[str] description: A human readable description of this Bare Metal Admin Cluster.
        :param pulumi.Input[str] endpoint: The IP address name of Bare Metal Admin Cluster's API server.
        :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other
               fields, and may be sent on update and delete requests to ensure the
               client has an up-to-date value before proceeding.
               Allows clients to perform consistent read-modify-writes
               through optimistic concurrency control.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterFleetArgs']]]] fleets: 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.
               See [Anthos Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
               more details on Anthos multi-cluster capabilities using Fleets.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterLoadBalancerArgs']] load_balancer: Specifies the load balancer configuration.
               Structure is documented below.
        :param pulumi.Input[str] local_name: The object name of the Bare Metal Admin Cluster custom resource on the
               associated admin cluster. This field is used to support conflicting
               names when enrolling existing clusters to the API. When used as a part of
               cluster enrollment, this field will differ from the ID in the resource
               name. For new clusters, this field will match the user provided cluster ID
               and be visible in the last component of the resource name. It is not
               modifiable.
               All users should use this name to access their cluster using gkectl or
               kubectl and should expect to see the local name when viewing admin
               cluster controller logs.
        :param pulumi.Input[str] location: The location of the resource.
               
               
               - - -
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterMaintenanceConfigArgs']] maintenance_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] name: The bare metal admin cluster name.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNetworkConfigArgs']] network_config: Network configuration.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeAccessConfigArgs']] node_access_config: Specifies the node access related settings for the bare metal user cluster.
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterNodeConfigArgs']] node_config: Specifies the workload node configurations.
               Structure is documented below.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterProxyArgs']] proxy: Specifies the cluster proxy configuration.
               Structure is documented below.
        :param pulumi.Input[bool] reconciling: If set, there are currently changes in flight to the Bare Metal Admin Cluster.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterSecurityConfigArgs']] security_config: Specifies the security related settings for the Bare Metal User Cluster.
               Structure is documented below.
        :param pulumi.Input[str] state: (Output)
               The lifecycle state of the condition.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterStatusArgs']]]] statuses: (Output)
               Specifies the detailed validation check status
               Structure is documented below.
        :param pulumi.Input[pulumi.InputType['BareMetalAdminClusterStorageArgs']] storage: Specifies the cluster storage configuration.
               Structure is documented below.
        :param pulumi.Input[str] uid: The unique identifier of the Bare Metal Admin Cluster.
        :param pulumi.Input[str] update_time: The time the cluster was last updated, in RFC3339 text format.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BareMetalAdminClusterValidationCheckArgs']]]] validation_checks: Specifies the security related settings for the Bare Metal Admin Cluster.
               Structure is documented below.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _BareMetalAdminClusterState.__new__(_BareMetalAdminClusterState)

        __props__.__dict__["annotations"] = annotations
        __props__.__dict__["bare_metal_version"] = bare_metal_version
        __props__.__dict__["cluster_operations"] = cluster_operations
        __props__.__dict__["control_plane"] = control_plane
        __props__.__dict__["create_time"] = create_time
        __props__.__dict__["delete_time"] = delete_time
        __props__.__dict__["description"] = description
        __props__.__dict__["endpoint"] = endpoint
        __props__.__dict__["etag"] = etag
        __props__.__dict__["fleets"] = fleets
        __props__.__dict__["load_balancer"] = load_balancer
        __props__.__dict__["local_name"] = local_name
        __props__.__dict__["location"] = location
        __props__.__dict__["maintenance_config"] = maintenance_config
        __props__.__dict__["name"] = name
        __props__.__dict__["network_config"] = network_config
        __props__.__dict__["node_access_config"] = node_access_config
        __props__.__dict__["node_config"] = node_config
        __props__.__dict__["project"] = project
        __props__.__dict__["proxy"] = proxy
        __props__.__dict__["reconciling"] = reconciling
        __props__.__dict__["security_config"] = security_config
        __props__.__dict__["state"] = state
        __props__.__dict__["statuses"] = statuses
        __props__.__dict__["storage"] = storage
        __props__.__dict__["uid"] = uid
        __props__.__dict__["update_time"] = update_time
        __props__.__dict__["validation_checks"] = validation_checks
        return BareMetalAdminCluster(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def annotations(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        Annotations on the Bare Metal Admin Cluster.
        This field has the same restrictions as Kubernetes annotations.
        The total size of all keys and values combined is limited to 256k.
        Key can have 2 segments: prefix (optional) and name (required),
        separated by a slash (/).
        Prefix must be a DNS subdomain.
        Name must be 63 characters or less, begin and end with alphanumerics,
        with dashes (-), underscores (_), dots (.), and alphanumerics between.
        """
        return pulumi.get(self, "annotations")

    @property
    @pulumi.getter(name="bareMetalVersion")
    def bare_metal_version(self) -> pulumi.Output[Optional[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "bare_metal_version")

    @property
    @pulumi.getter(name="clusterOperations")
    def cluster_operations(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterClusterOperations']]:
        """
        Specifies the Admin Cluster's observability infrastructure.
        Structure is documented below.
        """
        return pulumi.get(self, "cluster_operations")

    @property
    @pulumi.getter(name="controlPlane")
    def control_plane(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterControlPlane']]:
        """
        Specifies the control plane configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "control_plane")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> pulumi.Output[str]:
        """
        The time the cluster was created, in RFC3339 text format.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter(name="deleteTime")
    def delete_time(self) -> pulumi.Output[str]:
        """
        The time the cluster was deleted, in RFC3339 text format.
        """
        return pulumi.get(self, "delete_time")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[str]]:
        """
        A human readable description of this Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def endpoint(self) -> pulumi.Output[str]:
        """
        The IP address name of Bare Metal Admin Cluster's API server.
        """
        return pulumi.get(self, "endpoint")

    @property
    @pulumi.getter
    def etag(self) -> pulumi.Output[str]:
        """
        This checksum is computed by the server based on the value of other
        fields, and may be sent on update and delete requests to ensure the
        client has an up-to-date value before proceeding.
        Allows clients to perform consistent read-modify-writes
        through optimistic concurrency control.
        """
        return pulumi.get(self, "etag")

    @property
    @pulumi.getter
    def fleets(self) -> pulumi.Output[Sequence['outputs.BareMetalAdminClusterFleet']]:
        """
        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.
        See [Anthos Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
        more details on Anthos multi-cluster capabilities using Fleets.
        Structure is documented below.
        """
        return pulumi.get(self, "fleets")

    @property
    @pulumi.getter(name="loadBalancer")
    def load_balancer(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterLoadBalancer']]:
        """
        Specifies the load balancer configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "load_balancer")

    @property
    @pulumi.getter(name="localName")
    def local_name(self) -> pulumi.Output[str]:
        """
        The object name of the Bare Metal Admin Cluster custom resource on the
        associated admin cluster. This field is used to support conflicting
        names when enrolling existing clusters to the API. When used as a part of
        cluster enrollment, this field will differ from the ID in the resource
        name. For new clusters, this field will match the user provided cluster ID
        and be visible in the last component of the resource name. It is not
        modifiable.
        All users should use this name to access their cluster using gkectl or
        kubectl and should expect to see the local name when viewing admin
        cluster controller logs.
        """
        return pulumi.get(self, "local_name")

    @property
    @pulumi.getter
    def location(self) -> pulumi.Output[str]:
        """
        The location of the resource.


        - - -
        """
        return pulumi.get(self, "location")

    @property
    @pulumi.getter(name="maintenanceConfig")
    def maintenance_config(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterMaintenanceConfig']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "maintenance_config")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The bare metal admin cluster name.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="networkConfig")
    def network_config(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterNetworkConfig']]:
        """
        Network configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "network_config")

    @property
    @pulumi.getter(name="nodeAccessConfig")
    def node_access_config(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterNodeAccessConfig']]:
        """
        Specifies the node access related settings for the bare metal user cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "node_access_config")

    @property
    @pulumi.getter(name="nodeConfig")
    def node_config(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterNodeConfig']]:
        """
        Specifies the workload node configurations.
        Structure is documented below.
        """
        return pulumi.get(self, "node_config")

    @property
    @pulumi.getter
    def project(self) -> pulumi.Output[str]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @property
    @pulumi.getter
    def proxy(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterProxy']]:
        """
        Specifies the cluster proxy configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "proxy")

    @property
    @pulumi.getter
    def reconciling(self) -> pulumi.Output[bool]:
        """
        If set, there are currently changes in flight to the Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "reconciling")

    @property
    @pulumi.getter(name="securityConfig")
    def security_config(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterSecurityConfig']]:
        """
        Specifies the security related settings for the Bare Metal User Cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "security_config")

    @property
    @pulumi.getter
    def state(self) -> pulumi.Output[str]:
        """
        (Output)
        The lifecycle state of the condition.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter
    def statuses(self) -> pulumi.Output[Sequence['outputs.BareMetalAdminClusterStatus']]:
        """
        (Output)
        Specifies the detailed validation check status
        Structure is documented below.
        """
        return pulumi.get(self, "statuses")

    @property
    @pulumi.getter
    def storage(self) -> pulumi.Output[Optional['outputs.BareMetalAdminClusterStorage']]:
        """
        Specifies the cluster storage configuration.
        Structure is documented below.
        """
        return pulumi.get(self, "storage")

    @property
    @pulumi.getter
    def uid(self) -> pulumi.Output[str]:
        """
        The unique identifier of the Bare Metal Admin Cluster.
        """
        return pulumi.get(self, "uid")

    @property
    @pulumi.getter(name="updateTime")
    def update_time(self) -> pulumi.Output[str]:
        """
        The time the cluster was last updated, in RFC3339 text format.
        """
        return pulumi.get(self, "update_time")

    @property
    @pulumi.getter(name="validationChecks")
    def validation_checks(self) -> pulumi.Output[Sequence['outputs.BareMetalAdminClusterValidationCheck']]:
        """
        Specifies the security related settings for the Bare Metal Admin Cluster.
        Structure is documented below.
        """
        return pulumi.get(self, "validation_checks")

