Files
kubevela/pkg/stdlib/pkgs/task.cue
2021-12-29 19:26:27 +08:00

195 lines
5.3 KiB
CUE

let defaultToolImage = "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.27.2"
let defaultBaseImage = "gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4"
#Task: {
#do: "steps"
name: string
namespace: string
workspaces: [_name_=string]: #workspace & {name: "\(_name_)"}
secrets: [_name_=string]: #secret & {name: "\(_name_)"}
steps: [...#Script]
toolImage: *defaultToolImage | string
baseImage: *defaultBaseImage | string
generate_scripts_: [ for i, x in steps {
"""
scriptfile="/vela/scripts/script-\(i)"
touch ${scriptfile} && chmod +x ${scriptfile}
cat > ${scriptfile} << _EOF_
\(base64.Encode(null, x.script))
_EOF_
/vela/tools/entrypoint decode-script ${scriptfile}
"""
}]
name_: name
namespace_: namespace
apply: #Apply & {
value: #PodTask & {
_settings: {
scripts_: strings.Join(generate_scripts_, "")
workspaces_: workspaces
secrets_: secrets
toolImage_: toolImage
baseImage_: baseImage
}
metadata: {
name: name_
namespace: namespace_
}
spec: containers: [ for i, step in steps {
#StepContainer
name: step.name
image: step.image
env: step.envs
_settings: {
workspaceMounts_: step.workspaceMounts
secretMounts_: step.secretMounts
index_: i
}
}]
}
}
}
#Script: {
name: string
image: string
script: string
envs: [...{name: string, value: string}]
workspaceMounts: [...{workspace: #workspace, mountPath: string}]
secretMounts: [...{secret: #secret, mountPath: string}]
}
#workspace: {
name: string
}
#secret: {
name: string
items: [...{key: string, path: string}]
}
#PodTask: {
_settings: {
scripts_: string
workspaces_: {...}
secrets_: {...}
volumes_: [ for x in workspaces_ {name: x.name, emptyDir: {}}]
secretVolumes_: [ for x in secrets_ {name: x.name, secret: {secretName: x.name, items: x.items}}]
toolImage_: string
baseImage_: string
}
apiVersion: "v1"
kind: "Pod"
metadata: {
annotations: "vela.dev/ready": "READY"
namespace: *"default" | string
name: string
}
spec: {
containers: [...#StepContainer]
initContainers: [
{
name: "place-tools"
command: ["/ko-app/entrypoint", "cp", "/ko-app/entrypoint", "/vela/tools/entrypoint"]
image: _settings.toolImage_
imagePullPolicy: "IfNotPresent"
volumeMounts: [{name: "vela-internal-tools", mountPath: "/vela/tools"}]
}, {
name: "place-scripts"
imagePullPolicy: "IfNotPresent"
image: _settings.baseImage_
command: ["sh"]
args: ["-c", _settings.scripts_]
volumeMounts: [{name: "vela-internal-scripts", mountPath: "/vela/scripts"}, {name: "vela-internal-tools", mountPath: "/vela/tools"}]
}]
volumes: [
{emptyDir: {}
name: "vela-internal-workspace"
},
{emptyDir: {}
name: "vela-internal-home"
},
{emptyDir: {}
name: "vela-internal-results"
},
{emptyDir: {}
name: "vela-internal-steps"
},
{emptyDir: {}
name: "vela-internal-scripts"
},
{emptyDir: {}
name: "vela-internal-tools"
},
{downwardAPI: {
defaultMode: 420
items: [{
fieldRef: {
apiVersion: "v1"
fieldPath: "metadata.annotations['vela.dev/ready']"
}
path: "ready"
}]
}
name: "vela-internal-downward"
}] + _settings.volumes_ + _settings.secretVolumes_
restartPolicy: "Never"
}
}
#StepContainer: {
_settings: {
index_: int
workspaceMounts_: [...{workspace: #workspace, mountPath: string}]
volumeMounts_: [ for v in workspaceMounts_ {name: v.workspace.name, mountPath: v.mountPath}]
secretMounts_: [...{secret: #secret, mountPath: string}]
secretVolumeMounts_: [ for v in secretMounts_ {name: v.secret.name, mountPath: v.mountPath}]
}
name: string
command: ["/vela/tools/entrypoint"]
args: *["-wait_file", "/vela/downward/ready", "-wait_file_content", "-post_file", "/vela/tools/\(_settings.index_)", "-termination_path", "/vela/termination", "-step_metadata_dir", "/vela/steps/step-\(name)", "-step_metadata_dir_link", "/vela/steps/\(_settings.index_)", "-entrypoint", "/vela/scripts/script-\(_settings.index_)", "--"] | [...string]
if _settings.index_ > 0 {
args: ["-wait_file", "/vela/tools/\(_settings.index_-1)", "-post_file", "/vela/tools/\(_settings.index_)", "-termination_path", "/vela/termination", "-step_metadata_dir", "/vela/steps/step-\(name)", "-step_metadata_dir_link", "/vela/steps/\(_settings.index_)", "-entrypoint", "/vela/scripts/script-\(_settings.index_)", "--"]
}
env?: _
image: string
imagePullPolicy: "Always"
terminationMessagePath: "/vela/termination"
terminationMessagePolicy: "File"
volumeMounts: [{
name: "vela-internal-scripts"
mountPath: "/vela/scripts"
}, {
name: "vela-internal-tools"
mountPath: "/vela/tools"
}, {
name: "vela-internal-downward"
mountPath: "/vela/downward"
}, {
name: "vela-internal-workspace"
mountPath: "/workspace"
}, {
name: "vela-internal-home"
mountPath: "/vela/home"
}, {
name: "vela-internal-results"
mountPath: "/vela/results"
}, {
name: "vela-internal-steps"
mountPath: "/vela/steps"
}] + _settings.volumeMounts_ + _settings.secretVolumeMounts_
}