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.