Add test for kube-gcp deployment step
Signed-off-by: Tom Chauveau <tom.chauveau@epitech.eu>
This commit is contained in:
parent
2a15682386
commit
1830b34e13
@ -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
|
- definition of a new `gcrCreds` value that contains ecr credentials for remote image push to GCR
|
||||||
|
|
||||||
```cue title="todoapp/kube/config.cue"
|
```cue file=tests/kube-gcp/deployment/config.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
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
`kube/todoapp.cue`, on the other hand, faces these changes:
|
`kube/todoapp.cue`, on the other hand, faces these changes:
|
||||||
@ -450,68 +425,7 @@ gcrCreds: gcr.#Credentials & {
|
|||||||
- `remoteImage`, push an image to the registry
|
- `remoteImage`, push an image to the registry
|
||||||
- `kustomization`, apply kustomization to image
|
- `kustomization`, apply kustomization to image
|
||||||
|
|
||||||
```cue title="todoapp/kube/todoapp.cue"
|
```cue file=tests/kube-gcp/deployment/todoapp.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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
2
docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore
vendored
Normal file
2
docs/learn/tests/.dagger/env/kube-gcp-deployment/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# dagger state
|
||||||
|
state/**
|
32
docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml
vendored
Normal file
32
docs/learn/tests/.dagger/env/kube-gcp-deployment/values.yaml
vendored
Normal file
@ -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: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,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
|
25
docs/learn/tests/kube-gcp/deployment/config.cue
Normal file
25
docs/learn/tests/kube-gcp/deployment/config.cue
Normal file
@ -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
|
||||||
|
}
|
19
docs/learn/tests/kube-gcp/deployment/input.cue
Normal file
19
docs/learn/tests/kube-gcp/deployment/input.cue
Normal file
@ -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"
|
66
docs/learn/tests/kube-gcp/deployment/test/test.cue
Normal file
66
docs/learn/tests/kube-gcp/deployment/test/test.cue
Normal file
@ -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"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
61
docs/learn/tests/kube-gcp/deployment/todoapp.cue
Normal file
61
docs/learn/tests/kube-gcp/deployment/todoapp.cue
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user