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

1.6 KiB

title
Render Resource to Other Namespaces

In this section, we will introduce how to use cue template create resources 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 owner 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 different 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
        				}]
        			}}}
        }