From 1830b34e13aa18b83704496d159e55fdd4787638 Mon Sep 17 00:00:00 2001 From: Tom Chauveau Date: Tue, 17 Aug 2021 00:04:54 +0200 Subject: [PATCH] Add test for kube-gcp deployment step Signed-off-by: Tom Chauveau --- docs/learn/1007-kubernetes.md | 90 +------------------ .../env/kube-gcp-deployment/.gitignore | 2 + .../env/kube-gcp-deployment/values.yaml | 32 +++++++ .../tests/kube-gcp/deployment/config.cue | 25 ++++++ .../learn/tests/kube-gcp/deployment/input.cue | 19 ++++ .../tests/kube-gcp/deployment/test/test.cue | 66 ++++++++++++++ .../tests/kube-gcp/deployment/todoapp.cue | 61 +++++++++++++ 7 files changed, 207 insertions(+), 88 deletions(-) create mode 100644 docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore create mode 100644 docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml create mode 100644 docs/learn/tests/kube-gcp/deployment/config.cue create mode 100644 docs/learn/tests/kube-gcp/deployment/input.cue create mode 100644 docs/learn/tests/kube-gcp/deployment/test/test.cue create mode 100644 docs/learn/tests/kube-gcp/deployment/todoapp.cue diff --git a/docs/learn/1007-kubernetes.md b/docs/learn/1007-kubernetes.md index 23295059..341b02c0 100644 --- a/docs/learn/1007-kubernetes.md +++ b/docs/learn/1007-kubernetes.md @@ -414,32 +414,7 @@ The two files have to be edited to do so. - definition of a new `gcrCreds` value that contains ecr credentials for remote image push to GCR -```cue title="todoapp/kube/config.cue" -package main - -import ( - "alpha.dagger.io/gcp" - "alpha.dagger.io/gcp/gcr" - "alpha.dagger.io/gcp/gke" -) - -// Value created for generic reference of `kubeconfig` in `todoapp.cue` -kubeconfig: gkeConfig.kubeconfig - -// gcpConfig used for Google connection -gcpConfig: gcp.#Config - -// gkeConfig used for deployment -gkeConfig: gke.#KubeConfig & { - // config field references `gkeConfig` value to set in once - config: gcpConfig -} - -// gcrCreds used for remote image push -gcrCreds: gcr.#Credentials & { - // config field references `gcpConfig` value to set in once - config: gcpConfig -} +```cue file=tests/kube-gcp/deployment/config.cue title="todoapp/kube/config.cue" ``` `kube/todoapp.cue`, on the other hand, faces these changes: @@ -450,68 +425,7 @@ gcrCreds: gcr.#Credentials & { - `remoteImage`, push an image to the registry - `kustomization`, apply kustomization to image -```cue title="todoapp/kube/todoapp.cue" -package main - -import ( - "encoding/yaml" - - "alpha.dagger.io/dagger" - "alpha.dagger.io/docker" - "alpha.dagger.io/kubernetes" - "alpha.dagger.io/kubernetes/kustomize" -) - -// input: source code repository, must contain a Dockerfile -// set with `dagger input dir repository . -e kube` -repository: dagger.#Artifact & dagger.#Input - -// GCR registry to push images to -registry: string & dagger.#Input -tag: "test-gcr" - -// source of Kube config file. -// set with `dagger input dir manifest ./k8s -e kube` -manifest: dagger.#Artifact & dagger.#Input - -// Declarative name -todoApp: { - // Build an image from the project repository - image: docker.#Build & { - source: repository - } - - // Push the image to a remote registry - remoteImage: docker.#Push & { - target: "\(registry):\(tag)" - source: image - auth: { - username: gcrCreds.username - secret: gcrCreds.secret - } - } - - // Update the image of the deployment to the deployed image - kustomization: kustomize.#Kustomize & { - source: manifest - - // Convert CUE to YAML. - kustomization: yaml.Marshal({ - resources: ["deployment.yaml", "service.yaml"] - - images: [{ - name: "public.ecr.aws/j7f8d3t2/todoapp" - newName: remoteImage.ref - }] - }) - } - - // Value created for generic reference of `kubeconfig` in `todoapp.cue` - kubeSrc: kubernetes.#Resources & { - "kubeconfig": kubeconfig - source: kustomization - } -} +```cue file=tests/kube-gcp/deployment/todoapp.cue title="todoapp/kube/todoapp.cue" ``` diff --git a/docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore b/docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore new file mode 100644 index 00000000..01ec19b0 --- /dev/null +++ b/docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore @@ -0,0 +1,2 @@ +# dagger state +state/** diff --git a/docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml b/docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml new file mode 100644 index 00000000..0c28e5c3 --- /dev/null +++ b/docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml @@ -0,0 +1,32 @@ +plan: + package: ./kube-gcp/deployment/test +name: kube-gcp-deployment +inputs: + gcpConfig.project: + text: dagger-ci + gcpConfig.region: + text: us-west2-a + gcpConfig.serviceKey: + secret: ENC[AES256_GCM,data:Xbs0AHj7kFU6bfWGFuwQyCGLPhEsbBb42tc7f373Pof9sJ4J3TYnXu/PM2Ru+r/S6xA5jGhSebMAf8WPXuVqj35mOiGjeldRZY4Ilc9HdxD8BCaKvlgGXl2M+itRlANV2dGSQFPwFxp7X4Vz7h+kdAxnRwxa2vmKEQKbUKCXDph6Fc3VU1QhVlZzIFfR30rXHNhF53SoIlGiuD+O9GFYeI/dRJe+LrzXJcZmgo1On/qLGnMLrV9BmOuHsoZLyQHJaPyhLwSxmzrxQ3diwBv/89PGFiSSbq8hzpz8Ko7VQNb2KMb3Ng37q1As4J3R/uQd2EfytesLQ21bqHgXLlLNqyHF1FpWy+YXXuCiAwVR0vBZh9j0/6XL+HQiLx/6cSMTukoQ/EZiw5UTwPqm3B8LGdfzXbd50Ghxt5Il3ZTvR8zK+ZhXe/I5InIiv0ZQKNwnp5n06OpghZDEcBN52cqdj8Y/xaCFzy0rCuRDDn3/vVE8I+4gZncayePCMmhb9Pmod66BG6XHBqs+rRYqX/RmAQAmOzEhqK0+ZRLVtN0ui7HFjm91Pe2fTBrox/zcFSl61oSEd6PvY7L0MG6G7t+34YBXlqjzVYOOgvM1GXzUhl3RNLFWJtoDRk22myZSaB9E+f6gwuSrW8ujgKaeUjH5cu0hH3evd0o2ocEmgcwJIavgNTNoPVj1YRclrRe7wxmXr4mPW1+j7ny584bKATRFKwn13RihqczboYqPPNy1772MLJUbZQ5U5KAzZenrA2U8h7YCV044kgpDLGVEsguQQpHRuZIHd4iVseIxut3krMIFdfkPtQHeoTCVJaasBJka1ArEZn7mxTCrd/+0sCyee9PHtwkWMW715srERljPViuoqH8L4Us6YyxWaDbQo/nj4PcmdqClYh6Xhr3a4tz4egLz/cqiGUdn1dPn9vcoBL8MU1rJPYxCkjvpD0hRWZNS9gVddvnLUvA83C5s0uHbZzDE0o4UtRx9hByWzemFEHy6HTmTFCmJ/LqRSaLctzJVLCUwvbonAZwrCcRz3gSByNWvcAZ6jZrD7fF8Oa/pnPPEYLyfHxbRtLDNd9Q9rjt8vQzQuCEG1BYL7ox9B4V21K4dqhiimQMbWBa/vExfqBXct8EYSEJRrba8TjjsGGyv3DdT/GLSzEJRP4PJYe2W7r8QkkhtHug2as520ilgmb1RiGjNtHkQCDKjXAMzo4SDygJPvmb7XbzEYmIvP0Kvr2KDXIc4mDbzhmq7X1M8cWRXQ+UZBgWLAeyUfjMBz1QlzV2BsoLQzbBQBYhSuBu5+dbx/xruB+Esaul/sC8PMIDTCcjJuNG6d6hO5WXin+tG42Iex9LMByFstdJ9/Q58vMkSmGW3VIfG/NyWn4sQ6tyLn6qfeZU46qhz8I7bw1ooWuE8COA8N4GPvGRQr0oeFmNF2D7c6NWdft5A+hOnUrlIMFm1gnQK1jgoq0eaSuSg4ia2RXs+DXbT4pJAYGT58qlI/yKMgMVo6YeM9NNyeoeK9D3EjdKGXVuX2yOac6yZJD28nGY78Tmn5wZjvRXcXuprL30PPGSIKQr2VqUhqfsR20Z+ECHa1H6UkemsRE7FHz96zo9ZDnfEgoJNjaPrqn/6YOdQQdfmtx9egCMmXSC4VpWPta0T+rbD3gW0Zxst7tgia9oDRteu8FumxSRvSLRVUJIe8HpDZwhgmjVSfSBim2P6LIdWy5GGslq1bIWECcnGBE0TB1f7wLsRuY3W6AamF5C319VouFTMZN402Bxq1ChkqQBqUTSB3zHR3LY3UeojTsRCqCBq38ZS03izDWgihDF03kFxJtfDMHfwr6Lg6CM/uo8kxDtAIKdTcFidLvmyYyxfphIY5EtoDEOkRHJFcwvAP2knFPVCKTwSP1KOPuAjv0Hs+4jDr9IBeCtEwZ1Wxjj95yacihLkH43OItBAUI7tZhDOQXZjX5hTnnhaDVnheg74JioGBnB/L22SCapHjnGQhEJDsWbIwXd9VDarr1aZEb/7fes65WKtltrN9+a3Bsj+SXPEY/RNzCZQ+yvBmouuHUmdyqYIU1bawWXgj83MREUiNPNyy1Lnd+GpgAsGgbg4TX5vEw01dRA5Swa5XxzBo+0/P+5C0tXvG79RxeODjXXeLhzdz4db4Sst0/Bi3H+DJ6oOYITvZBxplbSsyfKUn0msIDFEB+l+3L5TsZFDMwPB55b5YOuIPs226PnP5PlEFtkeIW5xonvzFWtZLDp1n8ale/z3ipqo4x3segz6Acsq9ZRS6kdEsWsG3HTJ2sNUPzXsUUeibQWAX9VhIXMPGWwQdYTNacRn5+1scEr0hI681qeophmMf1VGQo654KztXKaL1udJfE3Ks/5HfFY76rGJdO3xctefBBjYPHevoFlCqh1El3v3dMIZP6zj4HCA9k4z08yNRwLZ4dGHsHROwiBXcLvX+YdXhirjYbv6gl4xEURSPaZzbFiDeyWfWcHlokbfgVtJYU4HsxKrlgjzjlGqPeuZeVCAERC4HD8Jw1hp9j+MdUAzh8ljRx+VIIX5/v6Myl6k8HUXCXNSkR9XJkDLCRTxIg3Jvd1vVnQGtKjbLcnOVHQnm6gII1p/HrRQCIAo1akRt6/+wUdbEjt8F+OwwY8rgEHkNNUUM+yTYzwZ51aaR99UcibVfYnIWQNDWL2FSWibp+Z3/6tElt+SQGJ/uUYfDtBf70/GBk1xIQ2W3eHapE5Xzh0cSZTj/LmbM1pkwgJHqpFVmMX8dK+TJ6Jb7fraKJUKp0Xosop/hKERI2U1JgNEmNlVfz7EKEKVd4ajBHwVXhmERYbi0vt+dCkWkcorWtav7QJnsy9gizpNeJIgXCq1X1yPJwTgKuqVkxpRt5aHdeeVJueUBxaSc4SayYIzG/88js/9c+O9lx08zOOMTVDFPvpjFsmgsrXK7RpCXMbhLBBjeyYRM1s8pGdC8LiOPBWEEu1UQ7YjWdV5JFhkJrAV0h3JQS5vL/OB867EPJjANCjj6gmJfEF/wgOn7TZh4U1+jlHZYtZodsV77TKfN+dWk6JSfdQ+2yqrLhMdyRDocouJbh3QrkdQ9NWh+BE8xQzrAgPz+c0w,iv:btPOf+agGb0iUOXUHZVzbFGNMmzWd1Bk0PvM0EjBjXg=,tag:FYKEK3FyM46olIBW8wl9YA==,type:str] + gkeConfig.clusterName: + text: test-cluster +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1gxwmtwahzwdmrskhf90ppwlnze30lgpm056kuesrxzeuyclrwvpsupwtpk + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6d2M5VGZ1Tjhhai90OVBE + K3B1b2ZETldIbjhnbXl2Q1FSU2ROYVUzY1FvCnVyYmtOOGZ0T3ZmTmJRcXZxYjho + SzZGWUlMdXZVVXg1STZJeStudjRQazAKLS0tIFdPeDc0SUU4bk5XdVJXcGRCb2c1 + Ni8vY1dCV3UzVkcxWE1CdTVsclVnTVUK1fH9kbr2H75zTCjvTTYr8jN8bF0YrQ9f + ZiSDkc+kgj/WrwFyXX6nbF3eU5wM0EYsD2dVqrrSWKUKz4egrRpS6Q== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2021-08-16T22:01:37Z" + mac: ENC[AES256_GCM,data:Izl+ILzP05dVZ5LcW1NcYyxl/jY+MWurMc277GSy/lrpBlKNJe5pSP0u1b0Ib1g4SX2p/gkXMtUp2gTCM/f6rgpN9prPLJMr/MREj/VVwPuDiLZzr5aPNYHJ19lDMkO5QvFXM6KDVixEs1HUHm/wSSIfO8h/Gk32S6Hp4mjq5+o=,iv:n6p4dXIE4GJ82ty0/XH11H+i44FA/DE1zRsw/fmUJFk=,tag:KWdZNRDh5kutW9tGoc5sJg==,type:str] + pgp: [] + encrypted_suffix: secret + version: 3.7.1 diff --git a/docs/learn/tests/kube-gcp/deployment/config.cue b/docs/learn/tests/kube-gcp/deployment/config.cue new file mode 100644 index 00000000..844b77f3 --- /dev/null +++ b/docs/learn/tests/kube-gcp/deployment/config.cue @@ -0,0 +1,25 @@ +package main + +import ( + "alpha.dagger.io/gcp" + "alpha.dagger.io/gcp/gcr" + "alpha.dagger.io/gcp/gke" +) + +// Value created for generic reference of `kubeconfig` in `todoapp.cue` +kubeconfig: gkeConfig.kubeconfig + +// gcpConfig used for Google connection +gcpConfig: gcp.#Config + +// gkeConfig used for deployment +gkeConfig: gke.#KubeConfig & { + // config field references `gkeConfig` value to set in once + config: gcpConfig +} + +// gcrCreds used for remote image push +gcrCreds: gcr.#Credentials & { + // config field references `gcpConfig` value to set in once + config: gcpConfig +} diff --git a/docs/learn/tests/kube-gcp/deployment/input.cue b/docs/learn/tests/kube-gcp/deployment/input.cue new file mode 100644 index 00000000..fa993210 --- /dev/null +++ b/docs/learn/tests/kube-gcp/deployment/input.cue @@ -0,0 +1,19 @@ +package main + +import ( + "alpha.dagger.io/git" +) + +manifest: git.#Repository & { + remote: "https://github.com/dagger/examples.git" + ref: "main" + subdir: "todoapp/k8s" +} + +repository: git.#Repository & { + remote: "https://github.com/dagger/examples.git" + ref: "main" + subdir: "todoapp" +} + +registry: "gcr.io/dagger-ci/test" diff --git a/docs/learn/tests/kube-gcp/deployment/test/test.cue b/docs/learn/tests/kube-gcp/deployment/test/test.cue new file mode 100644 index 00000000..82f2fb40 --- /dev/null +++ b/docs/learn/tests/kube-gcp/deployment/test/test.cue @@ -0,0 +1,66 @@ +package main + +import ( + "alpha.dagger.io/dagger/op" + "alpha.dagger.io/kubernetes" +) + +TestEks: { + #_GetDeployment: """ + kubectl describe deployment todoapp | grep 'True' + """ + + #_DeleteDeployment: """ + kubectl delete deployment todoapp + kubectl delete service todoapp-service + """ + + #up: [ + op.#Load & { + from: kubernetes.#Kubectl + }, + + op.#WriteFile & { + dest: "/kubeconfig" + content: todoApp.kubeSrc.kubeconfig + }, + + op.#WriteFile & { + dest: "/getPods.sh" + content: #_GetDeployment + }, + + op.#WriteFile & { + dest: "/deletePods.sh" + content: #_DeleteDeployment + }, + + // Get pods + op.#Exec & { + always: true + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "/getPods.sh", + ] + env: KUBECONFIG: "/kubeconfig" + }, + + // Delete pods + op.#Exec & { + always: true + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "/deletePods.sh", + ] + env: KUBECONFIG: "/kubeconfig" + }, + ] +} diff --git a/docs/learn/tests/kube-gcp/deployment/todoapp.cue b/docs/learn/tests/kube-gcp/deployment/todoapp.cue new file mode 100644 index 00000000..795cd91e --- /dev/null +++ b/docs/learn/tests/kube-gcp/deployment/todoapp.cue @@ -0,0 +1,61 @@ +package main + +import ( + "encoding/yaml" + + "alpha.dagger.io/dagger" + "alpha.dagger.io/docker" + "alpha.dagger.io/kubernetes" + "alpha.dagger.io/kubernetes/kustomize" +) + +// input: source code repository, must contain a Dockerfile +// set with `dagger input dir repository . -e kube` +repository: dagger.#Artifact & dagger.#Input + +// GCR registry to push images to +registry: string & dagger.#Input +tag: "test-gcr" + +// source of Kube config file. +// set with `dagger input dir manifest ./k8s -e kube` +manifest: dagger.#Artifact & dagger.#Input + +// Declarative name +todoApp: { + // Build an image from the project repository + image: docker.#Build & { + source: repository + } + + // Push the image to a remote registry + remoteImage: docker.#Push & { + target: "\(registry):\(tag)" + source: image + auth: { + username: gcrCreds.username + secret: gcrCreds.secret + } + } + + // Update the image of the deployment to the deployed image + kustomization: kustomize.#Kustomize & { + source: manifest + + // Convert CUE to YAML. + kustomization: yaml.Marshal({ + resources: ["deployment.yaml", "service.yaml"] + + images: [{ + name: "public.ecr.aws/j7f8d3t2/todoapp" + newName: remoteImage.ref + }] + }) + } + + // Value created for generic reference of `kubeconfig` in `todoapp.cue` + kubeSrc: kubernetes.#Resources & { + "kubeconfig": kubeconfig + source: kustomization + } +}