From e7c78b6bcc380b4c9d5186cc89605a9820eb599e Mon Sep 17 00:00:00 2001 From: Barni S Date: Fri, 31 Jan 2025 17:01:40 -0500 Subject: [PATCH] Add eventarc example for GCP --- examples/gcp/README.md | 3 + examples/gcp/eventarc/README.md | 102 +++++++ .../gcsbucket-with-finalizer-trigger.png | Bin 0 -> 52803 bytes examples/gcp/eventarc/rgd.yaml | 161 +++++++++++ website/docs/examples/gcp/eventarc.md | 273 ++++++++++++++++++ .../gcp/gcsbucket-with-finalizer-trigger.png | Bin 0 -> 52803 bytes website/docs/examples/gcp/gke-cluster.md | 6 +- 7 files changed, 542 insertions(+), 3 deletions(-) create mode 100644 examples/gcp/eventarc/README.md create mode 100644 examples/gcp/eventarc/gcsbucket-with-finalizer-trigger.png create mode 100644 examples/gcp/eventarc/rgd.yaml create mode 100644 website/docs/examples/gcp/eventarc.md create mode 100644 website/docs/examples/gcp/gcsbucket-with-finalizer-trigger.png diff --git a/examples/gcp/README.md b/examples/gcp/README.md index 62a5aaf8..d1eeb972 100644 --- a/examples/gcp/README.md +++ b/examples/gcp/README.md @@ -78,6 +78,9 @@ gcloud services enable \ gcloud iam service-accounts add-iam-policy-binding kcc-operator@${PROJECT_ID}.iam.gserviceaccount.com \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager]" \ --role="roles/iam.workloadIdentityUser" + gcloud projects add-iam-policy-binding ${PROJECT_ID}\ + --member="serviceAccount:kcc-operator@${PROJECT_ID}.iam.gserviceaccount.com" \ + --role="roles/storage.admin" ``` 3. [Configure Config Connector](https://cloud.google.com/config-connector/docs/how-to/install-manually#addon-configuring) ``` diff --git a/examples/gcp/eventarc/README.md b/examples/gcp/eventarc/README.md new file mode 100644 index 00000000..78dd8d9c --- /dev/null +++ b/examples/gcp/eventarc/README.md @@ -0,0 +1,102 @@ +# GCSBucketWithFinalizerTrigger + +A **Platform Administrator** wants to give end users in their organization self-service access to creating GCS Buckets that triggers a Cloud Workflow when any object in it is finalized. The platform administrator creates a kro ResourceGraphDefinition called *gcsbucketwithfinalizertrigger.kro.run* that defines the required Kubernetes resources and a CRD called *GCSBucketWithFinalizertrigger* that exposes only the options they want to be configurable by end users. + +The following KCC objects are created by this RGD: +* IAMServiceAccount, IAMPolicyMember: Service Account with necessary permissions for Eventarc and Pub/Sub. +* StorageBucket +* PubSubTopic +* EventArcTrigger +* StorageNotification: To publish events from the GCS bucket to a Pub/Sub topic. + +Pre-requisites: +* Workflow: The workflow to be triggered on Finalizer event. + +Everything related to these resources would be hidden from the end user, simplifying their experience. + +![GCS EventArc Stack](gcsbucket-with-finalizer-trigger.png) + + + + + +## End User: GCSBucketWithFinalizerTrigger + +The administrator needs to install the RGD first. +The end user creates a `GCSBucketWithFinalizerTrigger` resource something like this: + +```yaml +apiVersion: kro.run/v1alpha1 +kind: GCSBucketWithFinalizerTrigger +metadata: + name: gcsevent-test + namespace: config-connector +spec: + name: demo-gcs # used as name or prefix for KCC objects + workflowName: gcs-finalizer-workflow # Replace with your workflow path + location: us-central1 # desired location + project: my-project-name # Replace with your project name +``` + +They can then check the status of the applied resource: + +``` +kubectl get gcsbucketwithfinalizertrigger -n config-connector +kubectl get gcsbucketwithfinalizertrigger gcsevent-test -n config-connector -o yaml +``` + +Navigate to GCS page in the GCP Console and verify the bucket creation. Also verify that the Triggers are setup correctly in the EventArc page. + +Once done, the user can delete the `GCSBucketWithFinalizerTrigger` instance: + +``` +kubectl delete gcsbucketwithfinalizertrigger gcsevent-test -n config-connector +``` + +## Administrator: ResourceGraphDefinition +The administrator needs to install the RGD in the cluster first before the user can consume it: + +``` +kubectl apply -f rgd.yaml +``` + +Validate the RGD is installed correctly: + +``` +kubectl get rgd gcsbucketwithfinalizertrigger.kro.run +``` + +Once all user created instances are deleted, the administrator can choose to deleted the RGD. diff --git a/examples/gcp/eventarc/gcsbucket-with-finalizer-trigger.png b/examples/gcp/eventarc/gcsbucket-with-finalizer-trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfdd20fd60738dd35cd998883adc9d5853ce733 GIT binary patch literal 52803 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 z�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 TX&)Ea2mZ9wb=3-0twaA86vmlW literal 0 HcmV?d00001 diff --git a/examples/gcp/eventarc/rgd.yaml b/examples/gcp/eventarc/rgd.yaml new file mode 100644 index 00000000..593b150c --- /dev/null +++ b/examples/gcp/eventarc/rgd.yaml @@ -0,0 +1,161 @@ +apiVersion: kro.run/v1alpha1 +kind: ResourceGraphDefinition +metadata: + name: gcsbucketwithfinalizertrigger.kro.run +spec: + schema: + apiVersion: v1alpha1 + kind: GCSBucketWithFinalizerTrigger + spec: + name: string + workflowName: string + location: string + project: string + status: + url: ${bucket.status.url} + resources: + - id: storageEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: storage-enablement + spec: + resourceID: storage.googleapis.com + - id: iamEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: iam-enablement + spec: + resourceID: iam.googleapis.com + - id: pubsubEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: pubsub-enablement + spec: + resourceID: pubsub.googleapis.com + - id: eventarcEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: eventarc-enablement + spec: + resourceID: eventarc.googleapis.com + - id: iamsa + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMServiceAccount + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + #annotations: + # cnrm.cloud.google.com/project-id: ${schema.spec.project} + name: ${schema.spec.name} + spec: + displayName: ${schema.spec.name}-eventarc-workflow + - id: iampmEventarc + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMPolicyMember + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + name: ${schema.spec.name}-eventarc + spec: + memberFrom: + serviceAccountRef: + name: ${iamsa.metadata.name} + role: roles/eventarc.admin + resourceRef: + kind: Project + external: ${schema.spec.project} + - id: iampmWorkflow + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMPolicyMember + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + name: ${schema.spec.name}-workflow + spec: + memberFrom: + serviceAccountRef: + name: ${iamsa.metadata.name} + role: roles/workflows.admin + resourceRef: + kind: Project + external: ${schema.spec.project} + - id: topic + template: + apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 + kind: PubSubTopic + metadata: + labels: + enabled-service: ${pubsubEnable.metadata.name} + name: ${schema.spec.name}-gcs-finalizer-topic + - id: bucket + template: + apiVersion: storage.cnrm.cloud.google.com/v1beta1 + kind: StorageBucket + metadata: + labels: + enabled-service: ${storageEnable.metadata.name} + name: ${schema.spec.name}-${schema.spec.project} + spec: + uniformBucketLevelAccess: true + - id: eventTrigger + template: + apiVersion: eventarc.cnrm.cloud.google.com/v1beta1 + kind: EventarcTrigger + metadata: + labels: + enabled-service: ${eventarcEnable.metadata.name} + name: ${schema.spec.name}-gcsfinalizer + spec: + destination: + workflowRef: + external: "projects/${schema.spec.project}/locations/${schema.spec.location}/workflows/${schema.spec.workflowName}" + location: ${schema.spec.location} + serviceAccountRef: + name: ${iamsa.metadata.name} + transport: + pubsub: + topicRef: + name: ${topic.metadata.name} + namespace: config-connector + matchingCriteria: + - attribute: "type" + value: "google.cloud.pubsub.topic.v1.messagePublished" + projectRef: + external: "projects/${schema.spec.project}" + - id: storageNotification + template: + apiVersion: storage.cnrm.cloud.google.com/v1beta1 + kind: StorageNotification + metadata: + name: ${schema.spec.name}-gcs + spec: + bucketRef: + name: ${bucket.metadata.name} + topicRef: + name: ${topic.metadata.name} + eventTypes: + - "OBJECT_FINALIZE" + payloadFormat: JSON_API_V1 diff --git a/website/docs/examples/gcp/eventarc.md b/website/docs/examples/gcp/eventarc.md new file mode 100644 index 00000000..5ff95175 --- /dev/null +++ b/website/docs/examples/gcp/eventarc.md @@ -0,0 +1,273 @@ +--- +sidebar_position: 407 +--- + +# GCSBucketWithFinalizerTrigger + +A **Platform Administrator** wants to give end users in their organization self-service access to creating GCS Buckets that triggers a Cloud Workflow when any object in it is finalized. The platform administrator creates a kro ResourceGraphDefinition called *gcsbucketwithfinalizertrigger.kro.run* that defines the required Kubernetes resources and a CRD called *GCSBucketWithFinalizertrigger* that exposes only the options they want to be configurable by end users. + +The following KCC objects are created by this RGD: +* IAMServiceAccount, IAMPolicyMember: Service Account with necessary permissions for Eventarc and Pub/Sub. +* StorageBucket +* PubSubTopic +* EventArcTrigger +* StorageNotification: To publish events from the GCS bucket to a Pub/Sub topic. + +Pre-requisites: +* Workflow: The workflow to be triggered on Finalizer event. + +Everything related to these resources would be hidden from the end user, simplifying their experience. + +![GCS EventArc Stack](gcsbucket-with-finalizer-trigger.png) + + + + + +## End User: GCSBucketWithFinalizerTrigger + +The administrator needs to install the RGD first. +The end user creates a `GCSBucketWithFinalizerTrigger` resource something like this: + +```yaml +apiVersion: kro.run/v1alpha1 +kind: GCSBucketWithFinalizerTrigger +metadata: + name: gcsevent-test + namespace: config-connector +spec: + name: demo-gcs # used as name or prefix for KCC objects + workflowName: gcs-finalizer-workflow # Replace with your workflow path + location: us-central1 # desired location + project: my-project-name # Replace with your project name +``` + +They can then check the status of the applied resource: + +``` +kubectl get gcsbucketwithfinalizertrigger -n config-connector +kubectl get gcsbucketwithfinalizertrigger gcsevent-test -n config-connector -o yaml +``` + +Navigate to GCS page in the GCP Console and verify the bucket creation. Also verify that the Triggers are setup correctly in the EventArc page. + +Once done, the user can delete the `GCSBucketWithFinalizerTrigger` instance: + +``` +kubectl delete gcsbucketwithfinalizertrigger gcsevent-test -n config-connector +``` + +## Administrator: ResourceGraphDefinition +The administrator needs to install the RGD in the cluster first before the user can consume it: + +``` +kubectl apply -f rgd.yaml +``` + +Validate the RGD is installed correctly: + +``` +kubectl get rgd gcsbucketwithfinalizertrigger.kro.run +``` + +Once all user created instances are deleted, the administrator can choose to deleted the RGD. + +

