---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Cloud VMware Engine"
description: |-
  Represents a private cloud resource.
---

# google\_vmwareengine\_private\_cloud

Represents a private cloud resource. Private clouds are zonal resources.


To get more information about PrivateCloud, see:

* [API documentation](https://cloud.google.com/vmware-engine/docs/reference/rest/v1/projects.locations.privateClouds)

## Example Usage - Vmware Engine Private Cloud Basic


```hcl
resource "google_vmwareengine_private_cloud" "vmw-engine-pc" {
  location    = "us-west1-a"
  name        = "sample-pc"
  description = "Sample test PC."
  network_config {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = google_vmwareengine_network.pc-nw.id
  }

  management_cluster {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs {
      node_type_id = "standard-72"
      node_count   = 3
    }
  }
}

resource "google_vmwareengine_network" "pc-nw" {
  name        = "pc-nw"
  location    = "global"
  type        = "STANDARD"
  description = "PC network description."
}
```
## Example Usage - Vmware Engine Private Cloud Full


```hcl
resource "google_vmwareengine_private_cloud" "vmw-engine-pc" {
  location    = "us-west1-a"
  name        = "sample-pc"
  description = "Sample test PC."
  type        = "TIME_LIMITED"
  network_config {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = google_vmwareengine_network.pc-nw.id
  }

  management_cluster {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs {
      node_type_id = "standard-72"
      node_count   = 1
      custom_core_count = 32
    }
  }
}

resource "google_vmwareengine_network" "pc-nw" {
  name        = "pc-nw"
  location    = "global"
  type        = "STANDARD"
  description = "PC network description."
}
```

## Argument Reference

The following arguments are supported:


* `network_config` -
  (Required)
  Network configuration in the consumer project with which the peering has to be done.
  Structure is [documented below](#nested_network_config).

* `management_cluster` -
  (Required)
  The management cluster for this private cloud. This used for creating and managing the default cluster.
  Structure is [documented below](#nested_management_cluster).

* `location` -
  (Required)
  The location where the PrivateCloud should reside.

* `name` -
  (Required)
  The ID of the PrivateCloud.


<a name="nested_network_config"></a>The `network_config` block supports:

* `management_cidr` -
  (Required)
  Management CIDR used by VMware management appliances.

* `vmware_engine_network` -
  (Optional)
  The relative resource name of the VMware Engine network attached to the private cloud.
  Specify the name in the following form: projects/{project}/locations/{location}/vmwareEngineNetworks/{vmwareEngineNetworkId}
  where {project} can either be a project number or a project ID.

* `vmware_engine_network_canonical` -
  (Output)
  The canonical name of the VMware Engine network in
  the form: projects/{project_number}/locations/{location}/vmwareEngineNetworks/{vmwareEngineNetworkId}

* `management_ip_address_layout_version` -
  (Output)
  The IP address layout version of the management IP address range.
  Possible versions include:
  * managementIpAddressLayoutVersion=1: Indicates the legacy IP address layout used by some existing private clouds. This is no longer supported for new private clouds
  as it does not support all features.
  * managementIpAddressLayoutVersion=2: Indicates the latest IP address layout
  used by all newly created private clouds. This version supports all current features.

* `dns_server_ip` -
  (Output)
  DNS Server IP of the Private Cloud.

<a name="nested_management_cluster"></a>The `management_cluster` block supports:

* `cluster_id` -
  (Required)
  The user-provided identifier of the new Cluster. The identifier must meet the following requirements:
    * Only contains 1-63 alphanumeric characters and hyphens
    * Begins with an alphabetical character
    * Ends with a non-hyphen character
    * Not formatted as a UUID
    * Complies with RFC 1034 (https://datatracker.ietf.org/doc/html/rfc1034) (section 3.5)

* `node_type_configs` -
  (Optional)
  The map of cluster node types in this cluster,
  where the key is canonical identifier of the node type (corresponds to the NodeType).
  Structure is [documented below](#nested_node_type_configs).


<a name="nested_node_type_configs"></a>The `node_type_configs` block supports:

* `node_type_id` - (Required) The identifier for this object. Format specified above.

* `node_count` -
  (Required)
  The number of nodes of this type in the cluster.

* `custom_core_count` -
  (Optional)
  Customized number of cores available to each node of the type.
  This number must always be one of `nodeType.availableCustomCoreCounts`.
  If zero is provided max value from `nodeType.availableCustomCoreCounts` will be used.
  This cannot be changed once the PrivateCloud is created.

- - -


* `description` -
  (Optional)
  User-provided description for this private cloud.

* `type` -
  (Optional)
  Initial type of the private cloud.
  Possible values are: `STANDARD`, `TIME_LIMITED`.

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the provider project is used.


## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/privateClouds/{{name}}`

* `uid` -
  System-generated unique identifier for the resource.

* `state` -
  State of the resource. New values may be added to this enum when appropriate.

* `hcx` -
  Details about a HCX Cloud Manager appliance.
  Structure is [documented below](#nested_hcx).

* `nsx` -
  Details about a NSX Manager appliance.
  Structure is [documented below](#nested_nsx).

* `vcenter` -
  Details about a vCenter Server management appliance.
  Structure is [documented below](#nested_vcenter).


<a name="nested_hcx"></a>The `hcx` block contains:

* `internal_ip` -
  (Optional)
  Internal IP address of the appliance.

* `version` -
  (Optional)
  Version of the appliance.

* `state` -
  (Optional)
  State of the appliance.
  Possible values are: `ACTIVE`, `CREATING`.

* `fqdn` -
  (Optional)
  Fully qualified domain name of the appliance.

<a name="nested_nsx"></a>The `nsx` block contains:

* `internal_ip` -
  (Optional)
  Internal IP address of the appliance.

* `version` -
  (Optional)
  Version of the appliance.

* `state` -
  (Optional)
  State of the appliance.
  Possible values are: `ACTIVE`, `CREATING`.

* `fqdn` -
  (Optional)
  Fully qualified domain name of the appliance.

<a name="nested_vcenter"></a>The `vcenter` block contains:

* `internal_ip` -
  (Optional)
  Internal IP address of the appliance.

* `version` -
  (Optional)
  Version of the appliance.

* `state` -
  (Optional)
  State of the appliance.
  Possible values are: `ACTIVE`, `CREATING`.

* `fqdn` -
  (Optional)
  Fully qualified domain name of the appliance.

## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 240 minutes.
- `update` - Default is 190 minutes.
- `delete` - Default is 150 minutes.

## Import


PrivateCloud can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/privateClouds/{{name}}`
* `{{project}}/{{location}}/{{name}}`
* `{{location}}/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import PrivateCloud using one of the formats above. For example:

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/privateClouds/{{name}}"
  to = google_vmwareengine_private_cloud.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), PrivateCloud can be imported using one of the formats above. For example:

```
$ terraform import google_vmwareengine_private_cloud.default projects/{{project}}/locations/{{location}}/privateClouds/{{name}}
$ terraform import google_vmwareengine_private_cloud.default {{project}}/{{location}}/{{name}}
$ terraform import google_vmwareengine_private_cloud.default {{location}}/{{name}}
```

## User Project Overrides

This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).
