mmv1/products/compute/RegionPerInstanceConfig.yaml (228 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: 'RegionPerInstanceConfig'
api_resource_type_kind: InstanceGroupManager
api_variant_patterns:
- 'projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}'
description: |
A config defined for a single managed instance that belongs to an instance group manager. It preserves the instance name
across instance group manager operations and can define stateful disks or metadata that are unique to the instance.
This resource works with regional instance group managers.
references:
guides:
'Official Documentation': 'https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs'
api: 'https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers'
docs:
id_format: '{{project}}/{{region}}/{{region_instance_group_manager}}/{{name}}'
base_url: 'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}'
self_link: 'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/listPerInstanceConfigs'
create_url: 'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/createInstances'
update_url: 'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/updatePerInstanceConfigs'
update_verb: 'POST'
read_verb: 'POST'
delete_url: 'projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/deletePerInstanceConfigs'
delete_verb: 'POST'
mutex: 'instanceGroupManager/{{project}}/{{region}}/{{region_instance_group_manager}}/{{name}}'
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
async:
actions: ['create', 'delete', 'update']
type: 'OpAsync'
operation:
base_url: '{{op_id}}'
result:
resource_inside_response: false
identity:
- name
nested_query:
keys:
- items
is_list_of_ids: false
modify_by_patch: false
custom_code:
encoder: 'templates/terraform/encoders/compute_per_instance_config.go.tmpl'
update_encoder: 'templates/terraform/update_encoder/compute_per_instance_config.go.tmpl'
post_update: 'templates/terraform/post_update/compute_region_per_instance_config.go.tmpl'
custom_delete: 'templates/terraform/custom_delete/region_per_instance_config.go.tmpl'
exclude_tgc: true
examples:
- name: 'stateful_rigm'
primary_resource_id: 'stateful-instance'
vars:
template_name: 'my-template'
igm_name: 'my-rigm'
disk_name: 'my-disk-name'
# Fine-grained resource need different autogenerated tests, as
# we need to check destroy during a test step where the parent resource
# still exists, rather than during CheckDestroy (when read returns
# nothing because the parent resource has then also been destroyed)
exclude_test: true
virtual_fields:
- name: 'minimal_action'
description: |
The minimal action to perform on the instance during an update.
Default is `NONE`. Possible values are:
* REPLACE
* RESTART
* REFRESH
* NONE
type: String
default_value: "NONE"
- name: 'most_disruptive_allowed_action'
description: |
The most disruptive action to perform on the instance during an update.
Default is `REPLACE`. Possible values are:
* REPLACE
* RESTART
* REFRESH
* NONE
type: String
default_value: "REPLACE"
- name: 'remove_instance_on_destroy'
description: |
When true, deleting this config will immediately remove the underlying instance.
When false, deleting this config will use the behavior as determined by remove_instance_on_destroy.
type: Boolean
default_value: false
- name: 'remove_instance_state_on_destroy'
description: |
When true, deleting this config will immediately remove any specified state from the underlying instance.
When false, deleting this config will *not* immediately remove any state from the underlying instance.
State will be removed on the next instance recreation or update.
type: Boolean
default_value: false
parameters:
- name: 'region'
type: ResourceRef
description: |
Region where the containing instance group manager is located
url_param_only: true
required: false
immutable: true
ignore_read: true
default_from_api: true
resource: 'Region'
imports: 'name'
- name: 'regionInstanceGroupManager'
type: ResourceRef
description: |
The region instance group manager this instance config is part of.
url_param_only: true
required: true
immutable: true
resource: 'RegionInstanceGroupManager'
imports: 'name'
properties:
- name: 'name'
type: String
description: |
The name for this per-instance config and its corresponding instance.
required: true
immutable: true
- name: 'preservedState'
type: NestedObject
description: 'The preserved state for this instance.'
properties:
- name: 'metadata'
type: KeyValuePairs
description: |
Preserved metadata defined for this instance. This is a list of key->value pairs.
- name: 'disk'
type: Array
description: |
Stateful disks for the instance.
api_name: disks
is_set: true
custom_flatten: 'templates/terraform/custom_flatten/preserved_state_disks.go.tmpl'
custom_expand: 'templates/terraform/custom_expand/preserved_state_disks.go.tmpl'
item_type:
type: NestedObject
properties:
- name: 'deviceName'
type: String
description: |
A unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance.
required: true
- name: 'source'
type: String
description: |
The URI of an existing persistent disk to attach under the specified device-name in the format
`projects/project-id/zones/zone/disks/disk-name`.
required: true
- name: 'mode'
type: Enum
description: |
The mode of the disk.
default_value: "READ_WRITE"
enum_values:
- 'READ_ONLY'
- 'READ_WRITE'
- name: 'deleteRule'
type: Enum
description: |
A value that prescribes what should happen to the stateful disk when the VM instance is deleted.
The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`.
`NEVER` - detach the disk when the VM is deleted, but do not delete the disk.
`ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently
deleted from the instance group.
default_value: "NEVER"
enum_values:
- 'NEVER'
- 'ON_PERMANENT_INSTANCE_DELETION'
- name: 'internalIp'
type: Map
description: |
Preserved internal IPs defined for this instance. This map is keyed with the name of the network interface.
api_name: internalIPs
key_name: 'interface_name'
value_type:
name: internalIp
type: NestedObject
properties:
- name: 'autoDelete'
type: Enum
description: |
These stateful IPs will never be released during autohealing, update or VM instance recreate operations. This flag is used to configure if the IP reservation should be deleted after it is no longer used by the group, e.g. when the given instance or the whole group is deleted.
default_value: "NEVER"
enum_values:
- 'NEVER'
- 'ON_PERMANENT_INSTANCE_DELETION'
- name: 'ipAddress'
type: NestedObject
description: |
Ip address representation
properties:
- name: 'address'
type: ResourceRef
description: |
The URL of the reservation for this IP address.
custom_expand: 'templates/terraform/custom_expand/resourceref_with_validation.go.tmpl'
resource: 'Address'
imports: 'selfLink'
- name: 'externalIp'
type: Map
description: |
Preserved external IPs defined for this instance. This map is keyed with the name of the network interface.
api_name: externalIPs
key_name: 'interface_name'
value_type:
name: externalIp
type: NestedObject
properties:
- name: 'autoDelete'
type: Enum
description: |
These stateful IPs will never be released during autohealing, update or VM instance recreate operations. This flag is used to configure if the IP reservation should be deleted after it is no longer used by the group, e.g. when the given instance or the whole group is deleted.
default_value: "NEVER"
enum_values:
- 'NEVER'
- 'ON_PERMANENT_INSTANCE_DELETION'
- name: 'ipAddress'
type: NestedObject
description: |
Ip address representation
properties:
- name: 'address'
type: ResourceRef
description: |
The URL of the reservation for this IP address.
custom_expand: 'templates/terraform/custom_expand/resourceref_with_validation.go.tmpl'
resource: 'Address'
imports: 'selfLink'