+ ResourceGraphDefinition + ```yaml title="rgd.yaml" +apiVersion: kro.run/v1alpha1 +kind: ResourceGraphDefinition +metadata: + name: gcsbucketwithfinalizertrigger.kro.run +spec: + schema: + apiVersion: v1alpha1 + kind: GCSBucketWithFinalizerTrigger + spec: + name: string + workflowName: string + location: string + project: string + status: + url: ${bucket.status.url} + resources: + - id: storageEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: storage-enablement + spec: + resourceID: storage.googleapis.com + - id: iamEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: iam-enablement + spec: + resourceID: iam.googleapis.com + - id: pubsubEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: pubsub-enablement + spec: + resourceID: pubsub.googleapis.com + - id: eventarcEnable + template: + apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 + kind: Service + metadata: + annotations: + cnrm.cloud.google.com/deletion-policy: "abandon" + cnrm.cloud.google.com/disable-dependent-services: "false" + name: eventarc-enablement + spec: + resourceID: eventarc.googleapis.com + - id: iamsa + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMServiceAccount + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + #annotations: + # cnrm.cloud.google.com/project-id: ${schema.spec.project} + name: ${schema.spec.name} + spec: + displayName: ${schema.spec.name}-eventarc-workflow + - id: iampmEventarc + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMPolicyMember + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + name: ${schema.spec.name}-eventarc + spec: + memberFrom: + serviceAccountRef: + name: ${iamsa.metadata.name} + role: roles/eventarc.admin + resourceRef: + kind: Project + external: ${schema.spec.project} + - id: iampmWorkflow + template: + apiVersion: iam.cnrm.cloud.google.com/v1beta1 + kind: IAMPolicyMember + metadata: + labels: + enabled-service: ${iamEnable.metadata.name} + name: ${schema.spec.name}-workflow + spec: + memberFrom: + serviceAccountRef: + name: ${iamsa.metadata.name} + role: roles/workflows.admin + resourceRef: + kind: Project + external: ${schema.spec.project} + - id: topic + template: + apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 + kind: PubSubTopic + metadata: + labels: + enabled-service: ${pubsubEnable.metadata.name} + name: ${schema.spec.name}-gcs-finalizer-topic + - id: bucket + template: + apiVersion: storage.cnrm.cloud.google.com/v1beta1 + kind: StorageBucket + metadata: + labels: + enabled-service: ${storageEnable.metadata.name} + name: ${schema.spec.name}-${schema.spec.project} + spec: + uniformBucketLevelAccess: true + - id: eventTrigger + template: + apiVersion: eventarc.cnrm.cloud.google.com/v1beta1 + kind: EventarcTrigger + metadata: + labels: + enabled-service: ${eventarcEnable.metadata.name} + name: ${schema.spec.name}-gcsfinalizer + spec: + destination: + workflowRef: + external: "projects/${schema.spec.project}/locations/${schema.spec.location}/workflows/${schema.spec.workflowName}" + location: ${schema.spec.location} + serviceAccountRef: + name: ${iamsa.metadata.name} + transport: + pubsub: + topicRef: + name: ${topic.metadata.name} + namespace: config-connector + matchingCriteria: + - attribute: "type" + value: "google.cloud.pubsub.topic.v1.messagePublished" + projectRef: + external: "projects/${schema.spec.project}" + - id: storageNotification + template: + apiVersion: storage.cnrm.cloud.google.com/v1beta1 + kind: StorageNotification + metadata: + name: ${schema.spec.name}-gcs + spec: + bucketRef: + name: ${bucket.metadata.name} + topicRef: + name: ${topic.metadata.name} + eventTypes: + - "OBJECT_FINALIZE" + payloadFormat: JSON_API_V1 + ``` +
diff --git a/website/docs/examples/gcp/gcsbucket-with-finalizer-trigger.png b/website/docs/examples/gcp/gcsbucket-with-finalizer-trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfdd20fd60738dd35cd998883adc9d5853ce733 GIT binary patch literal 52803 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 z�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 TX&)Ea2mZ9wb=3-0twaA86vmlW literal 0 HcmV?d00001 diff --git a/website/docs/examples/gcp/gke-cluster.md b/website/docs/examples/gcp/gke-cluster.md index 264db6ef..6b4cbd3e 100644 --- a/website/docs/examples/gcp/gke-cluster.md +++ b/website/docs/examples/gcp/gke-cluster.md @@ -38,15 +38,15 @@ They can then check the status of the applied resource: ``` kubectl get gkeclusters -kubectl get gkeclusters krodemo -o yaml +kubectl get gkeclusters krodemo -n config-connector -o yaml ``` Navigate to GKE Cluster page in the GCP Console and verify the cluster creation. -Once done, the user can delete the `GKECluster`: +Once done, the user can delete the `GKECluster` instance: ``` -kubectl delete gkecluster $CLUSTER_NAME +kubectl delete gkecluster krodemo -n config-connector ``` ## Administrator: ResourceGraphDefinition