mmv1/products/filestore/Instance.yaml (437 lines of code) (raw):
# Copyright 2024 Google Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
name: 'Instance'
description: |
A Google Cloud Filestore instance.
references:
guides:
'Official Documentation': 'https://cloud.google.com/filestore/docs/creating-instances'
'Use with Kubernetes': 'https://cloud.google.com/filestore/docs/accessing-fileshares'
'Copying Data In/Out': 'https://cloud.google.com/filestore/docs/copying-data'
api: 'https://cloud.google.com/filestore/docs/reference/rest/v1beta1/projects.locations.instances/create'
docs:
base_url: 'projects/{{project}}/locations/{{location}}/instances'
self_link: 'projects/{{project}}/locations/{{location}}/instances/{{name}}'
create_url: 'projects/{{project}}/locations/{{location}}/instances?instanceId={{name}}'
update_verb: 'PATCH'
update_mask: true
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
autogen_async: true
async:
actions: ['create', 'delete', 'update']
type: 'OpAsync'
operation:
base_url: '{{op_id}}'
result:
resource_inside_response: true
custom_code:
pre_create: 'templates/terraform/pre_create/filestore_instance.go.tmpl'
error_abort_predicates:
- 'transport_tpg.Is429QuotaError'
schema_version: 1
state_upgraders: true
sweeper:
url_substitutions:
- region: "us-central1-b"
- zone: "us-central1-b"
- region: "us-central1"
- region: "us-east1"
- region: "us-west1"
examples:
- name: 'filestore_instance_basic'
primary_resource_id: 'instance'
vars:
instance_name: 'test-instance'
- name: 'filestore_instance_full'
primary_resource_id: 'instance'
vars:
instance_name: 'test-instance'
- name: 'filestore_instance_protocol'
primary_resource_id: 'instance'
vars:
instance_name: 'test-instance'
- name: 'filestore_instance_enterprise'
primary_resource_id: 'instance'
vars:
instance_name: 'test-instance'
# https://github.com/GoogleCloudPlatform/magic-modules/pull/5875#discussion_r844285335
exclude_test: true
parameters:
- name: 'zone'
type: String
description: |
The name of the Filestore zone of the instance.
url_param_only: true
immutable: true
ignore_read: true
default_from_api: true
exactly_one_of:
- 'zone'
- 'location'
deprecation_message: '`zone` is deprecated and will be removed in a future major release. Use `location` instead.'
- name: 'location'
type: String
description: |
The name of the location of the instance. This can be a region for ENTERPRISE tier instances.
url_param_only: true
immutable: true
ignore_read: true
default_from_api: true
exactly_one_of:
- 'zone'
- 'location'
properties:
- name: 'name'
type: String
description: |
The resource name of the instance.
url_param_only: true
required: true
custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl'
- name: 'description'
type: String
description: |
A description of the instance.
- name: 'createTime'
type: Time
description: Creation timestamp in RFC3339 text format.
output: true
- name: 'tier'
type: String
description: |
The service tier of the instance.
Possible values include: STANDARD, PREMIUM, BASIC_HDD, BASIC_SSD, HIGH_SCALE_SSD, ZONAL, REGIONAL and ENTERPRISE
required: true
immutable: true
- name: 'protocol'
type: Enum
description: |
Either NFSv3, for using NFS version 3 as file sharing protocol,
or NFSv4.1, for using NFS version 4.1 as file sharing protocol.
NFSv4.1 can be used with HIGH_SCALE_SSD, ZONAL, REGIONAL and ENTERPRISE.
The default is NFSv3.
immutable: true
custom_flatten: 'templates/terraform/custom_flatten/default_if_empty.tmpl'
default_value: "NFS_V3"
enum_values:
- 'NFS_V3'
- 'NFS_V4_1'
- name: 'labels'
type: KeyValueLabels
description: |
Resource labels to represent user-provided metadata.
- name: 'fileShares'
type: Array
description: |
File system shares on the instance. For this version, only a
single file share is supported.
required: true
item_type:
type: NestedObject
properties:
- name: 'name'
type: String
description: |
The name of the fileshare (16 characters or less)
required: true
immutable: true
- name: 'capacityGb'
type: Integer
description: |
File share capacity in GiB. This must be at least 1024 GiB
for the standard tier, or 2560 GiB for the premium tier.
required: true
- name: 'sourceBackup'
type: String
description: |
The resource name of the backup, in the format
projects/{projectId}/locations/{locationId}/backups/{backupId},
that this file share has been restored from.
immutable: true
- name: 'nfsExportOptions'
type: Array
description: |
Nfs Export Options. There is a limit of 10 export options per file share.
item_type:
type: NestedObject
properties:
- name: 'ipRanges'
type: Array
description: |
List of either IPv4 addresses, or ranges in CIDR notation which may mount the file share.
Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned.
The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.
item_type:
type: String
- name: 'accessMode'
type: Enum
description: |
Either READ_ONLY, for allowing only read requests on the exported directory,
or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.
default_value: "READ_WRITE"
enum_values:
- 'READ_ONLY'
- 'READ_WRITE'
- name: 'squashMode'
type: Enum
description: |
Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH,
for not allowing root access. The default is NO_ROOT_SQUASH.
default_value: "NO_ROOT_SQUASH"
enum_values:
- 'NO_ROOT_SQUASH'
- 'ROOT_SQUASH'
- name: 'anonUid'
type: Integer
description: |
An integer representing the anonymous user id with a default value of 65534.
Anon_uid may only be set with squashMode of ROOT_SQUASH. An error will be returned
if this field is specified for other squashMode settings.
- name: 'anonGid'
type: Integer
description: |
An integer representing the anonymous group id with a default value of 65534.
Anon_gid may only be set with squashMode of ROOT_SQUASH. An error will be returned
if this field is specified for other squashMode settings.
max_size: 10
max_size: 1
- name: 'networks'
type: Array
description: |
VPC networks to which the instance is connected. For this version,
only a single network is supported.
required: true
immutable: true
item_type:
type: NestedObject
properties:
- name: 'network'
type: String
description: |
The name of the GCE VPC network to which the
instance is connected.
required: true
immutable: true
diff_suppress_func: 'tpgresource.CompareSelfLinkOrResourceName'
- name: 'modes'
type: Array
description: |
IP versions for which the instance has
IP addresses assigned.
required: true
immutable: true
item_type:
type: Enum
description: An IP version.
enum_values:
- 'ADDRESS_MODE_UNSPECIFIED'
- 'MODE_IPV4'
- 'MODE_IPV6'
- name: 'reservedIpRange'
type: String
description: |
A /29 CIDR block that identifies the range of IP
addresses reserved for this instance.
immutable: true
default_from_api: true
# When using connectMode=PRIVATE_SERVICE_ACCESS, the returned value
# won't match the sent value as the returned value is an IP range
# from the provided named range.
custom_flatten: 'templates/terraform/custom_flatten/filestore_instance_networks_reserved_ip_range.go.tmpl'
- name: 'ipAddresses'
type: Array
description: |
A list of IPv4 or IPv6 addresses.
output: true
item_type:
type: String
- name: 'connectMode'
type: Enum
description: |
The network connect mode of the Filestore instance.
If not provided, the connect mode defaults to
DIRECT_PEERING.
immutable: true
custom_flatten: 'templates/terraform/custom_flatten/default_if_empty.tmpl'
default_value: "DIRECT_PEERING"
enum_values:
- 'DIRECT_PEERING'
- 'PRIVATE_SERVICE_ACCESS'
min_size: 1
- name: 'etag'
type: String
description: |
Server-specified ETag for the instance resource to prevent
simultaneous updates from overwriting each other.
output: true
- name: 'kmsKeyName'
type: String
description: |
KMS key name used for data encryption.
immutable: true
- name: 'deletionProtectionEnabled'
type: Boolean
description: |
Indicates whether the instance is protected against deletion.
- name: 'deletionProtectionReason'
type: String
description: |
The reason for enabling deletion protection.
- name: 'performanceConfig'
type: NestedObject
description: |
Performance configuration for the instance. If not provided,
the default performance settings will be used.
properties:
- name: 'iopsPerTb'
type: NestedObject
description: |
The instance provisioned IOPS will change dynamically
based on the capacity of the instance.
conflicts:
- fixed_iops
properties:
- name: 'maxIopsPerTb'
type: Integer
description: |
The instance max IOPS will be calculated by multiplying
the capacity of the instance (TB) by max_iops_per_tb,
and rounding to the nearest 1000. The instance max IOPS
will be changed dynamically based on the instance
capacity.
- name: 'fixedIops'
type: NestedObject
description: |
The instance will have a fixed provisioned IOPS value,
which will remain constant regardless of instance
capacity.
conflicts:
- iops_per_tb
properties:
- name: 'maxIops'
type: Integer
description: |
The number of IOPS to provision for the instance.
max_iops must be in multiple of 1000.
- name: 'tags'
type: KeyValuePairs
description: |
A map of resource manager tags. Resource manager tag keys
and values have the same definition as resource manager
tags. Keys must be in the format tagKeys/{tag_key_id},
and values are in the format tagValues/456. The field is
ignored when empty. The field is immutable and causes
resource replacement when mutated. This field is only set
at create time and modifying this field after creation
will trigger recreation. To apply tags to an existing
resource, see the `google_tags_tag_value` resource.
immutable: true
ignore_read: true
- name: 'initialReplication'
api_name: replication
type: NestedObject
description: |
Replication configuration, once set, this cannot be updated.
Addtionally this should be specified on the replica instance only, indicating the active as the peer_instance
url_param_only: true
immutable: true
properties:
- name: 'role'
type: Enum
description: |
The replication role.
default_value: "STANDBY"
enum_values:
- 'ROLE_UNSPECIFIED'
- 'ACTIVE'
- 'STANDBY'
- name: 'replicas'
type: Array
description: |
The replication role.
item_type:
type: NestedObject
properties:
- name: 'peerInstance'
type: String
description: |
The peer instance.
required: true
- name: 'effectiveReplication'
api_name: replication
type: NestedObject
output: true
description: |
Output only fields for replication configuration.
properties:
- name: 'replicas'
type: Array
description: |
The replication role.
item_type:
type: NestedObject
properties:
- name: 'state'
type: Enum
description: |
Output only. The replica state
output: true
- name: 'stateReasons'
type: Array
description: |
Output only. Additional information about the replication state, if available.
output: true
item_type:
type: Enum
- name: 'lastActiveSyncTime'
type: String
description: |
Output only. The timestamp of the latest replication snapshot taken on the active instance and is already replicated safely.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z"
output: true
- name: 'directoryServices'
type: NestedObject
min_version: beta
description: |
Directory Services configuration.
Should only be set if protocol is "NFS_V4_1".
immutable: true
properties:
- name: 'ldap'
type: NestedObject
description: |
Configuration for LDAP servers.
immutable: true
properties:
- name: 'domain'
type: String
required: true
description: |
The LDAP domain name in the format of `my-domain.com`.
immutable: true
- name: 'servers'
required: true
type: Array
description: |
The servers names are used for specifying the LDAP servers names.
The LDAP servers names can come with two formats:
1. DNS name, for example: `ldap.example1.com`, `ldap.example2.com`.
2. IP address, for example: `10.0.0.1`, `10.0.0.2`, `10.0.0.3`.
All servers names must be in the same format: either all DNS names or all
IP addresses.
immutable: true
item_type:
type: String
- name: 'usersOu'
type: String
description: |
The users Organizational Unit (OU) is optional. This parameter is a hint
to allow faster lookup in the LDAP namespace. In case that this parameter
is not provided, Filestore instance will query the whole LDAP namespace.
immutable: true
- name: 'groupsOu'
type: String
description: |
The groups Organizational Unit (OU) is optional. This parameter is a hint
to allow faster lookup in the LDAP namespace. In case that this parameter
is not provided, Filestore instance will query the whole LDAP namespace.
immutable: true