github.com/oam-dev/kubevela@v1.9.11/charts/vela-core/templates/defwithtemplate/env.yaml (about)

     1  # Code generated by KubeVela templates. DO NOT EDIT. Please edit the original cue file.
     2  # Definition source cue file: vela-templates/definitions/internal/env.cue
     3  apiVersion: core.oam.dev/v1beta1
     4  kind: TraitDefinition
     5  metadata:
     6    annotations:
     7      definition.oam.dev/description: Add env on K8s pod for your workload which follows the pod spec in path 'spec.template'
     8    name: env
     9    namespace: {{ include "systemDefinitionNamespace" . }}
    10  spec:
    11    appliesToWorkloads:
    12      - deployments.apps
    13      - statefulsets.apps
    14      - daemonsets.apps
    15      - jobs.batch
    16    schematic:
    17      cue:
    18        template: |
    19          #PatchParams: {
    20          	// +usage=Specify the name of the target container, if not set, use the component name
    21          	containerName: *"" | string
    22          	// +usage=Specify if replacing the whole environment settings for the container
    23          	replace: *false | bool
    24          	// +usage=Specify the  environment variables to merge, if key already existing, override its value
    25          	env: [string]: string
    26          	// +usage=Specify which existing environment variables to unset
    27          	unset: *[] | [...string]
    28          }
    29          PatchContainer: {
    30          	_params: #PatchParams
    31          	name:    _params.containerName
    32          	_delKeys: {for k in _params.unset {(k): ""}}
    33          	_baseContainers: context.output.spec.template.spec.containers
    34          	_matchContainers_: [ for _container_ in _baseContainers if _container_.name == name {_container_}]
    35          	_baseContainer: *_|_ | {...}
    36          	if len(_matchContainers_) == 0 {
    37          		err: "container \(name) not found"
    38          	}
    39          	if len(_matchContainers_) > 0 {
    40          		_baseContainer: _matchContainers_[0]
    41          		_baseEnv:       _baseContainer.env
    42          		if _baseEnv == _|_ {
    43          			// +patchStrategy=replace
    44          			env: [ for k, v in _params.env if _delKeys[k] == _|_ {
    45          				name:  k
    46          				value: v
    47          			}]
    48          		}
    49          		if _baseEnv != _|_ {
    50          			_baseEnvMap: {for envVar in _baseEnv {(envVar.name): envVar}}
    51          			// +patchStrategy=replace
    52          			env: [ for envVar in _baseEnv if _delKeys[envVar.name] == _|_ && !_params.replace {
    53          				name: envVar.name
    54          				if _params.env[envVar.name] != _|_ {
    55          					value: _params.env[envVar.name]
    56          				}
    57          				if _params.env[envVar.name] == _|_ {
    58          					if envVar.value != _|_ {
    59          						value: envVar.value
    60          					}
    61          					if envVar.valueFrom != _|_ {
    62          						valueFrom: envVar.valueFrom
    63          					}
    64          				}
    65          			}] + [ for k, v in _params.env if _delKeys[k] == _|_ && (_params.replace || _baseEnvMap[k] == _|_) {
    66          				name:  k
    67          				value: v
    68          			}]
    69          		}
    70          	}
    71          }
    72          patch: spec: template: spec: {
    73          	if parameter.containers == _|_ {
    74          		// +patchKey=name
    75          		containers: [{
    76          			PatchContainer & {_params: {
    77          				if parameter.containerName == "" {
    78          					containerName: context.name
    79          				}
    80          				if parameter.containerName != "" {
    81          					containerName: parameter.containerName
    82          				}
    83          				replace: parameter.replace
    84          				env:     parameter.env
    85          				unset:   parameter.unset
    86          			}}
    87          		}]
    88          	}
    89          	if parameter.containers != _|_ {
    90          		// +patchKey=name
    91          		containers: [ for c in parameter.containers {
    92          			if c.containerName == "" {
    93          				err: "containerName must be set for containers"
    94          			}
    95          			if c.containerName != "" {
    96          				PatchContainer & {_params: c}
    97          			}
    98          		}]
    99          	}
   100          }
   101  
   102          parameter: *#PatchParams | close({
   103          	// +usage=Specify the environment variables for multiple containers
   104          	containers: [...#PatchParams]
   105          })
   106  
   107          errs: [ for c in patch.spec.template.spec.containers if c.err != _|_ {c.err}]
   108