update more docs for 1.6
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
This commit is contained in:
parent
bf67b7dfc9
commit
ee8e7bf2a7
|
|
@ -207,138 +207,6 @@ spec:
|
|||
type: webservice
|
||||
status: {}
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"pvc","label":"PersistentVolumeClaim","sort":1,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"maxLength":32,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"mountPath","sort":3,"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"resources","sort":7,"subParameters":[{"jsonKey":"requests","sort":1,"style":{"colSpan":12},"subParameters":[{"jsonKey":"storage","label":"Request
|
||||
Storage","uiType":"DiskNumber","validate":{"immutable":true,"required":true}}],"uiType":"Ignore"},{"jsonKey":"limits","sort":3,"style":{"colSpan":12},"subParameters":[{"jsonKey":"storage","label":"Limit
|
||||
Storage","uiType":"DiskNumber","validate":{"immutable":true,"required":true}}],"uiType":"Ignore"}],"validate":{"defaultValue":{"limits":{"storage":"8Gi"},"requests":{"storage":"8Gi"}},"required":true}},{"description":"If
|
||||
not specified, the cluster default StorageClass is used.","jsonKey":"storageClassName","sort":9},{"jsonKey":"accessModes","sort":11,"validate":{"defaultValue":["ReadWriteOnce"],"required":false}},{"description":"You
|
||||
can set the value of volumeMode to Block to use a volume as a raw block device.","jsonKey":"volumeMode","sort":12,"uiType":"Select","validate":{"defaultValue":"Filesystem","options":[{"label":"Filesystem","value":"Filesystem"},{"label":"Block","value":"Block"}]}},{"description":"The
|
||||
VolumeName is the binding reference to the PersistentVolume backing this claim.","jsonKey":"volumeName","sort":14},{"jsonKey":"selector","sort":17},{"description":"It
|
||||
will create a new volume based on the contents of the specified data source.","jsonKey":"dataSource","sort":19},{"disable":true,"jsonKey":"dataSourceRef","sort":20},{"disable":true,"jsonKey":"mountOnly"}]},{"disable":true,"jsonKey":"secret","sort":3},{"disable":true,"jsonKey":"configMap","sort":5},{"disable":true,"jsonKey":"emptyDir"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: trait-uischema-storage
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"url","label":"URL","sort":1,"subParameters":[{"jsonKey":"value","label":"URL","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"data","sort":3}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-webhook
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"replicas","validate":{"min":0,"required":true}}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: trait-uischema-scaler
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"image","label":"Container Image","sort":1,"uiType":"ImageInput"},{"disable":true,"jsonKey":"imagePullSecret","sort":2},{"description":"Specifies
|
||||
the memory resource required for the container, If set to 0, there is no limit.","jsonKey":"memory","label":"Memory","sort":4,"style":{"colSpan":12},"uiType":"MemoryNumber","validate":{"defaultValue":"1024Mi","required":true}},{"description":"Specifies
|
||||
the cpu resource required for the container, If set to 0, there is no limit.","jsonKey":"cpu","label":"CPU","sort":5,"style":{"colSpan":12},"uiType":"CPUNumber","validate":{"defaultValue":"0.5","required":true}},{"jsonKey":"exposeType","sort":6,"validate":null},{"jsonKey":"ports","label":"Service
|
||||
Ports","sort":7,"subParameters":[{"jsonKey":"port","sort":1,"validate":{"min":1,"required":true}},{"jsonKey":"protocol","sort":3},{"disable":true,"jsonKey":"name","sort":4},{"jsonKey":"expose","sort":5}],"validate":{"defaultValue":[{"expose":true,"port":80,"protocol":"TCP"}],"required":true}},{"jsonKey":"cmd","label":"CMD","sort":9},{"jsonKey":"env","label":"ENV","sort":10,"subParameterGroupOption":[{"keys":["name","value"],"label":"Add
|
||||
By Value"},{"keys":["name","valueFrom"],"label":"Add By Secret"}],"subParameters":[{"jsonKey":"valueFrom","label":"Secret
|
||||
Selector","subParameters":[{"disable":true,"jsonKey":"configMapKeyRef"},{"jsonKey":"secretKeyRef","subParameters":[{"jsonKey":"name","label":"Secret
|
||||
Name","sort":1,"uiType":"SecretSelect"},{"jsonKey":"key","label":"Secret Key","sort":3,"uiType":"SecretKeySelect"}],"uiType":"Ignore"}],"uiType":"Ignore"}],"uiType":"Structs"},{"description":"Set
|
||||
the path and type that the service needs to persist.","jsonKey":"volumeMounts","label":"Persistent
|
||||
Storage","sort":12,"subParameters":[{"disable":true,"jsonKey":"configMap"},{"disable":true,"jsonKey":"secret"},{"jsonKey":"pvc","label":"Storage
|
||||
By PVC","sort":1,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"claimName","sort":3},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]},{"jsonKey":"hostPath","label":"Storage
|
||||
By HostPath","sort":3,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"path","label":"Host
|
||||
Path","sort":3,"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]},{"jsonKey":"emptyDir","label":"Temporary
|
||||
Storage","sort":5,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"medium","sort":3,"validate":{"options":[{"label":"Memory","value":"memory"},{"label":"Dir","value":""}],"required":false}},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]}],"uiType":"Group"},{"jsonKey":"readinessProbe","label":"ReadinessProbe","sort":13,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"livenessProbe","label":"LivenessProbe","sort":15,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"annotations","sort":19},{"jsonKey":"labels","sort":21},{"description":"Specify
|
||||
image pull policy for your service","jsonKey":"imagePullPolicy","label":"Image
|
||||
Pull Policy","sort":24,"uiType":"Select","validate":{"defaultValue":"IfNotPresent","options":[{"label":"IfNotPresent","value":"IfNotPresent"},{"label":"Always","value":"Always"},{"label":"Never","value":"Never"}]}},{"disable":true,"jsonKey":"addRevisionLabel"},{"disable":true,"jsonKey":"port"},{"disable":true,"jsonKey":"volumes"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-webservice
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"parallel","sort":5,"validate":{"defaultValue":false}},{"jsonKey":"policy","sort":1},{"jsonKey":"env","sort":3}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-deploy2env
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"image","label":"Image","sort":1,"uiType":"ImageInput"},{"disable":true,"jsonKey":"imagePullSecret","sort":2},{"jsonKey":"restart","sort":3,"uiType":"Select","validate":{"defaultValue":"Never","options":[{"label":"Never","value":"Never"},{"label":"OnFailure","value":"OnFailure"}],"required":true}},{"jsonKey":"count","sort":4,"uiType":"Number","validate":{"defaultValue":1,"max":128,"min":0,"required":true}},{"description":"Specifies
|
||||
the memory resource required for the container, If set to 0, there is no limit.","jsonKey":"memory","label":"Memory","sort":5,"style":{"colSpan":12},"uiType":"MemoryNumber","validate":{"defaultValue":"1024Mi","required":true}},{"description":"Specifies
|
||||
the cpu resource required for the container, If set to 0, there is no limit.","jsonKey":"cpu","label":"CPU","sort":7,"style":{"colSpan":12},"uiType":"CPUNumber","validate":{"defaultValue":"0.5","required":true}},{"jsonKey":"cmd","label":"CMD","sort":9},{"jsonKey":"env","label":"ENV","sort":10,"subParameterGroupOption":[{"keys":["name","value"],"label":"Add
|
||||
By Value"},{"keys":["name","valueFrom"],"label":"Add By Secret"}],"subParameters":[{"jsonKey":"valueFrom","label":"Secret
|
||||
Selector","subParameters":[{"disable":true,"jsonKey":"configMapKeyRef"},{"jsonKey":"secretKeyRef","subParameters":[{"jsonKey":"name","label":"Secret
|
||||
Name","sort":1,"uiType":"SecretSelect"},{"jsonKey":"key","label":"Secret Key","sort":3,"uiType":"SecretKeySelect"}],"uiType":"Ignore"}],"uiType":"Ignore"}],"uiType":"Structs"},{"jsonKey":"readinessProbe","label":"ReadinessProbe","sort":13,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"livenessProbe","label":"LivenessProbe","sort":15,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"annotations","sort":19},{"jsonKey":"labels","sort":21},{"description":"Specify
|
||||
image pull policy for your service","jsonKey":"imagePullPolicy","label":"Image
|
||||
Pull Policy","sort":24,"uiType":"Select","validate":{"defaultValue":"IfNotPresent","options":[{"label":"IfNotPresent","value":"IfNotPresent"},{"label":"Always","value":"Always"},{"label":"Never","value":"Never"}]}},{"disable":true,"jsonKey":"volumes"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-task
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"description":"Support push messages to Dingding Group.","jsonKey":"dingding","sort":1,"subParameters":[{"jsonKey":"url","sort":1,"subParameters":[{"jsonKey":"value","label":"Webhook","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"message","sort":3,"subParameters":[{"disable":true,"jsonKey":"msgtype"},{"disable":true,"jsonKey":"link"},{"disable":true,"jsonKey":"markdown"},{"disable":true,"jsonKey":"at"},{"disable":true,"jsonKey":"actionCard"},{"disable":true,"jsonKey":"feedCard"},{"jsonKey":"text","subParameters":[{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"content","label":"Message"}],"uiType":"Ignore"}],"uiType":"Ignore"}]},{"description":"Support
|
||||
push email message.","jsonKey":"email","sort":3,"subParameters":[{"jsonKey":"from","sort":1,"subParameters":[{"jsonKey":"host","sort":1},{"jsonKey":"port","sort":3},{"jsonKey":"address","sort":5},{"jsonKey":"password","sort":7,"subParameters":[{"jsonKey":"value","label":"Password","uiType":"Password","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"alias","sort":9}]},{"jsonKey":"to","sort":3},{"jsonKey":"content","sort":5,"subParameters":[{"jsonKey":"subject","sort":1},{"jsonKey":"body","sort":3}]}]},{"description":"Support
|
||||
push messages to slack channel.","jsonKey":"slack","sort":5,"subParameters":[{"jsonKey":"url","sort":1,"subParameters":[{"jsonKey":"value","label":"Webhook","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"message","subParameters":[{"disable":true,"jsonKey":"blocks"},{"disable":true,"jsonKey":"attachments"},{"disable":true,"jsonKey":"thread_ts"},{"disable":true,"jsonKey":"mrkdwn"},{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"text","label":"Message"}],"uiType":"Ignore"}]}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-notification
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"dbType","label":"DBType","sort":1,"validate":{"defaultValue":"kubeapi","options":[{"label":"MongoDB","value":"mongodb"},{"label":"KubeAPI","value":"kubeapi"}],"required":true}},{"conditions":[{"jsonKey":"dbType","op":"==","value":"mongodb"}],"jsonKey":"dbURL","label":"DatabaseURL","sort":3,"validate":{"required":true}},{"jsonKey":"database","sort":7,"validate":{"defaultValue":"kubevela","required":true}},{"disable":true,"jsonKey":"serviceAccountName"},{"jsonKey":"serviceType","sort":8},{"jsonKey":"domain","sort":9},{"jsonKey":"gatewayDriver","sort":10},{"jsonKey":"repo","sort":11},{"jsonKey":"imagePullSecrets","sort":13}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: addon-uischema-velaux
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"policies","label":"Policies","sort":10,"uiType":"PolicySelect","validate":{"required":true}},{"jsonKey":"parallelism","sort":20,"style":{"colSpan":12}},{"jsonKey":"auto","sort":30,"style":{"colSpan":12}}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-deploy
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"objects","uiType":"K8sObjectsCode"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-k8s-objects
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
|
|
@ -349,193 +217,8 @@ metadata:
|
|||
name: policy-uischema-override
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresources: ql.#ListResourcesInApp
|
||||
& {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace: parameter.appNs\n\t\tfilter:
|
||||
{\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster: parameter.cluster\n\t\t\t}\n\t\t\tif
|
||||
parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace: parameter.clusterNs\n\t\t\t}\n\t\t\tapiVersion:
|
||||
\"v1\"\n\t\t\tkind: \"Service\"\n\t\t}\n\t\twithStatus: true\n\t}\n}\nstatus:
|
||||
{\n\tif resources.err == _|_ {\n\t\tservices: [ for i, resource in resources.list
|
||||
{\n\t\t\tresource.object\n\t\t}]\n\t}\n\tif resources.err != _|_ {\n\t\terror:
|
||||
resources.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: service-view
|
||||
namespace: vela-system
|
||||
... snip ...
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tname: string\n\tnamespace?:
|
||||
string\n\tcluster?: string\n\tkind: string\n\tapiVersion: string\n}\nresponse:
|
||||
ql.#Read & {\n\tvalue: {\n\t\tapiVersion: parameter.apiVersion\n\t\tkind: parameter.kind\n\t\tmetadata:
|
||||
{\n\t\t\tname: parameter.name\n\t\t\tif parameter.namespace != _|_ {\n\t\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t\t}\n\t\t}\n\t}\n\tif parameter.cluster != _|_ {\n\t\tcluster:
|
||||
parameter.cluster\n\t}\n}\n\nif response.err == _|_ {\n\tstatus: {\n\t\tresource:
|
||||
response.value\n\t}\n}\nif response.err != _|_ {\n\tstatus: {\n\t\terror: response.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: application-resource-detail-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tname?: string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresult:
|
||||
ql.#CollectPods & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster:
|
||||
parameter.cluster\n\t\t\t}\n\t\t\tif parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace:
|
||||
parameter.clusterNs\n\t\t\t}\n\t\t\tif parameter.name != _|_ {\n\t\t\t\tcomponents:
|
||||
[parameter.name]\n\t\t\t}\n\t\t}\n\t}\n}\n\nif result.err == _|_ {\n\tstatus:
|
||||
{\n\t\tpodList: [ for pod in result.list if pod.object != _|_ {\n\t\t\tcluster:
|
||||
\ pod.cluster\n\t\t\tworkload: pod.workload\n\t\t\tcomponent: pod.component\n\t\t\tmetadata:
|
||||
{\n\t\t\t\tname: pod.object.metadata.name\n\t\t\t\tnamespace: pod.object.metadata.namespace\n\t\t\t\tcreationTime:
|
||||
pod.object.metadata.creationTimestamp\n\t\t\t\tlabels: pod.object.metadata.labels\n\t\t\t\tversion:
|
||||
{\n\t\t\t\t\tif pod.publishVersion != _|_ {\n\t\t\t\t\t\tpublishVersion: pod.publishVersion\n\t\t\t\t\t}\n\t\t\t\t\tif
|
||||
pod.deployVersion != _|_ {\n\t\t\t\t\t\tdeployVersion: pod.deployVersion\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tstatus:
|
||||
{\n\t\t\t\tphase: pod.object.status.phase\n\t\t\t\t// refer to https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase\n\t\t\t\tif
|
||||
phase != \"Pending\" && phase != \"Unknown\" {\n\t\t\t\t\tpodIP: pod.object.status.podIP\n\t\t\t\t\thostIP:
|
||||
\ pod.object.status.hostIP\n\t\t\t\t\tnodeName: pod.object.spec.nodeName\n\t\t\t\t}\n\t\t\t}\n\t\t}]\n\t}\n}\n\nif
|
||||
result.err != _|_ {\n\tstatus: {\n\t\terror: result.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-pod-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\ttype: string\n\tnamespace:
|
||||
*\"\" | string\n\tcluster: *\"\" | string\n}\n\nschema: {\n\t\"secret\": {\n\t\tapiVersion:
|
||||
\"v1\"\n\t\tkind: \"Secret\"\n\t}\n\t\"configMap\": {\n\t\tapiVersion: \"v1\"\n\t\tkind:
|
||||
\ \"ConfigMap\"\n\t}\n\t\"pvc\": {\n\t\tapiVersion: \"v1\"\n\t\tkind: \"PersistentVolumeClaim\"\n\t}\n\t\"storageClass\":
|
||||
{\n\t\tapiVersion: \"storage.k8s.io/v1\"\n\t\tkind: \"StorageClass\"\n\t}\n\t\"ns\":
|
||||
{\n\t\tapiVersion: \"v1\"\n\t\tkind: \"Namespace\"\n\t}\n\t\"provider\":
|
||||
{\n\t\tapiVersion: \"terraform.core.oam.dev/v1beta1\"\n\t\tkind: \"Provider\"\n\t}\n}\n\nList:
|
||||
ql.#List & {\n\tresource: schema[parameter.type]\n\tfilter: {\n\t\tnamespace:
|
||||
parameter.namespace\n\t}\n\tcluster: parameter.cluster\n}\n\nstatus: {\n\tif List.err
|
||||
== _|_ {\n\t\tif len(List.list.items) == 0 {\n\t\t\terror: \"failed to list \\(parameter.type)
|
||||
in namespace \\(parameter.namespace)\"\n\t\t}\n\t\tif len(List.list.items) !=
|
||||
0 {\n\t\t\tlist: List.list.items\n\t\t}\n\t}\n\n\tif List.err != _|_ {\n\t\terror:
|
||||
List.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: resource-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\ncollectLogs: ql.#CollectLogsInPod & {\n\tcluster:
|
||||
\ parameter.cluster\n\tnamespace: parameter.namespace\n\tpod: parameter.pod\n\toptions:
|
||||
{\n\t\tcontainer: parameter.container\n\t\tprevious?: parameter.previous\n\t\tsinceSeconds?:
|
||||
parameter.sinceSeconds\n\t\tsinceTime?: parameter.sinceTime\n\t\ttimestamps?:
|
||||
\ parameter.timestamps\n\t\ttailLines?: parameter.tailLines\n\t\tlimitBytes?:
|
||||
\ parameter.limitBytes\n\t}\n}\nstatus: collectLogs.outputs\n\nparameter: {\n\t//
|
||||
+usage=Specify the cluster of the pod\n\tcluster: string\n\t// +usage=Specify
|
||||
the namespace of the pod\n\tnamespace: string\n\t// +usage=Specify the name of
|
||||
the pod\n\tpod: string\n\n\t// +usage=Specify the name of the container\n\tcontainer:
|
||||
string\n\t// +usage=If true, return previous terminated container logs\n\tprevious:
|
||||
*false | bool\n\t// +usage=If set, show logs in relative times\n\tsinceSeconds:
|
||||
*null | int\n\t// +usage=RFC3339 timestamp, if set, show logs since this time\n\tsinceTime:
|
||||
*null | string\n\t// +usage=If true, add timestamp at the beginning of every line\n\ttimestamps:
|
||||
*false | bool\n\t// +usage=If set, return the number of lines from the end of
|
||||
logs\n\ttailLines: *null | int\n\t// +usage=If set, limit the size of returned
|
||||
bytes\n\tlimitBytes: *null | int\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: collect-logs
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n}\n\nresources: ql.#ListResourcesInApp & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\t\"apiVersion\": \"terraform.core.oam.dev/v1beta2\"\n\t\t\t\"kind\":
|
||||
\ \"Configuration\"\n\t\t}\n\t\twithStatus: true\n\t}\n}\nstatus: {\n\tif
|
||||
resources.err == _|_ {\n\t\t\"cloud-resources\": [ for i, resource in resources.list
|
||||
{\n\t\t\tresource.object\n\t\t}]\n\t}\n\tif resources.err != _|_ {\n\t\terror:
|
||||
resources.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cloud-resource-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName?: string\n\tappNs?:
|
||||
\ string\n}\n\nsecretList: ql.#List & {\n\tresource: {\n\t\tapiVersion: \"v1\"\n\t\tkind:
|
||||
\ \"Secret\"\n\t}\n\tfilter: {\n\t\tmatchingLabels: {\n\t\t\t\"created-by\":
|
||||
\"terraform-controller\"\n\t\t\tif parameter.appName != _|_ && parameter.appNs
|
||||
!= _|_ {\n\t\t\t\t\"app.oam.dev/name\": parameter.appName\n\t\t\t\t\"app.oam.dev/namespace\":
|
||||
parameter.appNs\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatus: {\n\tif secretList.err == _|_
|
||||
{\n\t\tsecrets: secretList.list.items\n\t}\n\tif secretList.err != _|_ {\n\t\terror:
|
||||
secretList.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cloud-resource-secret-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tname: string\n\tnamespace:
|
||||
string\n\tcluster: *\"\" | string\n}\n\npod: ql.#Read & {\n\tvalue: {\n\t\tapiVersion:
|
||||
\"v1\"\n\t\tkind: \"Pod\"\n\t\tmetadata: {\n\t\t\tname: parameter.name\n\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t}\n\t}\n\tcluster: parameter.cluster\n}\n\neventList:
|
||||
ql.#SearchEvents & {\n\tvalue: {\n\t\tapiVersion: \"v1\"\n\t\tkind: \"Pod\"\n\t\tmetadata:
|
||||
\ pod.value.metadata\n\t}\n\tcluster: parameter.cluster\n}\n\npodMetrics: ql.#Read
|
||||
& {\n\tcluster: parameter.cluster\n\tvalue: {\n\t\tapiVersion: \"metrics.k8s.io/v1beta1\"\n\t\tkind:
|
||||
\ \"PodMetrics\"\n\t\tmetadata: {\n\t\t\tname: parameter.name\n\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t}\n\t}\n}\n\nstatus: {\n\tif pod.err == _|_ {\n\t\tcontainers:
|
||||
[ for container in pod.value.spec.containers {\n\t\t\tname: container.name\n\t\t\timage:
|
||||
container.image\n\t\t\tresources: {\n\t\t\t\tif container.resources.limits !=
|
||||
_|_ {\n\t\t\t\t\tlimits: container.resources.limits\n\t\t\t\t}\n\t\t\t\tif container.resources.requests
|
||||
!= _|_ {\n\t\t\t\t\trequests: container.resources.requests\n\t\t\t\t}\n\t\t\t\tif
|
||||
podMetrics.err == _|_ {\n\t\t\t\t\tusage: {for containerUsage in podMetrics.value.containers
|
||||
{\n\t\t\t\t\t\tif containerUsage.name == container.name {\n\t\t\t\t\t\t\tcpu:
|
||||
\ containerUsage.usage.cpu\n\t\t\t\t\t\t\tmemory: containerUsage.usage.memory\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif
|
||||
pod.value.status.containerStatuses != _|_ {\n\t\t\t\tstatus: {for containerStatus
|
||||
in pod.value.status.containerStatuses if containerStatus.name == container.name
|
||||
{\n\t\t\t\t\tstate: containerStatus.state\n\t\t\t\t\trestartCount: containerStatus.restartCount\n\t\t\t\t}}\n\t\t\t}\n\t\t}]\n\t\tif
|
||||
eventList.err == _|_ {\n\t\t\tevents: eventList.list\n\t\t}\n\t}\n\tif pod.err
|
||||
!= _|_ {\n\t\terror: pod.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: pod-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tname?: string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresult:
|
||||
ql.#CollectServices & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster:
|
||||
parameter.cluster\n\t\t\t}\n\t\t\tif parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace:
|
||||
parameter.clusterNs\n\t\t\t}\n\t\t\tif parameter.name != _|_ {\n\t\t\t\tcomponents:
|
||||
[parameter.name]\n\t\t\t}\n\t\t}\n\t}\n}\n\nif result.err == _|_ {\n\tstatus:
|
||||
{\n\t\tservices: result.list\n\t}\n}\n\nif result.err != _|_ {\n\tstatus: {\n\t\terror:
|
||||
result.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-service-view
|
||||
namespace: vela-system
|
||||
```
|
||||
</details>
|
||||
|
||||
|
|
|
|||
|
|
@ -541,10 +541,6 @@ local ─── default ─┬─ Service/hello-webserver-auxiliaryworkloa
|
|||
|
||||
You can also define health check policy and status message when a component deployed and tell the real status to end users.
|
||||
|
||||
:::caution
|
||||
Reference `parameter` defined in `template` is not supported now in health check and custom status, they work in different stage with the resource template. While we're going to support this feature in https://github.com/kubevela/kubevela/issues/4863 .
|
||||
:::
|
||||
|
||||
### Health check
|
||||
|
||||
The spec of health check is `<component-type-name>.attributes.status.healthPolicy`.
|
||||
|
|
@ -585,6 +581,27 @@ webserver: {
|
|||
}
|
||||
```
|
||||
|
||||
You can also use the `parameter` defined in the template like:
|
||||
|
||||
```
|
||||
webserver: {
|
||||
type: "component"
|
||||
...
|
||||
attributes: {
|
||||
status: {
|
||||
healthPolicy: #"""
|
||||
isHealth: (context.output.status.readyReplicas > 0) && (context.output.status.readyReplicas == parameter.replicas)
|
||||
"""#
|
||||
}
|
||||
}
|
||||
template: {
|
||||
parameter: {
|
||||
replicas: int
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
The health check result will be recorded into the corresponding component in `.status.services` of `Application` resource.
|
||||
|
||||
```yaml
|
||||
|
|
@ -669,6 +686,42 @@ status:
|
|||
| `context.replicaKey` | The key of replication in context. Replication is an internal policy, it will replicate resources with different keys specified. (This feature will be introduced in v1.6+.) | string |
|
||||
|
||||
|
||||
### Cluster Version
|
||||
|
||||
| Context Variable | Description | Type |
|
||||
| :---------------------------------: | :---------------------------------------------------------: | :----: |
|
||||
| `context.clusterVersion.major` | The major version of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.gitVersion` | The gitVersion of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.platform` | The platform information of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.minor` | The minor version of the runtime Kubernetes cluster. | int |
|
||||
|
||||
The cluster version context info can be used for graceful upgrade of definition. For example, you can define different API according to the cluster version.
|
||||
|
||||
```
|
||||
outputs: ingress: {
|
||||
if context.clusterVersion.minor < 19 {
|
||||
apiVersion: "networking.k8s.io/v1beta1"
|
||||
}
|
||||
if context.clusterVersion.minor >= 19 {
|
||||
apiVersion: "networking.k8s.io/v1"
|
||||
}
|
||||
kind: "Ingress"
|
||||
}
|
||||
```
|
||||
|
||||
Or use string contain pattern for this usage:
|
||||
|
||||
```
|
||||
import "strings"
|
||||
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "k3s") {
|
||||
provider: "k3s"
|
||||
}
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "aliyun") {
|
||||
provider: "aliyun"
|
||||
}
|
||||
```
|
||||
|
||||
## Component definition in Kubernetes
|
||||
|
||||
KubeVela is fully programmable via CUE, while it leverage Kubernetes as control plane and align with the API in yaml.
|
||||
|
|
|
|||
|
|
@ -424,10 +424,6 @@ So KubeVela allow patch or override in this case, please refer to [patch trait](
|
|||
|
||||
You can also define health check policy and status message when a trait deployed and tell the real status to end users.
|
||||
|
||||
:::caution
|
||||
Reference `parameter` defined in `template` is not supported now in health check and custom status, they work in different stage with the resource template. While we're going to support this feature in https://github.com/kubevela/kubevela/issues/4863 .
|
||||
:::
|
||||
|
||||
### Health Check
|
||||
|
||||
The spec of health check is `<trait-type-name>.attributes.status.healthPolicy`, it's similar to component definition.
|
||||
|
|
@ -467,6 +463,27 @@ my-ingress: {
|
|||
}
|
||||
```
|
||||
|
||||
You can also use the `parameter` defined in the template like:
|
||||
|
||||
```cue
|
||||
mytrait: {
|
||||
type: "trait"
|
||||
...
|
||||
attributes: {
|
||||
status: {
|
||||
healthPolicy: #"""
|
||||
isHealth: context.outputs."mytrait-\(parameter.name)".status.state == "Available"
|
||||
"""#
|
||||
}
|
||||
}
|
||||
template: {
|
||||
parameter: {
|
||||
name: string
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
The health check result will be recorded into the corresponding trait in `.status.services` of `Application` resource.
|
||||
|
||||
```yaml
|
||||
|
|
@ -562,6 +579,42 @@ status:
|
|||
| `context.appLabels` | The labels of the current application instance. | Object Map |
|
||||
| `context.appAnnotations` | The annotations of the current application instance. | Object Map |
|
||||
|
||||
### Cluster Version
|
||||
|
||||
| Context Variable | Description | Type |
|
||||
| :---------------------------------: | :---------------------------------------------------------: | :----: |
|
||||
| `context.clusterVersion.major` | The major version of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.gitVersion` | The gitVersion of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.platform` | The platform information of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.minor` | The minor version of the runtime Kubernetes cluster. | int |
|
||||
|
||||
The cluster version context info can be used for graceful upgrade of definition. For example, you can define different API according to the cluster version.
|
||||
|
||||
```
|
||||
outputs: ingress: {
|
||||
if context.clusterVersion.minor < 19 {
|
||||
apiVersion: "networking.k8s.io/v1beta1"
|
||||
}
|
||||
if context.clusterVersion.minor >= 19 {
|
||||
apiVersion: "networking.k8s.io/v1"
|
||||
}
|
||||
kind: "Ingress"
|
||||
}
|
||||
```
|
||||
|
||||
Or use string contain pattern for this usage:
|
||||
|
||||
```
|
||||
import "strings"
|
||||
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "k3s") {
|
||||
provider: "k3s"
|
||||
}
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "aliyun") {
|
||||
provider: "aliyun"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Trait definition in Kubernetes
|
||||
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ KubeVela allows you to reference some runtime data via the `context` keyword.
|
|||
In a workflow step definition, you can use the following context data:
|
||||
|
||||
| Context Variable | Description | Type |
|
||||
| :------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------: |
|
||||
| :----------------------: | :----------------------------------------------------------: | :----: |
|
||||
| `context.name` | The name of the Application. | string |
|
||||
| `context.appName` | The name of the Application. | string |
|
||||
| `context.namespace` | The namespace of the Application. | string |
|
||||
|
|
@ -250,7 +250,7 @@ In a workflow step definition, you can use the following context data:
|
|||
| `context.publishVersion` | The version of application instance specified in annotation. | string |
|
||||
|
||||
|
||||
## Kubernetes 中的 WorkflowStepDefinition
|
||||
## Kubernetes API for WorkflowStepDefinition
|
||||
|
||||
KubeVela is fully programmable through CUE, while it leverages Kubernetes as a control plane and is consistent with the API in YAML.
|
||||
|
||||
|
|
|
|||
|
|
@ -184,31 +184,6 @@ spec:
|
|||
type: webservice
|
||||
status: {}
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"pvc","label":"PersistentVolumeClaim","sort":1,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"maxLength":32,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"mountPath","sort":3,"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"resources","sort":7,"subParameters":[{"jsonKey":"requests","sort":1,"style":{"colSpan":12},"subParameters":[{"jsonKey":"storage","label":"Request
|
||||
Storage","uiType":"DiskNumber","validate":{"immutable":true,"required":true}}],"uiType":"Ignore"},{"jsonKey":"limits","sort":3,"style":{"colSpan":12},"subParameters":[{"jsonKey":"storage","label":"Limit
|
||||
Storage","uiType":"DiskNumber","validate":{"immutable":true,"required":true}}],"uiType":"Ignore"}],"validate":{"defaultValue":{"limits":{"storage":"8Gi"},"requests":{"storage":"8Gi"}},"required":true}},{"description":"If
|
||||
not specified, the cluster default StorageClass is used.","jsonKey":"storageClassName","sort":9},{"jsonKey":"accessModes","sort":11,"validate":{"defaultValue":["ReadWriteOnce"],"required":false}},{"description":"You
|
||||
can set the value of volumeMode to Block to use a volume as a raw block device.","jsonKey":"volumeMode","sort":12,"uiType":"Select","validate":{"defaultValue":"Filesystem","options":[{"label":"Filesystem","value":"Filesystem"},{"label":"Block","value":"Block"}]}},{"description":"The
|
||||
VolumeName is the binding reference to the PersistentVolume backing this claim.","jsonKey":"volumeName","sort":14},{"jsonKey":"selector","sort":17},{"description":"It
|
||||
will create a new volume based on the contents of the specified data source.","jsonKey":"dataSource","sort":19},{"disable":true,"jsonKey":"dataSourceRef","sort":20},{"disable":true,"jsonKey":"mountOnly"}]},{"disable":true,"jsonKey":"secret","sort":3},{"disable":true,"jsonKey":"configMap","sort":5},{"disable":true,"jsonKey":"emptyDir"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: trait-uischema-storage
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"url","label":"URL","sort":1,"subParameters":[{"jsonKey":"value","label":"URL","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"data","sort":3}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-webhook
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
|
|
@ -220,101 +195,6 @@ metadata:
|
|||
name: trait-uischema-scaler
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"image","label":"Container Image","sort":1,"uiType":"ImageInput"},{"disable":true,"jsonKey":"imagePullSecret","sort":2},{"description":"Specifies
|
||||
the memory resource required for the container, If set to 0, there is no limit.","jsonKey":"memory","label":"Memory","sort":4,"style":{"colSpan":12},"uiType":"MemoryNumber","validate":{"defaultValue":"1024Mi","required":true}},{"description":"Specifies
|
||||
the cpu resource required for the container, If set to 0, there is no limit.","jsonKey":"cpu","label":"CPU","sort":5,"style":{"colSpan":12},"uiType":"CPUNumber","validate":{"defaultValue":"0.5","required":true}},{"jsonKey":"exposeType","sort":6,"validate":null},{"jsonKey":"ports","label":"Service
|
||||
Ports","sort":7,"subParameters":[{"jsonKey":"port","sort":1,"validate":{"min":1,"required":true}},{"jsonKey":"protocol","sort":3},{"disable":true,"jsonKey":"name","sort":4},{"jsonKey":"expose","sort":5}],"validate":{"defaultValue":[{"expose":true,"port":80,"protocol":"TCP"}],"required":true}},{"jsonKey":"cmd","label":"CMD","sort":9},{"jsonKey":"env","label":"ENV","sort":10,"subParameterGroupOption":[{"keys":["name","value"],"label":"Add
|
||||
By Value"},{"keys":["name","valueFrom"],"label":"Add By Secret"}],"subParameters":[{"jsonKey":"valueFrom","label":"Secret
|
||||
Selector","subParameters":[{"disable":true,"jsonKey":"configMapKeyRef"},{"jsonKey":"secretKeyRef","subParameters":[{"jsonKey":"name","label":"Secret
|
||||
Name","sort":1,"uiType":"SecretSelect"},{"jsonKey":"key","label":"Secret Key","sort":3,"uiType":"SecretKeySelect"}],"uiType":"Ignore"}],"uiType":"Ignore"}],"uiType":"Structs"},{"description":"Set
|
||||
the path and type that the service needs to persist.","jsonKey":"volumeMounts","label":"Persistent
|
||||
Storage","sort":12,"subParameters":[{"disable":true,"jsonKey":"configMap"},{"disable":true,"jsonKey":"secret"},{"jsonKey":"pvc","label":"Storage
|
||||
By PVC","sort":1,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"claimName","sort":3},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]},{"jsonKey":"hostPath","label":"Storage
|
||||
By HostPath","sort":3,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"path","label":"Host
|
||||
Path","sort":3,"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]},{"jsonKey":"emptyDir","label":"Temporary
|
||||
Storage","sort":5,"subParameters":[{"jsonKey":"name","sort":1,"validate":{"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])$","required":true}},{"jsonKey":"medium","sort":3,"validate":{"options":[{"label":"Memory","value":"memory"},{"label":"Dir","value":""}],"required":false}},{"jsonKey":"mountPath","sort":5,"validate":{"pattern":"^/(.*)$","required":true}}]}],"uiType":"Group"},{"jsonKey":"readinessProbe","label":"ReadinessProbe","sort":13,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"livenessProbe","label":"LivenessProbe","sort":15,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"annotations","sort":19},{"jsonKey":"labels","sort":21},{"description":"Specify
|
||||
image pull policy for your service","jsonKey":"imagePullPolicy","label":"Image
|
||||
Pull Policy","sort":24,"uiType":"Select","validate":{"defaultValue":"IfNotPresent","options":[{"label":"IfNotPresent","value":"IfNotPresent"},{"label":"Always","value":"Always"},{"label":"Never","value":"Never"}]}},{"disable":true,"jsonKey":"addRevisionLabel"},{"disable":true,"jsonKey":"port"},{"disable":true,"jsonKey":"volumes"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-webservice
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"parallel","sort":5,"validate":{"defaultValue":false}},{"jsonKey":"policy","sort":1},{"jsonKey":"env","sort":3}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-deploy2env
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"image","label":"Image","sort":1,"uiType":"ImageInput"},{"disable":true,"jsonKey":"imagePullSecret","sort":2},{"jsonKey":"restart","sort":3,"uiType":"Select","validate":{"defaultValue":"Never","options":[{"label":"Never","value":"Never"},{"label":"OnFailure","value":"OnFailure"}],"required":true}},{"jsonKey":"count","sort":4,"uiType":"Number","validate":{"defaultValue":1,"max":128,"min":0,"required":true}},{"description":"Specifies
|
||||
the memory resource required for the container, If set to 0, there is no limit.","jsonKey":"memory","label":"Memory","sort":5,"style":{"colSpan":12},"uiType":"MemoryNumber","validate":{"defaultValue":"1024Mi","required":true}},{"description":"Specifies
|
||||
the cpu resource required for the container, If set to 0, there is no limit.","jsonKey":"cpu","label":"CPU","sort":7,"style":{"colSpan":12},"uiType":"CPUNumber","validate":{"defaultValue":"0.5","required":true}},{"jsonKey":"cmd","label":"CMD","sort":9},{"jsonKey":"env","label":"ENV","sort":10,"subParameterGroupOption":[{"keys":["name","value"],"label":"Add
|
||||
By Value"},{"keys":["name","valueFrom"],"label":"Add By Secret"}],"subParameters":[{"jsonKey":"valueFrom","label":"Secret
|
||||
Selector","subParameters":[{"disable":true,"jsonKey":"configMapKeyRef"},{"jsonKey":"secretKeyRef","subParameters":[{"jsonKey":"name","label":"Secret
|
||||
Name","sort":1,"uiType":"SecretSelect"},{"jsonKey":"key","label":"Secret Key","sort":3,"uiType":"SecretKeySelect"}],"uiType":"Ignore"}],"uiType":"Ignore"}],"uiType":"Structs"},{"jsonKey":"readinessProbe","label":"ReadinessProbe","sort":13,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"livenessProbe","label":"LivenessProbe","sort":15,"subParameters":[{"disable":true,"jsonKey":"hostAliases"},{"jsonKey":"timeoutSeconds","sort":1,"style":{"colSpan":12}},{"jsonKey":"failureThreshold","sort":4,"style":{"colSpan":12}},{"jsonKey":"initialDelaySeconds","sort":7,"style":{"colSpan":12},"validate":{"defaultValue":5,"required":true}},{"jsonKey":"periodSeconds","sort":9,"style":{"colSpan":12}},{"jsonKey":"successThreshold","sort":11,"style":{"colSpan":12}},{"jsonKey":"exec","sort":14},{"jsonKey":"httpGet","sort":19,"subParameters":[{"jsonKey":"port","sort":1,"style":{"colSpan":12},"validate":{"min":1,"required":true}},{"jsonKey":"path","sort":3,"style":{"colSpan":12},"validate":{"pattern":"^/(.*)$","required":true}},{"jsonKey":"httpHeaders","sort":5}]},{"jsonKey":"tcpSocket","sort":19,"subParameters":[{"jsonKey":"port","validate":{"min":1,"required":true}}]}],"uiType":"Group"},{"jsonKey":"annotations","sort":19},{"jsonKey":"labels","sort":21},{"description":"Specify
|
||||
image pull policy for your service","jsonKey":"imagePullPolicy","label":"Image
|
||||
Pull Policy","sort":24,"uiType":"Select","validate":{"defaultValue":"IfNotPresent","options":[{"label":"IfNotPresent","value":"IfNotPresent"},{"label":"Always","value":"Always"},{"label":"Never","value":"Never"}]}},{"disable":true,"jsonKey":"volumes"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-task
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"description":"Support push messages to Dingding Group.","jsonKey":"dingding","sort":1,"subParameters":[{"jsonKey":"url","sort":1,"subParameters":[{"jsonKey":"value","label":"Webhook","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"message","sort":3,"subParameters":[{"disable":true,"jsonKey":"msgtype"},{"disable":true,"jsonKey":"link"},{"disable":true,"jsonKey":"markdown"},{"disable":true,"jsonKey":"at"},{"disable":true,"jsonKey":"actionCard"},{"disable":true,"jsonKey":"feedCard"},{"jsonKey":"text","subParameters":[{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"content","label":"Message"}],"uiType":"Ignore"}],"uiType":"Ignore"}]},{"description":"Support
|
||||
push email message.","jsonKey":"email","sort":3,"subParameters":[{"jsonKey":"from","sort":1,"subParameters":[{"jsonKey":"host","sort":1},{"jsonKey":"port","sort":3},{"jsonKey":"address","sort":5},{"jsonKey":"password","sort":7,"subParameters":[{"jsonKey":"value","label":"Password","uiType":"Password","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"alias","sort":9}]},{"jsonKey":"to","sort":3},{"jsonKey":"content","sort":5,"subParameters":[{"jsonKey":"subject","sort":1},{"jsonKey":"body","sort":3}]}]},{"description":"Support
|
||||
push messages to slack channel.","jsonKey":"slack","sort":5,"subParameters":[{"jsonKey":"url","sort":1,"subParameters":[{"jsonKey":"value","label":"Webhook","uiType":"Input","validate":{"required":true}}],"uiType":"Ignore"},{"jsonKey":"message","subParameters":[{"disable":true,"jsonKey":"blocks"},{"disable":true,"jsonKey":"attachments"},{"disable":true,"jsonKey":"thread_ts"},{"disable":true,"jsonKey":"mrkdwn"},{"description":"Specify
|
||||
the message that you want to sent","jsonKey":"text","label":"Message"}],"uiType":"Ignore"}]}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-notification
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"dbType","label":"DBType","sort":1,"validate":{"defaultValue":"kubeapi","options":[{"label":"MongoDB","value":"mongodb"},{"label":"KubeAPI","value":"kubeapi"}],"required":true}},{"conditions":[{"jsonKey":"dbType","op":"==","value":"mongodb"}],"jsonKey":"dbURL","label":"DatabaseURL","sort":3,"validate":{"required":true}},{"jsonKey":"database","sort":7,"validate":{"defaultValue":"kubevela","required":true}},{"disable":true,"jsonKey":"serviceAccountName"},{"jsonKey":"serviceType","sort":8},{"jsonKey":"domain","sort":9},{"jsonKey":"gatewayDriver","sort":10},{"jsonKey":"repo","sort":11},{"jsonKey":"imagePullSecrets","sort":13}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: addon-uischema-velaux
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"policies","label":"Policies","sort":10,"uiType":"PolicySelect","validate":{"required":true}},{"jsonKey":"parallelism","sort":20,"style":{"colSpan":12}},{"jsonKey":"auto","sort":30,"style":{"colSpan":12}}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: workflowstep-uischema-deploy
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
ui-schema: '[{"jsonKey":"objects","uiType":"K8sObjectsCode"}]'
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-uischema-k8s-objects
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
|
|
@ -326,193 +206,7 @@ metadata:
|
|||
name: policy-uischema-override
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresources: ql.#ListResourcesInApp
|
||||
& {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace: parameter.appNs\n\t\tfilter:
|
||||
{\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster: parameter.cluster\n\t\t\t}\n\t\t\tif
|
||||
parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace: parameter.clusterNs\n\t\t\t}\n\t\t\tapiVersion:
|
||||
\"v1\"\n\t\t\tkind: \"Service\"\n\t\t}\n\t\twithStatus: true\n\t}\n}\nstatus:
|
||||
{\n\tif resources.err == _|_ {\n\t\tservices: [ for i, resource in resources.list
|
||||
{\n\t\t\tresource.object\n\t\t}]\n\t}\n\tif resources.err != _|_ {\n\t\terror:
|
||||
resources.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: service-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tname: string\n\tnamespace?:
|
||||
string\n\tcluster?: string\n\tkind: string\n\tapiVersion: string\n}\nresponse:
|
||||
ql.#Read & {\n\tvalue: {\n\t\tapiVersion: parameter.apiVersion\n\t\tkind: parameter.kind\n\t\tmetadata:
|
||||
{\n\t\t\tname: parameter.name\n\t\t\tif parameter.namespace != _|_ {\n\t\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t\t}\n\t\t}\n\t}\n\tif parameter.cluster != _|_ {\n\t\tcluster:
|
||||
parameter.cluster\n\t}\n}\n\nif response.err == _|_ {\n\tstatus: {\n\t\tresource:
|
||||
response.value\n\t}\n}\nif response.err != _|_ {\n\tstatus: {\n\t\terror: response.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: application-resource-detail-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tname?: string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresult:
|
||||
ql.#CollectPods & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster:
|
||||
parameter.cluster\n\t\t\t}\n\t\t\tif parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace:
|
||||
parameter.clusterNs\n\t\t\t}\n\t\t\tif parameter.name != _|_ {\n\t\t\t\tcomponents:
|
||||
[parameter.name]\n\t\t\t}\n\t\t}\n\t}\n}\n\nif result.err == _|_ {\n\tstatus:
|
||||
{\n\t\tpodList: [ for pod in result.list if pod.object != _|_ {\n\t\t\tcluster:
|
||||
\ pod.cluster\n\t\t\tworkload: pod.workload\n\t\t\tcomponent: pod.component\n\t\t\tmetadata:
|
||||
{\n\t\t\t\tname: pod.object.metadata.name\n\t\t\t\tnamespace: pod.object.metadata.namespace\n\t\t\t\tcreationTime:
|
||||
pod.object.metadata.creationTimestamp\n\t\t\t\tlabels: pod.object.metadata.labels\n\t\t\t\tversion:
|
||||
{\n\t\t\t\t\tif pod.publishVersion != _|_ {\n\t\t\t\t\t\tpublishVersion: pod.publishVersion\n\t\t\t\t\t}\n\t\t\t\t\tif
|
||||
pod.deployVersion != _|_ {\n\t\t\t\t\t\tdeployVersion: pod.deployVersion\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tstatus:
|
||||
{\n\t\t\t\tphase: pod.object.status.phase\n\t\t\t\t// refer to https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase\n\t\t\t\tif
|
||||
phase != \"Pending\" && phase != \"Unknown\" {\n\t\t\t\t\tpodIP: pod.object.status.podIP\n\t\t\t\t\thostIP:
|
||||
\ pod.object.status.hostIP\n\t\t\t\t\tnodeName: pod.object.spec.nodeName\n\t\t\t\t}\n\t\t\t}\n\t\t}]\n\t}\n}\n\nif
|
||||
result.err != _|_ {\n\tstatus: {\n\t\terror: result.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-pod-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\ttype: string\n\tnamespace:
|
||||
*\"\" | string\n\tcluster: *\"\" | string\n}\n\nschema: {\n\t\"secret\": {\n\t\tapiVersion:
|
||||
\"v1\"\n\t\tkind: \"Secret\"\n\t}\n\t\"configMap\": {\n\t\tapiVersion: \"v1\"\n\t\tkind:
|
||||
\ \"ConfigMap\"\n\t}\n\t\"pvc\": {\n\t\tapiVersion: \"v1\"\n\t\tkind: \"PersistentVolumeClaim\"\n\t}\n\t\"storageClass\":
|
||||
{\n\t\tapiVersion: \"storage.k8s.io/v1\"\n\t\tkind: \"StorageClass\"\n\t}\n\t\"ns\":
|
||||
{\n\t\tapiVersion: \"v1\"\n\t\tkind: \"Namespace\"\n\t}\n\t\"provider\":
|
||||
{\n\t\tapiVersion: \"terraform.core.oam.dev/v1beta1\"\n\t\tkind: \"Provider\"\n\t}\n}\n\nList:
|
||||
ql.#List & {\n\tresource: schema[parameter.type]\n\tfilter: {\n\t\tnamespace:
|
||||
parameter.namespace\n\t}\n\tcluster: parameter.cluster\n}\n\nstatus: {\n\tif List.err
|
||||
== _|_ {\n\t\tif len(List.list.items) == 0 {\n\t\t\terror: \"failed to list \\(parameter.type)
|
||||
in namespace \\(parameter.namespace)\"\n\t\t}\n\t\tif len(List.list.items) !=
|
||||
0 {\n\t\t\tlist: List.list.items\n\t\t}\n\t}\n\n\tif List.err != _|_ {\n\t\terror:
|
||||
List.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: resource-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\ncollectLogs: ql.#CollectLogsInPod & {\n\tcluster:
|
||||
\ parameter.cluster\n\tnamespace: parameter.namespace\n\tpod: parameter.pod\n\toptions:
|
||||
{\n\t\tcontainer: parameter.container\n\t\tprevious?: parameter.previous\n\t\tsinceSeconds?:
|
||||
parameter.sinceSeconds\n\t\tsinceTime?: parameter.sinceTime\n\t\ttimestamps?:
|
||||
\ parameter.timestamps\n\t\ttailLines?: parameter.tailLines\n\t\tlimitBytes?:
|
||||
\ parameter.limitBytes\n\t}\n}\nstatus: collectLogs.outputs\n\nparameter: {\n\t//
|
||||
+usage=Specify the cluster of the pod\n\tcluster: string\n\t// +usage=Specify
|
||||
the namespace of the pod\n\tnamespace: string\n\t// +usage=Specify the name of
|
||||
the pod\n\tpod: string\n\n\t// +usage=Specify the name of the container\n\tcontainer:
|
||||
string\n\t// +usage=If true, return previous terminated container logs\n\tprevious:
|
||||
*false | bool\n\t// +usage=If set, show logs in relative times\n\tsinceSeconds:
|
||||
*null | int\n\t// +usage=RFC3339 timestamp, if set, show logs since this time\n\tsinceTime:
|
||||
*null | string\n\t// +usage=If true, add timestamp at the beginning of every line\n\ttimestamps:
|
||||
*false | bool\n\t// +usage=If set, return the number of lines from the end of
|
||||
logs\n\ttailLines: *null | int\n\t// +usage=If set, limit the size of returned
|
||||
bytes\n\tlimitBytes: *null | int\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: collect-logs
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n}\n\nresources: ql.#ListResourcesInApp & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\t\"apiVersion\": \"terraform.core.oam.dev/v1beta2\"\n\t\t\t\"kind\":
|
||||
\ \"Configuration\"\n\t\t}\n\t\twithStatus: true\n\t}\n}\nstatus: {\n\tif
|
||||
resources.err == _|_ {\n\t\t\"cloud-resources\": [ for i, resource in resources.list
|
||||
{\n\t\t\tresource.object\n\t\t}]\n\t}\n\tif resources.err != _|_ {\n\t\terror:
|
||||
resources.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cloud-resource-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName?: string\n\tappNs?:
|
||||
\ string\n}\n\nsecretList: ql.#List & {\n\tresource: {\n\t\tapiVersion: \"v1\"\n\t\tkind:
|
||||
\ \"Secret\"\n\t}\n\tfilter: {\n\t\tmatchingLabels: {\n\t\t\t\"created-by\":
|
||||
\"terraform-controller\"\n\t\t\tif parameter.appName != _|_ && parameter.appNs
|
||||
!= _|_ {\n\t\t\t\t\"app.oam.dev/name\": parameter.appName\n\t\t\t\t\"app.oam.dev/namespace\":
|
||||
parameter.appNs\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatus: {\n\tif secretList.err == _|_
|
||||
{\n\t\tsecrets: secretList.list.items\n\t}\n\tif secretList.err != _|_ {\n\t\terror:
|
||||
secretList.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cloud-resource-secret-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tname: string\n\tnamespace:
|
||||
string\n\tcluster: *\"\" | string\n}\n\npod: ql.#Read & {\n\tvalue: {\n\t\tapiVersion:
|
||||
\"v1\"\n\t\tkind: \"Pod\"\n\t\tmetadata: {\n\t\t\tname: parameter.name\n\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t}\n\t}\n\tcluster: parameter.cluster\n}\n\neventList:
|
||||
ql.#SearchEvents & {\n\tvalue: {\n\t\tapiVersion: \"v1\"\n\t\tkind: \"Pod\"\n\t\tmetadata:
|
||||
\ pod.value.metadata\n\t}\n\tcluster: parameter.cluster\n}\n\npodMetrics: ql.#Read
|
||||
& {\n\tcluster: parameter.cluster\n\tvalue: {\n\t\tapiVersion: \"metrics.k8s.io/v1beta1\"\n\t\tkind:
|
||||
\ \"PodMetrics\"\n\t\tmetadata: {\n\t\t\tname: parameter.name\n\t\t\tnamespace:
|
||||
parameter.namespace\n\t\t}\n\t}\n}\n\nstatus: {\n\tif pod.err == _|_ {\n\t\tcontainers:
|
||||
[ for container in pod.value.spec.containers {\n\t\t\tname: container.name\n\t\t\timage:
|
||||
container.image\n\t\t\tresources: {\n\t\t\t\tif container.resources.limits !=
|
||||
_|_ {\n\t\t\t\t\tlimits: container.resources.limits\n\t\t\t\t}\n\t\t\t\tif container.resources.requests
|
||||
!= _|_ {\n\t\t\t\t\trequests: container.resources.requests\n\t\t\t\t}\n\t\t\t\tif
|
||||
podMetrics.err == _|_ {\n\t\t\t\t\tusage: {for containerUsage in podMetrics.value.containers
|
||||
{\n\t\t\t\t\t\tif containerUsage.name == container.name {\n\t\t\t\t\t\t\tcpu:
|
||||
\ containerUsage.usage.cpu\n\t\t\t\t\t\t\tmemory: containerUsage.usage.memory\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif
|
||||
pod.value.status.containerStatuses != _|_ {\n\t\t\t\tstatus: {for containerStatus
|
||||
in pod.value.status.containerStatuses if containerStatus.name == container.name
|
||||
{\n\t\t\t\t\tstate: containerStatus.state\n\t\t\t\t\trestartCount: containerStatus.restartCount\n\t\t\t\t}}\n\t\t\t}\n\t\t}]\n\t\tif
|
||||
eventList.err == _|_ {\n\t\t\tevents: eventList.list\n\t\t}\n\t}\n\tif pod.err
|
||||
!= _|_ {\n\t\terror: pod.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: pod-view
|
||||
namespace: vela-system
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
template: "import (\n\t\"vela/ql\"\n)\n\nparameter: {\n\tappName: string\n\tappNs:
|
||||
\ string\n\tname?: string\n\tcluster?: string\n\tclusterNs?: string\n}\n\nresult:
|
||||
ql.#CollectServices & {\n\tapp: {\n\t\tname: parameter.appName\n\t\tnamespace:
|
||||
parameter.appNs\n\t\tfilter: {\n\t\t\tif parameter.cluster != _|_ {\n\t\t\t\tcluster:
|
||||
parameter.cluster\n\t\t\t}\n\t\t\tif parameter.clusterNs != _|_ {\n\t\t\t\tclusterNamespace:
|
||||
parameter.clusterNs\n\t\t\t}\n\t\t\tif parameter.name != _|_ {\n\t\t\t\tcomponents:
|
||||
[parameter.name]\n\t\t\t}\n\t\t}\n\t}\n}\n\nif result.err == _|_ {\n\tstatus:
|
||||
{\n\t\tservices: result.list\n\t}\n}\n\nif result.err != _|_ {\n\tstatus: {\n\t\terror:
|
||||
result.err\n\t}\n}\n"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: component-service-view
|
||||
namespace: vela-system
|
||||
... snip ...
|
||||
```
|
||||
</details>
|
||||
|
||||
|
|
|
|||
|
|
@ -564,15 +564,12 @@ local ─── default ─┬─ Service/hello-webserver-auxiliaryworkloa
|
|||
|
||||
## 自定义健康检查和状态
|
||||
|
||||
You can also define health check policy and status message when a component deployed and tell the real status to end users.
|
||||
你可以通过自定义健康检查和状态信息,将自定义组件的真实状态反馈给最终用户。
|
||||
|
||||
:::caution
|
||||
Reference `parameter` defined in `template` is not supported now in health check and custom status, they work in different stage with the resource template. While we're going to support this feature in https://github.com/kubevela/kubevela/issues/4863 .
|
||||
:::
|
||||
|
||||
### 健康检查
|
||||
|
||||
The spec of health check is `<component-type-name>.attributes.status.healthPolicy`.
|
||||
定义健康检查的字段为 `<component-type-name>.attributes.status.healthPolicy`.
|
||||
|
||||
如果没有定义,它的值默认是 `true`,意味着在部署完对象后就将对象的状态设置为健康。为了让组件的状态及时、准确,通常你需要为组件定义监控状态,这个过程可以通过一个 CUE 表达式完成。
|
||||
|
||||
|
|
@ -609,7 +606,28 @@ webserver: {
|
|||
}
|
||||
```
|
||||
|
||||
The health check result will be recorded into the corresponding component in `.status.services` of `Application` resource.
|
||||
你也可以在健康检查中使用 `parameter` 中定义的参数,类似如下:
|
||||
|
||||
```
|
||||
webserver: {
|
||||
type: "component"
|
||||
...
|
||||
attributes: {
|
||||
status: {
|
||||
healthPolicy: #"""
|
||||
isHealth: (context.output.status.readyReplicas > 0) && (context.output.status.readyReplicas == parameter.replicas)
|
||||
"""#
|
||||
}
|
||||
}
|
||||
template: {
|
||||
parameter: {
|
||||
replicas: int
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
健康检查的结果会输出到 `Application` 对象的 `.status.services` 字段中。
|
||||
|
||||
```yaml
|
||||
apiVersion: core.oam.dev/v1beta1
|
||||
|
|
@ -623,11 +641,11 @@ status:
|
|||
status: running
|
||||
```
|
||||
|
||||
> Please refer to [this doc](https://github.com/kubevela/kubevela/blob/master/vela-templates/definitions/internal/component/webservice.cue#L29-L50) for more examples.
|
||||
> 请参考[文档](https://github.com/kubevela/kubevela/blob/master/vela-templates/definitions/internal/component/webservice.cue#L29-L50) 查阅更多示例。
|
||||
|
||||
### 自定义状态
|
||||
|
||||
The spec of custom status is `<component-type-name>.attributes.status.customStatus`, 自定义状态和健康检查的原理一致。
|
||||
自定义状态的字段未 `<component-type-name>.attributes.status.customStatus`, 自定义状态和健康检查的原理一致。
|
||||
|
||||
在 CUE 中的关键词是 `message`。同时,CUE 表达式的结果必须是 `string` 类型。
|
||||
|
||||
|
|
@ -669,7 +687,7 @@ status:
|
|||
name: express-server
|
||||
```
|
||||
|
||||
> Please refer to [this doc](https://github.com/kubevela/kubevela/blob/master/vela-templates/definitions/internal/component/webservice.cue#L29-L50) for more examples.
|
||||
> 请参考[文档](https://github.com/kubevela/kubevela/blob/master/vela-templates/definitions/internal/component/webservice.cue#L29-L50) 查阅更多示例。
|
||||
|
||||
|
||||
## Full available `context` in Component
|
||||
|
|
@ -693,6 +711,43 @@ status:
|
|||
| `context.replicaKey` | The key of replication in context. Replication is an internal policy, it will replicate resources with different keys specified. (This feature will be introduced in v1.6+.) | string |
|
||||
|
||||
|
||||
|
||||
### Cluster Version
|
||||
|
||||
| Context Variable | Description | Type |
|
||||
| :---------------------------------: | :---------------------------------------------------------: | :----: |
|
||||
| `context.clusterVersion.major` | The major version of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.gitVersion` | The gitVersion of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.platform` | The platform information of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.minor` | The minor version of the runtime Kubernetes cluster. | int |
|
||||
|
||||
The cluster version context info can be used for graceful upgrade of definition. For example, you can define different API according to the cluster version.
|
||||
|
||||
```
|
||||
outputs: ingress: {
|
||||
if context.clusterVersion.minor < 19 {
|
||||
apiVersion: "networking.k8s.io/v1beta1"
|
||||
}
|
||||
if context.clusterVersion.minor >= 19 {
|
||||
apiVersion: "networking.k8s.io/v1"
|
||||
}
|
||||
kind: "Ingress"
|
||||
}
|
||||
```
|
||||
|
||||
Or use string contain pattern for this usage:
|
||||
|
||||
```
|
||||
import "strings"
|
||||
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "k3s") {
|
||||
provider: "k3s"
|
||||
}
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "aliyun") {
|
||||
provider: "aliyun"
|
||||
}
|
||||
```
|
||||
|
||||
## Component definition in Kubernetes
|
||||
|
||||
KubeVela is fully programmable via CUE, while it leverage Kubernetes as control plane and align with the API in yaml.
|
||||
|
|
|
|||
|
|
@ -421,9 +421,6 @@ template: {
|
|||
|
||||
You can also define health check policy and status message when a trait deployed and tell the real status to end users.
|
||||
|
||||
:::caution
|
||||
Reference `parameter` defined in `template` is not supported now in health check and custom status, they work in different stage with the resource template. While we're going to support this feature in https://github.com/kubevela/kubevela/issues/4863 .
|
||||
:::
|
||||
|
||||
### Health Check
|
||||
|
||||
|
|
@ -464,6 +461,27 @@ my-ingress: {
|
|||
}
|
||||
```
|
||||
|
||||
You can also use the `parameter` defined in the template like:
|
||||
|
||||
```cue
|
||||
mytrait: {
|
||||
type: "trait"
|
||||
...
|
||||
attributes: {
|
||||
status: {
|
||||
healthPolicy: #"""
|
||||
isHealth: context.outputs."mytrait-\(parameter.name)".status.state == "Available"
|
||||
"""#
|
||||
}
|
||||
}
|
||||
template: {
|
||||
parameter: {
|
||||
name: string
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
The health check result will be recorded into the corresponding trait in `.status.services` of `Application` resource.
|
||||
|
||||
```yaml
|
||||
|
|
@ -560,6 +578,43 @@ status:
|
|||
| `context.appAnnotations` | The annotations of the current application instance. | Object Map |
|
||||
|
||||
|
||||
|
||||
### Cluster Version
|
||||
|
||||
| Context Variable | Description | Type |
|
||||
| :---------------------------------: | :---------------------------------------------------------: | :----: |
|
||||
| `context.clusterVersion.major` | The major version of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.gitVersion` | The gitVersion of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.platform` | The platform information of the runtime Kubernetes cluster. | string |
|
||||
| `context.clusterVersion.minor` | The minor version of the runtime Kubernetes cluster. | int |
|
||||
|
||||
The cluster version context info can be used for graceful upgrade of definition. For example, you can define different API according to the cluster version.
|
||||
|
||||
```
|
||||
outputs: ingress: {
|
||||
if context.clusterVersion.minor < 19 {
|
||||
apiVersion: "networking.k8s.io/v1beta1"
|
||||
}
|
||||
if context.clusterVersion.minor >= 19 {
|
||||
apiVersion: "networking.k8s.io/v1"
|
||||
}
|
||||
kind: "Ingress"
|
||||
}
|
||||
```
|
||||
|
||||
Or use string contain pattern for this usage:
|
||||
|
||||
```
|
||||
import "strings"
|
||||
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "k3s") {
|
||||
provider: "k3s"
|
||||
}
|
||||
if strings.Contains(context.clusterVersion.gitVersion, "aliyun") {
|
||||
provider: "aliyun"
|
||||
}
|
||||
```
|
||||
|
||||
## Trait definition in Kubernetes
|
||||
|
||||
KubeVela is fully programmable via CUE, while it leverage Kubernetes as control plane and align with the API in yaml.
|
||||
|
|
|
|||
Loading…
Reference in New Issue