enable-gcp-services: Advanced Example #
Overview #
In this example, we will see how to generate project services for multiple projects and how service pruning is done.
Fetch the example package #
Get the example package by running the following commands:
$ kpt pkg get https://github.com/kptdev/krm-functions-catalog.git/examples/enable-gcp-services-advanced
Explore the package by running:
$ kpt pkg tree enable-gcp-services-advanced
Package "enable-gcp-services-advanced"
├── [Kptfile] Kptfile enable-gcp-services-advanced
├── [proj1-services.yaml] ProjectServiceSet proj1-service
├── [proj2-services.yaml] ProjectServiceSet proj2-service
├── [resources.yaml] ComputeNetwork computenetwork-sample
├── [resources.yaml] RedisInstance redisinstance-sample
├── [service_proj1-service-bigquery.yaml] Service proj1-service-bigquery
├── [service_proj1-service-compute.yaml] Service proj1-service-compute
├── [service_proj1-service-redis.yaml] Service proj1-service-redis
└── [service_proj2-service-redis.yaml] Service proj2-service-redis
We can see two ProjectServiceSet
resources proj1-service
and proj2-service
for managing service enablement in two projects proj1
and proj2
. We can also see the services compute.googleapis.com
, redis.googleapis.com
managed within ProjectServiceSet
proj1-service
resource and redis.googleapis.com
within ProjectServiceSet
proj2-service
resource. Notice that bigquery.googleapis.com
is no longer present in proj1-service
ProjectServiceSet
. We can re render this package to prune that service resource.
Function invocation #
Render the configuration, enable-gcp-services
has been defined declaratively in the Kptfile.
$ kpt fn render enable-gcp-services-advanced
Expected result #
Package "enable-gcp-services-advanced":
[RUNNING] "ghcr.io/kptdev/krm-functions-catalog/enable-gcp-services:latest"
[PASS] "ghcr.io/kptdev/krm-functions-catalog/enable-gcp-services:latest"
Results:
[INFO] pruned service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-bigquery" in file "service_proj1-service-bigquery.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-compute" in file "service_proj1-service-compute.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-redis" in file "service_proj1-service-redis.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj2-service-redis" in file "service_proj2-service-redis.yaml"
Successfully executed 1 function(s) in 1 package(s).
We can see that the bigquery
service resource was pruned. Run the following command to see current service resources:
$ kpt pkg tree enable-gcp-services-advanced
We can see proj1-service-bigquery
no longer exists.
Package "enable-gcp-services-advanced"
├── [Kptfile] Kptfile enable-gcp-services-advanced
├── [proj1-services.yaml] ProjectServiceSet proj1-service
├── [proj2-services.yaml] ProjectServiceSet proj2-service
├── [resources.yaml] ComputeNetwork computenetwork-sample
├── [resources.yaml] RedisInstance redisinstance-sample
-├── [service_proj1-service-bigquery.yaml] Service proj1-service-bigquery
├── [service_proj1-service-compute.yaml] Service proj1-service-compute
├── [service_proj1-service-redis.yaml] Service proj1-service-redis
└── [service_proj2-service-redis.yaml] Service proj2-service-redis