From fe5bbea0773cf212ce0d9bc72c09182ad5bb8916 Mon Sep 17 00:00:00 2001 From: Nitishupkr <95420063+Nitishupkr@users.noreply.github.com> Date: Mon, 19 Jun 2023 12:34:46 +0530 Subject: [PATCH 1/7] docs: fix typo (#1578) Signed-off-by: Nitishupkr --- docs/content/en/docs/yaml-crd-ref/evaluationdefinition.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/en/docs/yaml-crd-ref/evaluationdefinition.md b/docs/content/en/docs/yaml-crd-ref/evaluationdefinition.md index b16a1e072b..7bf00b85a6 100644 --- a/docs/content/en/docs/yaml-crd-ref/evaluationdefinition.md +++ b/docs/content/en/docs/yaml-crd-ref/evaluationdefinition.md @@ -50,7 +50,7 @@ spec: [KeptnMetric](metric.md) object that contains the value, identified by `name` and `namespace` * **evaluationTarget** -- Desired value of the query, - expressed as an arithmatic formula, + expressed as an arithmetic formula, usually less than (`<`) or greater than (`>`) This is used to define success or failure criteria for the referenced `KeptnMetric` in order to pass or fail From 96e69c2a10e9a0446b1992a880ec74400bbe0cfe Mon Sep 17 00:00:00 2001 From: Meg McRoberts Date: Mon, 19 Jun 2023 01:08:01 -0700 Subject: [PATCH 2/7] docs: delete obsolete pages (#1520) Signed-off-by: Meg McRoberts --- .../en/docs/concepts/apps/assets/trace.png | Bin 168484 -> 0 bytes .../en/docs/concepts/keptnConfig/_index.md | 29 --- .../en/docs/concepts/metrics/_index.md | 190 ------------------ .../en/docs/concepts/overview/_index.md | 7 - .../concepts/overview/how-it-works/_index.md | 7 - .../docs/concepts/overview/phases/_index.md | 7 - .../en/docs/concepts/workloads/_index.md | 4 +- docs/content/en/docs/tasks/evaluate/_index.md | 8 - 8 files changed, 2 insertions(+), 250 deletions(-) delete mode 100644 docs/content/en/docs/concepts/apps/assets/trace.png delete mode 100644 docs/content/en/docs/concepts/keptnConfig/_index.md delete mode 100644 docs/content/en/docs/concepts/metrics/_index.md delete mode 100644 docs/content/en/docs/concepts/overview/_index.md delete mode 100644 docs/content/en/docs/concepts/overview/how-it-works/_index.md delete mode 100644 docs/content/en/docs/concepts/overview/phases/_index.md delete mode 100644 docs/content/en/docs/tasks/evaluate/_index.md diff --git a/docs/content/en/docs/concepts/apps/assets/trace.png b/docs/content/en/docs/concepts/apps/assets/trace.png deleted file mode 100644 index 84254826c9f2620eba45d6db24b85d35a1048837..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168484 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 z 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�sf94UKmzFk^!cXowjvzfRtJ;bmh9l@dT^+1z~X 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" - secretKeyRef: - name: dt-api-token - key: DT_TOKEN ---- -apiVersion: metrics.keptn.sh/v1alpha3 -kind: KeptnMetricsProvider -metadata: - name: my-dql-provider - namespace: podtato-kubectl -spec: - type: dql - secretKeyRef: - key: CLIENT_SECRET - name: dt-third-gen-secret - targetServer: "" -```` - -Keptn metrics can be exposed as OTel metrics via port `9999` of the KLT metrics-operator. -To expose them, the env -variable `EXPOSE_KEPTN_METRICS` in the metrics-operator manifest needs to be set to `true`. -The default value of this variable is `true`. -To access the metrics, use the following command: - -```shell -kubectl port-forward deployment/metrics-operator 9999 -n keptn-lifecycle-toolkit-system -``` - -and access the metrics via your browser with: - -```http://localhost:9999/metrics``` - -#### Accessing Metrics via the Kubernetes Custom Metrics API - -`KeptnMetrics` can also be retrieved via the Kubernetes Custom Metrics API. -This makes it possible to refer to these metrics via the Kubernetes *HorizontalPodAutoscaler*, as in the following -example: - -```yaml -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: podtato-head-entry - namespace: podtato-kubectl -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: podtato-head-entry - minReplicas: 1 - maxReplicas: 10 - metrics: - - type: Object - object: - metric: - name: keptnmetric-sample - describedObject: - apiVersion: metrics.keptn.sh/v1alpha1 - kind: KeptnMetric - name: keptnmetric-sample - target: - type: Value - value: "10" -``` - -You can also use the `kubectl raw` command to retrieve the values of a `KeptnMetric`, as in the following example: - -```shell -$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/namespaces/podtato-kubectl/keptnmetrics.metrics.sh/keptnmetric-sample/keptnmetric-sample" | jq . - -{ - "kind": "MetricValueList", - "apiVersion": "custom.metrics.k8s.io/v1beta2", - "metadata": {}, - "items": [ - { - "describedObject": { - "kind": "KeptnMetric", - "namespace": "podtato-kubectl", - "name": "keptnmetric-sample", - "apiVersion": "metrics.keptn.sh/v1alpha3" - }, - "metric": { - "name": "keptnmetric-sample", - "selector": { - "matchLabels": { - "app": "frontend" - } - } - }, - "timestamp": "2023-01-25T09:26:15Z", - "value": "10" - } - ] -} -``` - -You can also filter based on matching labels. -So to e.g. retrieve all metrics that are labelled with `app=frontend`, you -can use the following command: - -```shell -$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/namespaces/podtato-kubectl/keptnmetrics.metrics.sh/*/*?labelSelector=app%3Dfrontend" | jq . - -{ - "kind": "MetricValueList", - "apiVersion": "custom.metrics.k8s.io/v1beta2", - "metadata": {}, - "items": [ - { - "describedObject": { - "kind": "KeptnMetric", - "namespace": "keptn-lifecycle-toolkit-system", - "name": "keptnmetric-sample", - "apiVersion": "metrics.keptn.sh/v1alpha3" - }, - "metric": { - "name": "keptnmetric-sample", - "selector": { - "matchLabels": { - "app": "frontend" - } - } - }, - "timestamp": "2023-01-25T09:26:15Z", - "value": "10" - } - ] -} -``` diff --git a/docs/content/en/docs/concepts/overview/_index.md b/docs/content/en/docs/concepts/overview/_index.md deleted file mode 100644 index 4438e46b88..0000000000 --- a/docs/content/en/docs/concepts/overview/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Overview -icon: concepts -layout: quickstart -weight: 5 -hidechildren: true # this flag hides all sub-pages in the sidebar-multicard.html ---- diff --git a/docs/content/en/docs/concepts/overview/how-it-works/_index.md b/docs/content/en/docs/concepts/overview/how-it-works/_index.md deleted file mode 100644 index ab84523fa1..0000000000 --- a/docs/content/en/docs/concepts/overview/how-it-works/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How it works -icon: concepts -layout: quickstart -weight: 5 -hidechildren: true # this flag hides all sub-pages in the sidebar-multicard.html ---- \ No newline at end of file diff --git a/docs/content/en/docs/concepts/overview/phases/_index.md b/docs/content/en/docs/concepts/overview/phases/_index.md deleted file mode 100644 index 2796f5c3cb..0000000000 --- a/docs/content/en/docs/concepts/overview/phases/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Phases -icon: concepts -layout: quickstart -weight: 10 -hidechildren: true # this flag hides all sub-pages in the sidebar-multicard.html ---- diff --git a/docs/content/en/docs/concepts/workloads/_index.md b/docs/content/en/docs/concepts/workloads/_index.md index f410b9e9bc..b22a103e12 100644 --- a/docs/content/en/docs/concepts/workloads/_index.md +++ b/docs/content/en/docs/concepts/workloads/_index.md @@ -1,5 +1,5 @@ --- -title: Workloads +title: Keptn Workloads description: Learn what Keptn Workloads are and how to use them icon: concepts layout: quickstart @@ -26,7 +26,7 @@ from metadata information; it is not necessary to manually create a YAML file that defines it. A `KeptnWorkload` instance is responsible for executing -the pre- and post deployment checks of a workload. +the pre- and post-deployment checks of a Workload. In its state, it keeps track of the current status of all checks, as well as the overall state of the Pre Deployment phase, which the scheduler can use to determine diff --git a/docs/content/en/docs/tasks/evaluate/_index.md b/docs/content/en/docs/tasks/evaluate/_index.md deleted file mode 100644 index d6529b1955..0000000000 --- a/docs/content/en/docs/tasks/evaluate/_index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Evaluate Metrics -description: Learn how to use the Keptn Lifecycle Toolkit and explore basic features. -icon: concepts -layout: quickstart -weight: 25 -hidechildren: true # this flag hides all sub-pages in the sidebar-multicard.html ---- From 74c7426164b41dbba647337ef9bef61b374a6f71 Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Mon, 19 Jun 2023 15:16:44 +0200 Subject: [PATCH 3/7] ci: fix security pipeline (#1582) --- .github/workflows/security-scans.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/security-scans.yml b/.github/workflows/security-scans.yml index 79378aeddd..92b92f6ca5 100644 --- a/.github/workflows/security-scans.yml +++ b/.github/workflows/security-scans.yml @@ -66,7 +66,7 @@ jobs: with: name: manifests path: | - ./dist/*-manifest/ + ./dist/*-manifest-test/ - name: Upload manifests user run if: ${{ github.event_name != 'schedule' }} From 138467970e966c90a1bd8fa428b4c5efe0a9bd50 Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Tue, 20 Jun 2023 09:05:40 +0200 Subject: [PATCH 4/7] docs: fix edit links (#1583) --- .github/workflows/release.yml | 2 +- docs/Makefile | 2 +- docs/go.mod | 4 ++-- docs/go.sum | 11 ++++++++--- netlify.toml | 22 ++++++++++++---------- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4980e9e7aa..040940f9b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -207,7 +207,7 @@ jobs: if: needs.release-please.outputs.releases_created == 'true' with: tag_name: ${{ needs.release-please.outputs.tag_name }} - uses: keptn/docs-tooling/.github/workflows/release-docs.yml@v0.0.2-beta1 + uses: keptn/docs-tooling/.github/workflows/release-docs.yml@v0.1.2 secrets: inherit update-examples: diff --git a/docs/Makefile b/docs/Makefile index a762e8cf11..797f53542b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,7 +1,7 @@ ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) VOLUMES := -v $(ROOT_DIR):/src # renovate: datasource=docker depName=klakegg/hugo -HUGO_VERSION := 0.107.0 +HUGO_VERSION := 0.111.3 IMAGE := klakegg/hugo:$(HUGO_VERSION)-ext PORT := 1314 DOCKER_CMD := docker run --rm -t -e HUGO_CACHEDIR=/src/tmp/.hugo -e HUGOxPARAMSxGITHUB_REPO="" diff --git a/docs/go.mod b/docs/go.mod index ef6ad6c918..fff703af16 100644 --- a/docs/go.mod +++ b/docs/go.mod @@ -4,6 +4,6 @@ go 1.20 require ( github.com/google/docsy/dependencies v0.6.0 // indirect - github.com/keptn/community v0.0.0-20230429154843-72d65a6e2b39 // indirect - github.com/keptn/docs-tooling v0.1.1 // indirect + github.com/keptn/community v0.0.0-20230615192024-1cadfa6b2ad0 // indirect + github.com/keptn/docs-tooling v0.1.2 // indirect ) diff --git a/docs/go.sum b/docs/go.sum index b87cab2184..13a822b5aa 100644 --- a/docs/go.sum +++ b/docs/go.sum @@ -1,9 +1,14 @@ github.com/FortAwesome/Font-Awesome v0.0.0-20220831210243-d3a7818c253f/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.6.0 h1:43bVF18t2JihAamelQjjGzx1vO2ljCilVrBgetCA8oI= +github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= github.com/google/docsy/dependencies v0.6.0 h1:BFXDCINbp8ZuUGl/mrHjMfhCg+b1YX+hVLAA5fGW7Pc= github.com/google/docsy/dependencies v0.6.0/go.mod h1:EDGc2znMbGUw0RW5kWwy2oGgLt0iVXBmoq4UOqstuNE= -github.com/keptn/community v0.0.0-20230429154843-72d65a6e2b39 h1:cexkJyNwTSwU+XgNKbu3ttr71rK/W9AwuyqUdefzPfc= -github.com/keptn/community v0.0.0-20230429154843-72d65a6e2b39/go.mod h1:0G5nUhSv7ch9BgIFXiY7+U+cV5SbVmneysNGQwQkH8s= +github.com/google/docsy/dependencies v0.7.0 h1:/xUlWCZOSMDubHfrhIz1YtaRn2Oc/swfJ7OUfglXE8U= +github.com/google/docsy/dependencies v0.7.0/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= +github.com/keptn/community v0.0.0-20230615192024-1cadfa6b2ad0 h1:gT4CJA5fM9HlF8AGghB7YlS7Yj8wsrBPfpuW22Rc+WU= +github.com/keptn/community v0.0.0-20230615192024-1cadfa6b2ad0/go.mod h1:0G5nUhSv7ch9BgIFXiY7+U+cV5SbVmneysNGQwQkH8s= github.com/keptn/docs-tooling v0.1.1 h1:IuI0Fgs0JrtffLN05iaRZVkRMbPu6h9bxR4C8q1ApGU= github.com/keptn/docs-tooling v0.1.1/go.mod h1:x0iT5YsJosz6wzjQke/YaLgiXF6PV+N8QzxSAc2MY/4= +github.com/keptn/docs-tooling v0.1.2 h1:qKu4U6ugnF7+uQ4buDqYuCehFsGF4bunJYsQWv8MenI= +github.com/keptn/docs-tooling v0.1.2/go.mod h1:x0iT5YsJosz6wzjQke/YaLgiXF6PV+N8QzxSAc2MY/4= github.com/twbs/bootstrap v4.6.2+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= +github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/netlify.toml b/netlify.toml index 73e13b6eb6..67673b1c72 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,28 +1,30 @@ [build] base = "docs/" publish = "public/" -command = "hugo -b $DEPLOY_PRIME_URL" + +# On netlify our branch will always be the one we are currently building for +# important information regarding naming +# https://gohugo.io/getting-started/configuration/#configure-with-environment-variables +command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH hugo -b $DEPLOY_PRIME_URL" ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../netlify.toml" [build.environment] # added specifically a docker image, so the versions within makefile and netlify documentation match # renovate: datasource=docker depName=klakegg/hugo -HUGO_VERSION = "0.107.0" +HUGO_VERSION = "0.111.3" HUGO_ENABLEGITINFO = "true" -# On netlify our branch will always be the one we are currently building for -# important information regarding naming -# https://gohugo.io/getting-started/configuration/#configure-with-environment-variables -HUGOxPARAMSxGITHUB_BRANCH="$BRANCH" - -[context.deploy-preview] +[context.deploy-preview.environment] HUGO_ENV = "development" -[context.branch-deploy] +[context.branch-deploy.environment] HUGO_ENV = "staging" [context.production.environment] HUGO_ENV = "production" [context.production] -command = "hugo -b $URL" +# On netlify our branch will always be the one we are currently building for +# important information regarding naming +# https://gohugo.io/getting-started/configuration/#configure-with-environment-variables +command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH hugo -b $URL" From 2e53fda17183bd1fcffa0d8aaa03c305088465b4 Mon Sep 17 00:00:00 2001 From: RealAnna <89971034+RealAnna@users.noreply.github.com> Date: Tue, 20 Jun 2023 10:47:11 +0200 Subject: [PATCH 5/7] docs: add docs for Python runtime (#1549) Signed-off-by: realanna --- docs/config/_default/config.yaml | 4 ++++ docs/config/_default/params.yaml | 2 ++ docs/content/en/docs/_index.md | 1 + netlify.toml | 4 ++-- .../python_execution/taskdefinition_pyfunction_inline.yaml | 2 +- python-runtime/README.md | 7 +++++-- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/config/_default/config.yaml b/docs/config/_default/config.yaml index ec5a5616f8..f35b4b0e37 100644 --- a/docs/config/_default/config.yaml +++ b/docs/config/_default/config.yaml @@ -27,6 +27,7 @@ module: - "mentorship" - source: "README.md" target: "./content/community/_index.md" + proxy: direct languages: en: @@ -40,3 +41,6 @@ menu: rel: external url: https://v1.keptn.sh/ weight: 1 + +ignoreErrors: + - "error-remote-getjson" diff --git a/docs/config/_default/params.yaml b/docs/config/_default/params.yaml index a495c4d8da..21fa219dfd 100644 --- a/docs/config/_default/params.yaml +++ b/docs/config/_default/params.yaml @@ -14,6 +14,8 @@ versions: mermaid: enable: true +currentversion: main + links: developer: - desc: Development takes place here! diff --git a/docs/content/en/docs/_index.md b/docs/content/en/docs/_index.md index fecb7357d6..1f05b57db6 100644 --- a/docs/content/en/docs/_index.md +++ b/docs/content/en/docs/_index.md @@ -4,4 +4,5 @@ linktitle: Docs description: Learn how to use Keptn. cascade: type: docs + currentversion: main --- \ No newline at end of file diff --git a/netlify.toml b/netlify.toml index 67673b1c72..6cc00f9b77 100644 --- a/netlify.toml +++ b/netlify.toml @@ -5,7 +5,7 @@ publish = "public/" # On netlify our branch will always be the one we are currently building for # important information regarding naming # https://gohugo.io/getting-started/configuration/#configure-with-environment-variables -command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH hugo -b $DEPLOY_PRIME_URL" +command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH HUGOxPARAMSxCURRENTVERSION=$BRANCH hugo -b $DEPLOY_PRIME_URL" ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../netlify.toml" [build.environment] @@ -27,4 +27,4 @@ HUGO_ENV = "production" # On netlify our branch will always be the one we are currently building for # important information regarding naming # https://gohugo.io/getting-started/configuration/#configure-with-environment-variables -command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH hugo -b $URL" +command = "HUGOxPARAMSxGITHUB_BRANCH=$BRANCH HUGOxPARAMSxCURRENTVERSION=$BRANCH hugo -b $URL" diff --git a/operator/config/samples/python_execution/taskdefinition_pyfunction_inline.yaml b/operator/config/samples/python_execution/taskdefinition_pyfunction_inline.yaml index b82560f852..652b7b1b9d 100644 --- a/operator/config/samples/python_execution/taskdefinition_pyfunction_inline.yaml +++ b/operator/config/samples/python_execution/taskdefinition_pyfunction_inline.yaml @@ -1,7 +1,7 @@ apiVersion: lifecycle.keptn.sh/v1alpha3 kind: KeptnTaskDefinition metadata: - name: scheduled-deployment + name: scheduled-deployment-inline spec: python: parameters: diff --git a/python-runtime/README.md b/python-runtime/README.md index 207d426869..bf7cab3cbd 100644 --- a/python-runtime/README.md +++ b/python-runtime/README.md @@ -8,9 +8,12 @@ docker build -t lifecycle-toolkit/python-runtime:${VERSION} . ## Usage -The Keptn python runtime uses python3, and enables the follwing packages: requests, json, git, yaml +The Keptn `python-runtime` runner uses python3 +and enables the following packages: requests, json, git, yaml -The Keptn Lifecycle Toolkit uses this runtime to run [KeptnTask](https://lifecycle.keptn.sh/docs/tasks/write-tasks/) +The Keptn Lifecycle Toolkit uses this runner to execute tasks defined as +[KeptnTaskDefinition](https://lifecycle.keptn.sh/docs/yaml-crd-ref/taskdefinition/) +resources. for pre- and post-checks. `KeptnTask`s can be tested locally with the runtime using the following commands. From 3834b709da4552a07c8acd8699d1e8a583a621bd Mon Sep 17 00:00:00 2001 From: Meg McRoberts Date: Tue, 20 Jun 2023 02:55:55 -0700 Subject: [PATCH 6/7] docs: document container-runtime and python-runtime runners (#1579) Signed-off-by: Meg McRoberts Signed-off-by: Giovanni Liva Signed-off-by: RealAnna <89971034+RealAnna@users.noreply.github.com> Co-authored-by: Giovanni Liva Co-authored-by: RealAnna <89971034+RealAnna@users.noreply.github.com> --- .../getting-started/orchestrate/_index.md | 9 +- .../en/docs/implementing/integrate/_index.md | 2 +- .../en/docs/implementing/tasks/_index.md | 83 +++- docs/content/en/docs/yaml-crd-ref/app.md | 70 +-- .../en/docs/yaml-crd-ref/taskdefinition.md | 415 ++++++++++++++++-- 5 files changed, 507 insertions(+), 72 deletions(-) diff --git a/docs/content/en/docs/getting-started/orchestrate/_index.md b/docs/content/en/docs/getting-started/orchestrate/_index.md index c4ebafb1fa..5251b43ee9 100644 --- a/docs/content/en/docs/getting-started/orchestrate/_index.md +++ b/docs/content/en/docs/getting-started/orchestrate/_index.md @@ -134,7 +134,7 @@ Tasks are resources that are defined in a file. In our example, the tasks are defined in the [keptn-tasks.yaml](https://github.com/keptn-sandbox/klt-on-k3s-with-argocd/blob/main/simplenode-dev/keptn-tasks.yaml) -file +file. As an example, we have a `notify` task that composes some markdown text to be sent as Slack notifications @@ -165,6 +165,13 @@ For this example, the code to be executed is embedded in this file although, in practice, this script would probably be located on a remote webserver. +Note that, beginning with KLT 0.8.0, +you can also use Python 3 to define your task, +or you can define a standard Kubernetes container +that uses the image, runner, and runtime dependencies that you choose. +For more information, see +[Working with Keptn tasks](../../implementing/tasks). + You can view the actual JavaScript code for the task in the repository. You see that "context" is important in this code. This refers to the context in which this code executes -- diff --git a/docs/content/en/docs/implementing/integrate/_index.md b/docs/content/en/docs/implementing/integrate/_index.md index d674ecd612..0bae8753a7 100644 --- a/docs/content/en/docs/implementing/integrate/_index.md +++ b/docs/content/en/docs/implementing/integrate/_index.md @@ -51,7 +51,7 @@ and and [DaemonSets](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) in the namespaces where KLT is enabled. -If KLT finds any of hese resources and the resource has either +If KLT finds any of these resources and the resource has either the keptn.sh or the kubernetes recommended labels, it creates a `KeptnWorkload` resource for the version it detects. diff --git a/docs/content/en/docs/implementing/tasks/_index.md b/docs/content/en/docs/implementing/tasks/_index.md index d896143eee..ba2351ed6a 100644 --- a/docs/content/en/docs/implementing/tasks/_index.md +++ b/docs/content/en/docs/implementing/tasks/_index.md @@ -5,12 +5,70 @@ weight: 90 hidechildren: false # this flag hides all sub-pages in the sidebar-multicard.html --- -Keptn tasks are defined in a +A [KeptnTaskDefinition](../../yaml-crd-ref/taskdefinition.md/) -resource. -A task definition includes a function +resource defines tasks that the Keptn Lifecycle Toolkit runs +as part of the pre- and post-deployment phases of a +[KeptnApp](../../yaml-crd-ref/app.md) or +[KeptnWorkload](../../concepts/workloads). + +A Keptn task executes as a runner in an application +[container](https://kubernetes.io/docs/concepts/containers/), +which runs as part of a Kubernetes +[job](https://kubernetes.io/docs/concepts/workloads/controllers/job/). +A `KeptnTaskDefinition` includes a function that defines the action taken by that task. -It can be configured in one of three different ways: + +To implement a Keptn task: + +- Define a + [KeptnTaskDefinition](../../yaml-crd-ref/taskdefinition.md) + resource that defines the runner to use for the container +- [Annotate your workloads](../integrate/#annotate-workloads) + to integrate your task with Kubernetes +- Add your task to the [KeptnApp](../../yaml-crd-ref/app.md) + resource that associates your `KeptnTaskDefinition` + with the pre- and post-deployment tasks that should run in it + +This page provides information to help you create your tasks: + +- Code your task in an appropriate [runner](#runners-and-containers) +- Understand how to use [Context](#context) + that contains a Kubernetes cluster, a user, a namespace, + the application name, workload name, and version. +- Use [parameterized functions](#parameterized-functions) + if your task requires input parameters +- [Create secret text](#create-secret-text) + and [pass secrets to a function](#pass-secrets-to-a-function) + if necessary. + +## Runners and containers + +Each `KeptnTaskDefinition` can use exactly one container with one runner. +The runner you use determines the language you can use +to define the task. +The `spec` section of the `KeptnTaskDefinition` +defines the runner to use for the container: + +- The `container-runtime` runner provides + a pure custom Kubernetes application container + that you define to includes a runtime, an application + and its runtime dependencies. + This gives you the greatest flexibility + to define tasks using the lanugage and facilities of your choice + +KLT also includes two "pre-defined" runners: + +- Use the `deno-runtime` runner to define tasks using Deno scripts, + which use JavaScript/Typescript syntax with a few limitations. + You can use this to specify simple actions + without having to define a container. +- Use the `python-runtime` runner + to define your task using Python 3. + +For the pre-defined runners (`deno-runtime` and `python-runtime`), +the actual code to be executed +can be configured in one of four different ways: - inline - referring to an HTTP script @@ -19,7 +77,11 @@ It can be configured in one of three different ways: [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) resource that is populated with the function to execute -### Context +See the +[KeptnTaskDefinition](../../yaml-crd-ref/taskdefinition.md) +reference page for the synopsis and examples for each runner. + +## Context A Kubernetes context is a set of access parameters that contains a Kubernetes cluster, a user, a namespace, @@ -88,7 +150,13 @@ Note the following about using parameters with functions: The secret must have a `key` called `SECURE_DATA`. It can be accessed via the environment variable `Deno.env.get("SECURE_DATA")`. -## Create secret text +## Working with secrets + +A special case of parameterized functions +is to pass secrets that may be required +to access data that your task requires. + +### Create secret text To create a secret to use in a `KeptnTaskDefinition`, execute this command: @@ -139,9 +207,8 @@ spec: // secret_text_obj["foo2"] = "bar2" ``` -## Pass secrets to a function +### Pass secrets to a function -In the previous example, you see that Kubernetes [secrets](https://kubernetes.io/docs/concepts/configuration/secret/) can be passed to the function diff --git a/docs/content/en/docs/yaml-crd-ref/app.md b/docs/content/en/docs/yaml-crd-ref/app.md index e4d0d790d0..be3cc41e0a 100644 --- a/docs/content/en/docs/yaml-crd-ref/app.md +++ b/docs/content/en/docs/yaml-crd-ref/app.md @@ -6,10 +6,16 @@ weight: 10 `KeptnApp` defines a list of workloads that together constitute a logical application. -It contains information about all workloads and checks -that are associated with a Keptn application -and a list of tasks and evaluations to be executed -pre- and post-deployment. +It contains information about: + +- All workloads and checks + that are associated with a Keptn application +- A list of tasks and evaluations to be executed + pre- and post-deployment. +- Tasks referenced by `KeptnApp` are defined in a + [KeptnTaskDefinition](taskdefinition.md) resource. + `KeptnApp` identifies the task by the value of the `metadata.name` field + and does not need to understand what runner is used to define the task. ## Synopsis @@ -39,51 +45,53 @@ spec: ## Fields -* **apiVersion** -- API version being used. -* **kind** -- Resource type. +- **apiVersion** -- API version being used. +- **kind** -- Resource type. Must be set to `KeptnApp` -* **metadata** - * **name** -- Unique name of this application. +- **metadata** + - **name** -- Unique name of this application. Names must comply with the [Kubernetes Object Names and IDs](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names) specification. -* **spec** - * **version** -- version of the Keptn application. +- **spec** + - **version** -- version of the Keptn application. Changing this version number causes a new execution of all application-level checks - * **revision** -- revision of a `version`. + - **revision** -- revision of a `version`. The value is an integer that can be modified to trigger another deployment of a `KeptnApp` of the same version. For example, increment this number to restart a `KeptnApp` version that failed to deploy, perhaps because a - `preDeploymentEvaluation` or `preDeploymentTask` failed. - * **workloads** - * **name** - name of this Kubernetes + `preDeploymentEvaluation` or `preDeploymentTask` failed + for reasons that may be transient. + - **workloads** + - **name** - name of this Kubernetes [workload](https://kubernetes.io/docs/concepts/workloads/). Use the same naming rules listed above for the application name. Provide one entry for each workload associated with this Keptn application. - * **version** -- version number for this workload. + - **version** -- version number for this workload. Changing this number causes a new execution - of checks for the Keptn application and the new version of the workload. - * **preDeploymentTasks** -- list each task to be run - as part of the pre-deployment stage. - Task names must match the value of the `name` field + of checks for this workload only, + not the entire application. + - **preDeploymentTasks** -- list each task + to be run as part of the pre-deployment stage. + Task names must match the value of the `metadata.name` field for the associated [KeptnTaskDefinition](taskdefinition.md) resource. - * **postDeploymentTasks** -- list each task to be run - as part of the post-deployment stage. - Task names must match the value of the `name` field + - **postDeploymentTasks** -- list each task + to be run as part of the post-deployment stage. + Task names must match the value of the `metadata.name` field for the associated [KeptnTaskDefinition](taskdefinition.md) resource. - * **preDeploymentEvaluations** -- list each evaluation to be run + - **preDeploymentEvaluations** -- list each evaluation to be run as part of the pre-deployment stage. - Evaluation names must match the value of the `name` field + Evaluation names must match the value of the `metadata.name` field for the associated [KeptnEvaluationDefinition](evaluationdefinition.md) resource. - * **postDeploymentEvaluations** -- list each evaluation to be run + - **postDeploymentEvaluations** -- list each evaluation to be run as part of the post-deployment stage. - Evaluation names must match the value of the `name` field + Evaluation names must match the value of the `metadata.name` field for the associated [KeptnEvaluationDefinition](evaluationdefinition.md) resource. @@ -107,7 +115,9 @@ based on Keptn or [recommended Kubernetes labels](https://kubernetes.io/docs/con This allows you to use the KLT observability features for existing resources without manually populating any Keptn related resources. -## Example +## Examples + +### Example ```yaml apiVersion: lifecycle.keptn.sh/v1alpha3 @@ -132,8 +142,12 @@ spec: ## Differences between versions -The `spec.Revision` field is introduced in v1alpha2. +- The `spec.revision` field is introduced in v1alpha2. ## See also +- [KeptnTaskDefinition](taskdefinition.md) +- [Working with tasks](../implementing/tasks) +- [Pre- and post-deployment tasks](../implementing/integrate/#pre--and-post-deployment-checks) +- [Orchestrate deployment checks](../getting-started/orchestrate) [Use Keptn automatic app discovery](../implementing/integrate/#use-keptn-automatic-app-discovery) diff --git a/docs/content/en/docs/yaml-crd-ref/taskdefinition.md b/docs/content/en/docs/yaml-crd-ref/taskdefinition.md index dc2a2bd2c3..002617f477 100644 --- a/docs/content/en/docs/yaml-crd-ref/taskdefinition.md +++ b/docs/content/en/docs/yaml-crd-ref/taskdefinition.md @@ -4,14 +4,57 @@ description: Define tasks that can be run pre- or post-deployment weight: 89 --- - A `KeptnTaskDefinition` defines tasks that are run by the Keptn Lifecycle Toolkit as part of the pre- and post-deployment phases of a [KeptnApp](./app.md) or [KeptnWorkload](../concepts/workloads/). -## Yaml Synopsis +A Keptn task executes as a +[runner](https://docs.gitlab.com/runner/executors/kubernetes.html#how-the-runner-creates-kubernetes-pods) +in an application +[container](https://kubernetes.io/docs/concepts/containers/), +which runs as part of a Kubernetes +[job](https://kubernetes.io/docs/concepts/workloads/controllers/job/). + +Each `KeptnTaskDefinition` can use exactly one container with one runner. +which is one of the following, +differentiated by the `spec` section: + +* The `custom-runtime` runner provides + a standard Kubernetes application container + that is run as part of a Kubernetes job.. + You define the runner, an application, + and its runtime dependencies. + This gives you the flexibility + to define tasks using the lanugage and facilities of your choice, + although it is more complicated that using one of the pre-defined runtimes. + See + [Yaml synopsis for container-runtime](#yaml-synopsis-for-container-runtime) + and + [Examples for a custom-runtime container](#examples-for-a-custom-runtime-container). +* Use the pre-defined `deno-runtime` runner + to define tasks using Deno scripts, + which use a syntax similar to JavaScript and Typescript, + with a few limitations. + You can use this to specify simple actions + without having to define a container. + See + [Yaml synopsis for Deno-runtime container](#yaml-synopsis-for-deno-runtime-container) + and + [Deno-runtime examples](#examples-for-deno-runtime-runner). +* Use the pre-defined `python-runtime` runner + to define your task using Python 3. + See + [Yaml synopsis for python-runtime runner](#yaml-synopsis-for-python-runtime-runner) + and + [Examples for a python-runtime runner](#examples-for-a-python-runtime-runner). + +## Yaml Synopsis for all runners + +The `KeptnTaskDefinition` Yaml files for all runners +include the same lines at the top. +These are described here. ```yaml apiVersion: lifecycle.keptn.sh/v?alpha? @@ -19,16 +62,18 @@ kind: KeptnTaskDefinition metadata: name: spec: - function: - inline | httpRef | functionRef | ConfigMapRef - parameters: - map: - textMessage: "This is my configuration" - secureParameters: - secret: slack-token + function | python | container + ... + retries: + timeout: ``` -## Fields +The API ref points to +[Kubernetes doc](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#duration-v1-meta) +where I don't find a direct hit +but timeouts seem to be measured in seconds. + +### Fields used for all containers * **apiVersion** -- API version being used. ` @@ -36,16 +81,77 @@ spec: Must be set to `KeptnTaskDefinition` * **metadata** - * **name** -- Unique name of this task. + * **name** -- Unique name of this task or container. + This is the name used to insert this task or container + into the `preDeployment` or `postDeployment` list. Names must comply with the [Kubernetes Object Names and IDs](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names) specification. +* **spec** + * **function | python | container** -- Define the container type + to use for this task. + Each task can use one type of runner, + identified by this field: + * **function** -- Use a `deno-runtime` runner + and code the functionality in Deno script, + which is similar to JavaScript and Typescript. + See + [Yaml synopsis for deno-runtime contailer](#yaml-synopsis-for-deno-runtime-container). + * **python** -- Use a `python-runtime` function + and code the functionality in Python 3. + See + [Yaml synopsis for python-runtime runner](#yaml-synopsis-for-python-runtime-runner) + * **container** -- Use the runner defined + for the `container-runtime` container. + This is a standard Kubernetes container + for which you define the image, runner, runtime parameters, etc. + and code the functionality to match the container you define. + See + [Yaml synopsis for container-runtime contaier](#yaml-synopsis-for-container-runtime). + * **retries** (optional) - specifies the number of times, + a job executing the `KeptnTaskDefinition` + should be restarted if an attempt is unsuccessful. + * **timeout** (optional)* -- specifies the maximum time, in seconds, + to wait for the task to be completed successfully. + If the task does not complete successfully within this time frame, + it is considered to be failed. + +## Yaml Synopsis for deno-runtime container + +When using the `deno-runtime` runner to define a task, +the `function` is coded in Deno-script +(which is mostly the same as JavaScript and TypeScript) +and executed in the +[Deno](https://deno.com/runtime) runner, +which is a lightweight runtime environment +that executes in your namespace. +Note that Deno has tighter restrictions +for permissions and importing data +so a script that works properly elsewhere +may not function out of the box when run in the `deno-runtime` runner. + +```yaml +apiVersion: lifecycle.keptn.sh/v?alpha? +kind: KeptnTaskDefinition +metadata: + name: +spec: + function: + inline | httpRef | functionRef | ConfigMapRef + parameters: + map: + textMessage: "This is my configuration" + secureParameters: + secret: slack-token +``` + +### Spec fields for deno-runtime definitions * **spec** * **function** -- Code to be executed, expressed as a [Deno](https://deno.land/) script. Refer to [function runtime](https://github.com/keptn/lifecycle-toolkit/tree/main/functions-runtime) - for more information about the runtime. + for more information about this runner. The `function` can be defined as one of the following: @@ -74,7 +180,7 @@ spec: ``` * **functionRef** -- Execute one or more `KeptnTaskDefinition` resources - that have been defined. + that have been defined to use the `deno-runtime` runner. Populate this field with the value(s) of the `name` field for the `KeptnTaskDefinition`(s) to be called. This is commonly used to call a general function @@ -130,37 +236,192 @@ spec: See [Create secret text](../implementing/tasks/#create-secret-text) for details. +## Yaml Synopsis for container-runtime + +```yaml +apiVersion: lifecycle.keptn.sh/v?alpha? +kind: KeptnTaskDefinition +metadata: + name: +spec: + container: + name: + image: + +``` + +### Spec used only for container-runtime + +The `container-runtime` can be used to specify +your own container image and define almost task you want to do. +If you are migrating from Keptn v1, +you can use a `container-runtime` to execute +almost anything that you implemented with JES for Keptn v1. + +* **spec** + * **container** -- Container definition. + * **name** -- Name of the container that will run, + which is not the same as the `metadata.name` field + that is used in the `KeptnApp` resource. + * **image** -- name of the image you defined according to + [image reference](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#image) + and + [image concepts](https://kubernetes.io/docs/concepts/containers/images/) + and pushed to a registry + * **other fields** -- The full list of valid fields is available at + [ContainerSpec](../crd-ref/lifecycle/v1alpha3/#containerspec), + with additional information in the Kubernetes + [Container](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container) + spec documentation. + +## Yaml Synopsis for Python-runtime runner + +The `python-runtime` runner is built on the `container-runtime` runner +to provide a way easily define a task using Python 3. +You do not need to specify the image, volumes, and so forth. +Instead, just provide a Python script +and KLT sets up the container and runs the script as part of the task. + +```yaml +apiVersion: lifecycle.keptn.sh/v?alpha? +kind: KeptnTaskDefinition +metadata: + name: +spec: + python: + inline | httpRef | functionRef | ConfigMapRef + parameters: + map: + textMessage: "This is my configuration" + secureParameters: + secret: slack-token +``` + +### Spec used only for the python-runtime runner + +The `python-runtime` runner is used to define tasks using Python 3 code. + +* **spec** + * **python** -- Identifies this as a Python runner. + * **inline** -- Include the actual Python 3.1 code to execute. + For example, the following example + prints data stored in the parameters map: + + ```yaml + python: + inline: + code: | + data = os.getenv('DATA') + print(data) + ``` + + * **httpRef** - Specify a Deno script to be executed at runtime + from the remote webserver that is specified. + For example: + + ```yaml + name: hello-keptn-http + spec: + python: + httpRef: + url: "https://www.example.com/yourscript.py" + ``` + + * **functionRef** -- Execute one or more `KeptnTaskDefinition` resources + that have been defined to use the `python-runtime` runner. + Populate this field with the value(s) of the `metadata.name` field + for each `KeptnDefinitionTask` to be called. + This is commonly used to call a general function + that is used in multiple places, + possibly with different parameters. + An example is: + + ```yaml + spec: + python: + functionRef: + name: slack-notification + ``` + + This can also be used to group a set of tasks + into a single `KeptnTaskDefinition`, + such as defining a `KeptnTaskDefinition` for testing. + In this case, it calls other, existing `KeptnTaskDefinition`s + for each type of test to be run, + specifying each by the value of the `name` field. + + * **ConfigMapRef** -- Specify the name of a + [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) + resource that contains the function to be executed. + + * **parameters** - An optional field to supply input parameters to a function. + The Lifecycle Toolkit passes the values defined inside the `map` field + as a JSON object. + For example: + + ```yaml + spec: + parameters: + map: + textMessage: "This is my configuration" + ``` + + See + [Parameterized functions](../implementing/tasks/#parameterized-functions) + for more information. + + * **secureParameters** -- An optional field used to pass a Kubernetes secret. + The `secret` value is the Kubernetes secret name + that is mounted into the runtime and made available to functions + using the `SECURE_DATA` environment variable. + For example: + + ```yaml + secureParameters: + secret: slack-token + ``` + + Note that, currently, only one secret can be passed. + + See [Create secret text](../implementing/tasks/#create-secret-text) + for details. + ## Usage A Task executes the TaskDefinition of a -[KeptnApp](app.md) or [KeptnWorkload]. +[KeptnApp](app.md) or a +[KeptnWorkload](../concepts/workloads). The execution is done by spawning a Kubernetes [Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) to handle a single Task. In its state, it tracks the current status of this Kubernetes Job. -The `function` is coded in JavaScript -and executed in -[Deno](https://deno.com/runtime), -which is a lightweight runtime environment -that executes in your namespace. -Note that Deno has tighter restrictions -for permissions and importing data -so a script that works properly elsewhere -may not function out of the box when run in Deno. +When using a container runtime that includes a volume, +an `EmptyDir` volume is created +with the same name as is specified the container `volumeMount`. +Note that, if more `volumeMount`s are specified, +only one volume is created with the name of the first `volumeMount`. +By default, the size of this volume is 1GB. +If the memory limit for the container is set, +the size of the volume is 50% of the memory allocated for the node. A task can be executed either pre-deployment or post-deployment -as specified in the `Deployment` resource; -see +as specified in the pod template specs of your Workloads +([Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/), +[StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/), +[DaemonSets](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/), +and +[ReplicaSets](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/). +See [Pre- and post-deployment tasks](../implementing/integrate/#pre--and-post-deployment-checks) for details. Note that the annotation identifies the task by `name`. This means that you can modify the `function` code in the resource definition and the revised code is picked up without additional changes. -## Examples +## Examples for deno-runtime runner -### Example 1: inline script +### Example 1: inline script for a Deno script This example defines a full-fledged Deno script within the `KeptnTaskDefinition` YAML file: @@ -183,7 +444,7 @@ spec: console.log("Hello, " + name + " new"); ``` -### Example 2: httpRef script +### Example 2: httpRef script for a Deno script This example fetches the Deno script from a remote webserver at runtime: @@ -205,7 +466,7 @@ See the [sample-app/version-1](https://github.com/keptn-sandbox/lifecycle-toolkit-examples/blob/main/sample-app/version-1/app-pre-deploy.yaml) PodtatoHead example for a more complete example. -### Example 3: functionRef +### Example 3: functionRef for a Deno script This example calls another defined task, illustrating how one `KeptnTaskDefinition` can build @@ -229,7 +490,7 @@ spec: secret: slack-token ``` -### Example 4: ConfigMapRef +### Example 4: ConfigMapRef for a Deno script This example references a `ConfigMap` by the name of `dev-configmap` that contains the code for the function to be executed. @@ -245,7 +506,7 @@ spec: name: dev-configmap ``` -### Example 5: ConfigMap +### Example 5: ConfigMap for a Deno script This example illustrates the use of both a `ConfigMapRef` and a `ConfigMap`: @@ -282,7 +543,78 @@ data: console.log(targetDate); ``` -### More examples +## Examples for a custom-runtime container + +For an example of a `KeptnTaskDefinition` that defines a custom container. + see +[container-task.yaml](. +The `spec` includes: + +```yaml +spec: + container: + name: testy-test + image: busybox:1.36.0 + command: + - 'sh' + - '-c' + - 'sleep 30' +``` + +This task is then referenced in + +[app.yaml](https://github.com/keptn/lifecycle-toolkit/blob/main/examples/sample-app/version-3/app.yaml). + +This is a a trivial example that just runs `busybox`, +then spawns a shell and runs the `sleep 30` command. + +## Examples for a python-runtime runner + +### Example 1: inline code for a python-runtime runner + +You can embed python code directly in the task definition. +This example prints data stored in the parameters map: +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_inline.yaml" >}} + +### Example 2: httpRef for a python-runtime runner + +You can refer to code stored online. +For example, we have a few examples available in the +[python-runtime samples](https://github.com/keptn/lifecycle-toolkit/tree/main/python-runtime/samples) +tree. + +Consider the following: +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_configmap.yaml" >}} + +### Example 3: functionRef for a python-runtime runner + +You can refer to an existing `KeptnTaskDefinition`. +This example calls the inline example +but overrides the data printed with what is specified in the task: +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_recursive.yaml" >}} + +### Example 4: ConfigMapRef for a python-runtime runner + +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_configmap.yaml" >}} + +### Allowed libraries for the python-runtime runner + +The following example shows how to use some of the allowed packages, namely: +requests, json, git, and yaml: + +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_inline_printargs_py.yaml">}} + +### Passing secrets, environment variables and modifying the python command + +The following examples show how to pass data inside the parameter map, +how to load a secret in your code, +and how to modify the python command. +In this case the container runs with the `-h` option, +which prints the help message for the python3 interpreter: + +{{< embed path="/operator/config/samples/python_execution/taskdefinition_pyfunction_use_envvars.yaml" >}} + +## More examples See the [operator/config/samples](https://github.com/keptn/lifecycle-toolkit/tree/main/operator/config/samples/function_execution) directory for more example `KeptnTaskDefinition` YAML files. @@ -302,11 +634,26 @@ API Reference: ## Differences between versions -The `KeptnTaskDefinition` is the same for -all `v1alpha?` library versions. +The `KeptnTaskDefinition` support for +the `container-runtime` and `python-runtime` is introduced in v0.8.0. +This modifies the synopsis in two ways: + +* Add the `spec.container` field. +* The `spec.function` field is changed to be a pointer receiver. + This aligns it with the `spec.container` field, + which must be a pointer, + and enables `KeptnTask` to omit it when it is empty, + which it must be when `spec.container` is populated. + +## Limitations + +Only one +[runtime](https://kubernetes.io/docs/setup/production-environment/container-runtimes/) +is allowed per `KeptnTaskDefinition`. ## See also +* [KeptnApp](app.md) * [Working with tasks](../implementing/tasks) * [Pre- and post-deployment tasks](../implementing/integrate/#pre--and-post-deployment-checks) * [Orchestrate deployment checks](../getting-started/orchestrate) From 05572ec6a1a6dd7a56c786333af046eea19929bd Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Tue, 20 Jun 2023 12:00:21 +0200 Subject: [PATCH 7/7] fix(helm-chart): fix Python runtime version number (#1586) --- helm/chart/README.md | 2 +- helm/chart/values.yaml | 2 +- klt-cert-manager/.gitignore | 2 +- metrics-operator/.gitignore | 2 +- operator/config/manager/manager.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/helm/chart/README.md b/helm/chart/README.md index 1286cd2ec3..453bfb4c71 100644 --- a/helm/chart/README.md +++ b/helm/chart/README.md @@ -92,7 +92,7 @@ checks | `lifecycleOperator.manager.env.optionsControllerLogLevel` | sets the log level of Keptn Options Controller | `0` | | `lifecycleOperator.manager.env.otelCollectorUrl` | Sets the URL for the open telemetry collector | `otel-collector:4317` | | `lifecycleOperator.manager.env.functionRunnerImage` | specify image for deno task runtime | `ghcr.io/keptn/functions-runtime:v0.7.1` | -| `lifecycleOperator.manager.env.pythonRunnerImage` | specify image for python task runtime | `ghcr.io/keptn/python-runtime:0.0.0` | +| `lifecycleOperator.manager.env.pythonRunnerImage` | specify image for python task runtime | `ghcr.io/keptn/python-runtime:v0.0.0` | | `lifecycleOperator.manager.image.repository` | specify registry for manager image | `ghcr.io/keptn/lifecycle-operator` | | `lifecycleOperator.manager.image.tag` | select tag for manager image | `v0.7.1` | | `lifecycleOperator.manager.imagePullPolicy` | specify pull policy for manager image | `Always` | diff --git a/helm/chart/values.yaml b/helm/chart/values.yaml index c519eb15b3..17624eb281 100644 --- a/helm/chart/values.yaml +++ b/helm/chart/values.yaml @@ -78,7 +78,7 @@ lifecycleOperator: keptnWorkloadInstanceControllerLogLevel: "0" optionsControllerLogLevel: "0" otelCollectorUrl: otel-collector:4317 - pythonRunnerImage: ghcr.io/keptn/python-runtime:0.0.0 + pythonRunnerImage: ghcr.io/keptn/python-runtime:v0.0.0 image: repository: ghcr.io/keptn/lifecycle-operator tag: v0.7.1 diff --git a/klt-cert-manager/.gitignore b/klt-cert-manager/.gitignore index 540294463a..55384b0fe3 100644 --- a/klt-cert-manager/.gitignore +++ b/klt-cert-manager/.gitignore @@ -5,7 +5,7 @@ *.dll *.so *.dylib -bin +bin/ testbin/* Dockerfile.cross diff --git a/metrics-operator/.gitignore b/metrics-operator/.gitignore index 00f37ab078..e28d69955a 100644 --- a/metrics-operator/.gitignore +++ b/metrics-operator/.gitignore @@ -5,7 +5,7 @@ *.dll *.so *.dylib -bin +bin/ testbin/* # Test binary, build with `go test -c` diff --git a/operator/config/manager/manager.yaml b/operator/config/manager/manager.yaml index 0dfd57d2e6..68d488b892 100644 --- a/operator/config/manager/manager.yaml +++ b/operator/config/manager/manager.yaml @@ -68,7 +68,7 @@ spec: - name: FUNCTION_RUNNER_IMAGE value: ghcr.io/keptn/functions-runtime:v0.7.1 # x-release-please-version - name: PYTHON_RUNNER_IMAGE - value: ghcr.io/keptn/python-runtime:0.0.0 # x-release-please-version + value: ghcr.io/keptn/python-runtime:v0.0.0 # x-release-please-version - name: OTEL_COLLECTOR_URL value: otel-collector:4317 - name: KEPTN_APP_CONTROLLER_LOG_LEVEL