kubevela.github.io/docs/cue/cross-namespace-resource.md

1.6 KiB

title
Define resources located in defferent namespace with application

In this section, we will introduce how to use cue template create resources (workload/trait) in different namespace with the application.

By default, the metadata.namespace of K8s resource in CuE template is automatically filled with the same namespace of the application.

If you want to create K8s resources running in a specific namespace witch is different with the application, you can set the metadata.namespace field. KubeVela will create the resources in the specified namespace, and create a resourceTracker object as owener of those resources.

Usage

apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
  name: worker
spec:
  definitionRef:
    name: deployments.apps
  schematic:
    cue:
      template: |
        parameter: {
        	name:  string
        	image: string
        	namespace: string  # make this parameter `namespace` as keyword which represents the resource maybe located in defferent namespace with application
        }
        output: {
        	apiVersion: "apps/v1"
        	kind:       "Deployment"
                metadata: {
                   namespace: my-namespace
                }
        	spec: {
        		selector: matchLabels: {
        			"app.oam.dev/component": parameter.name
        		}
        		template: {
        			metadata: labels: {
        				"app.oam.dev/component": parameter.name
        			}
        			spec: {
        				containers: [{
        					name:  parameter.name
        					image: parameter.image
        				}]
        			}}}
        }