Managing resources with the resourceID field
This page explains how to manage resources with the resourceID
field.
Config Connector lets you explicitly specify the resource
ID of a Google Cloud
resource using the immutable but optional resourceID
field to create or
acquire the resource. "Immutable, but optional" means that you can choose to
specify or not specify the resourceID
field, but you can't make any changes to
the value of the resourceID
field after applying the manifest to your cluster.
The resourceID
field increases the flexibility of naming a Google Cloud
resource that has a
user-specified resource ID. Using the resourceID
field in your Config Connector resources, you can define multiple
Config Connector resources of the same kind with the same Google Cloud
resource name under different projects, folders, organizations or parent
resources within the same namespace. The Google Cloud resource name is
also not restricted by the
naming convention
of a Kubernetes object name. In addition, the resourceID
field enables the
acquisition of a Google Cloud resource that has a service-generated
resource ID.
Config Connector makes the namespace the "owner" of a resource to prevent it
from being taken by another owner. However, if you are using the resourceID
field,
there can be multiple resources with the same Google Cloud resource name,
created under the same namespace. These resources create conflicts that Config Connector
cannot manage. You need to
resolve any conflicts manually.
Types of resource IDs
In Config Connector, resource IDs can be user-specified or service-generated.
- User-specified resource IDs
- A resource ID that is determined, specified, and passed in by the user before
the resource creation. You can create or acquire a resource that has a
user-specified resource ID with the
resourceID
field. - Service-generated resource IDs
- A resource ID that is generated by the service during the resource creation.
It can be retrieved by the user after the resource is successfully created. You
can acquire a resource that has a service-generated resource ID with the
resourceID
field. Leave the field unspecified if you want to create a new resource that has a service-generated resource ID. See the list of Resources with a service-generated resource ID.
Specifying the resourceID field
You can specify the resourceID
field in the resource's spec
.
The following manifest describes how to specify the resourceID
field for a
Pub/Sub topic. The name of the Config Connector resource is
pubsub-topic-sample
and the name of the Pub/Sub topic is
pubsub-topic-id
.
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
metadata:
name: pubsub-topic-sample
spec:
resourceID: pubsub-topic-id
Creating a resource with the resourceID field
Creating a BigQuery dataset
In this example, you create a new BigQuery dataset using
Config Connector with the resourceID
field. The value of the resourceID
field should follow the
naming convention for the datasetId
field
of the BigQuery dataset.
Copy the following contents into a file named
bigquery-dataset.yaml
.apiVersion: bigquery.cnrm.cloud.google.com/v1beta1 kind: BigQueryDataset metadata: name: bigquerydataset-sample-for-creation spec: resourceID: bigquerydataset_sample_with_resourceid defaultTableExpirationMs: 3600000 description: "BigQuery Dataset Sample with the ResourceID Field" friendlyName: bigquerydataset-sample-with-resourceid location: US
Apply the YAML file to your cluster.
kubectl apply --namespace CC_NAMESPACE -f bigquery-dataset.yaml
Replace
CC_NAMESPACE
with the namespace Config Connector manages resources from.Use
kubectl describe
to see details on the dataset.kubectl describe --namespace CC_NAMESPACE bigquerydataset bigquerydataset-sample-for-creation
Replace
CC_NAMESPACE
with the namespace Config Connector manages resources from.
Acquiring a resource with the resourceID field
When you manage a Google Cloud resource with the resourceID
field,
Config Connector acquires the resource if:
- The resource has a user-specified resource ID, and the values in the manifest and the resource name match an existing resource; Or,
- The resource has a service-generated resource ID.
Acquiring a folder
To acquire a folder using Config Connector with the resourceID
field, complete
the following steps:
Copy the following contents into a file named
folder.yaml
.apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1 kind: Folder metadata: annotations: cnrm.cloud.google.com/organization-id: ORG_ID # Remove the deletion-policy annotation if it is safe to delete the # folder when the resource is deleted from your cluster. cnrm.cloud.google.com/deletion-policy: "abandon" name: folder-sample-for-acquisition spec: resourceID: ACQUIRED_FOLDER_ID displayName: ACQUIRED_FOLDER_DISPLAY_NAME
Replace the following:
ORG_ID
with the numeric ID for your organization.ACQUIRED_FOLDER_ID
with the numeric ID for the folder to be acquired.ACQUIRED_FOLDER_DISPLAY_NAME
with the display name for the folder to be acquired.
Apply the YAML file to your cluster.
kubectl apply --namespace CC_NAMESPACE -f folder.yaml
Replace
CC_NAMESPACE
with the namespace Config Connector manages resources from.Use
kubectl describe
to see details on the folder.kubectl describe --namespace CC_NAMESPACE folder folder-sample-for-acquisition
Replace
CC_NAMESPACE
with the namespace Config Connector manages resources from.
What's next
Review the Resource reference to learn about the resources Config Connector supports.