GCP Generation Rule Examples
Below is an example of how to configure Generation Rules and templates for Google Cloud Platform (GCP) resources—in this case, Google Kubernetes Engine (GKE) Clusters. The final result automatically generates an SLX, SLI, and Runbook for each matched cluster.
Example Directory Layout
gke-cluster-health└── .runwhen ├── generation-rules │ └── gke-cluster-health.yaml └── templates ├── gke-cluster-health-slx.yaml ├── gke-cluster-health-sli.yaml └── gke-cluster-health-taskset.yamlGeneration Rule
apiVersion: runwhen.com/v1kind: GenerationRulesspec: platform: gcp generationRules: - resourceTypes: - gcp_container_clusters matchRules: - type: pattern pattern: ".+" properties: [ name ] mode: substring slxs: - baseName: gke-cluster-health qualifiers: [ "project" ] baseTemplateName: gke-cluster-health levelOfDetail: basic outputItems: - type: slx - type: sli - type: runbook templateName: gke-cluster-health-taskset.yamlExplanation
- resourceTypes: Targets GCP GKE clusters (
gcp_container_clusters). - matchRules: Matches any cluster name containing at least one character.
- slxs: Generates an SLX, SLI, and Runbook for every matched cluster. The templates are all prefixed by
gke-cluster-health.
SLI Template Example
apiVersion: runwhen.com/v1kind: ServiceLevelIndicatormetadata: name: {{slx_name}} labels: {% include "common-labels.yaml" %} annotations: {% include "common-annotations.yaml" %}spec: displayUnitsLong: OK displayUnitsShort: ok locations: - {{default_location}} description: Runs tasks validate GKE Cluster health codeBundle: {% if repo_url %} repoUrl: {{repo_url}} {% else %} repoUrl: https://github.com/runwhen-contrib/rw-cli-codecollection.git {% endif %} {% if ref %} ref: {{ref}} {% else %} ref: main {% endif %} pathToRobot: codebundles/gke-cluster-health/sli.robot intervalStrategy: intermezzo intervalSeconds: 600 configProvided: - name: GCP_PROJECT_ID value: {{match_resource.resource.project_id}} secretsProvided: - name: gcp_credentials_json workspaceKey: {{custom.gcp_ops_suite_sa}} alerts: warning: operator: < threshold: '1' for: '20m' ticket: operator: < threshold: '1' for: '30m' page: operator: '==' threshold: '0' for: ''Explanation
- intervalSeconds: Runs every 600 seconds (10 minutes).
- configProvided: Passes the GCP Project ID from the matched cluster.
- secretsProvided: References
gcp_credentials_jsonfrom your workspace for authentication. - alerts: Sets up thresholds for warning, ticket, and page conditions.
SLX Template Example
apiVersion: runwhen.com/v1kind: ServiceLevelXmetadata: name: {{slx_name}} labels: {% include "common-labels.yaml" %} annotations: {% include "common-annotations.yaml" %}spec: imageURL: https://storage.googleapis.com/runwhen-nonprod-shared-images/icons/gcp/google_kubernetes_engine/google_kubernetes_engine.svg alias: GKE Cluster Health for Project {{match_resource.resource.project_id}} asMeasuredBy: Active GCP recommendations, overutilized or failed resources, and unsafe or non functioning configurations. configProvided: - name: SLX_PLACEHOLDER value: SLX_PLACEHOLDER owners: - {{workspace.owner_email}} statement: GKE Clusters should be running in a healthy state. additionalContext: project: "{{match_resource.resource.project_id}}"Explanation
- alias: Provides a descriptive name referencing the project.
- asMeasuredBy: Explains that the SLX is looking for issues in the GKE cluster.
- additionalContext: Logs the project ID for debugging.
Runbook Template Example
apiVersion: runwhen.com/v1kind: Runbookmetadata: name: {{slx_name}} labels: {% include "common-labels.yaml" %} annotations: {% include "common-annotations.yaml" %}spec: location: {{default_location}} description: Runs tasks validate GKE Cluster health codeBundle: {% if repo_url %} repoUrl: {{repo_url}} {% else %} repoUrl: https://github.com/runwhen-contrib/rw-cli-codecollection.git {% endif %} {% if ref %} ref: {{ref}} {% else %} ref: main {% endif %} pathToRobot: codebundles/gke-cluster-health/runbook.robot configProvided: - name: GCP_PROJECT_ID value: {{match_resource.resource.project_id}} secretsProvided: - name: gcp_credentials_json workspaceKey: {{custom.gcp_ops_suite_sa}}Explanation
- pathToRobot: Points to the runbook code for checking GKE cluster health.
- configProvided: Again passes the GCP Project ID.
- secretsProvided: The same GCP credentials used by the SLI.
Summary
With these configurations:
- A single Generation Rule matches GCP GKE Clusters.
- It emits an SLX, SLI, and Runbook for each matched cluster.
- The templates reference the GCP Project ID and rely on provided GCP credentials.
This approach can be extended to other GCP resource types by adjusting resourceTypes, matchRules, and the code bundles used in your templates.