Add test for kube-gcp cue-manifest step
Signed-off-by: Tom Chauveau <tom.chauveau@epitech.eu>
This commit is contained in:
parent
1830b34e13
commit
4d03638911
@ -594,52 +594,7 @@ values={[
|
||||
</TabItem>
|
||||
<TabItem value="gke">
|
||||
|
||||
```cue title="todoapp/kube/todoapp.cue"
|
||||
package main
|
||||
|
||||
import (
|
||||
"alpha.dagger.io/dagger"
|
||||
"alpha.dagger.io/docker"
|
||||
"alpha.dagger.io/kubernetes"
|
||||
)
|
||||
|
||||
// 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"
|
||||
|
||||
// Todoapp deployment pipeline
|
||||
todoApp: {
|
||||
// Build the image from repositoru artifact
|
||||
image: docker.#Build & {
|
||||
source: repository
|
||||
}
|
||||
|
||||
// Push image to registry
|
||||
remoteImage: docker.#Push & {
|
||||
target: "\(registry):\(tag)"
|
||||
source: image
|
||||
auth: {
|
||||
username: gcrCreds.username
|
||||
secret: gcrCreds.secret
|
||||
}
|
||||
}
|
||||
|
||||
// Generate deployment manifest
|
||||
deployment: #AppManifest & {
|
||||
name: "todoapp"
|
||||
image: remoteImage.ref
|
||||
}
|
||||
|
||||
// Deploy the customized manifest to a kubernetes cluster
|
||||
kubeSrc: kubernetes.#Resources & {
|
||||
"kubeconfig": kubeconfig
|
||||
manifest: deployment.manifest
|
||||
}
|
||||
}
|
||||
```cue file=tests/kube-gcp/cue-manifest/todoapp.cue title="todoapp/kube/todoapp.cue"
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
2
docs/learn/tests/.dagger/env/kube-gcp-cue-manifest/.gitignore
vendored
Normal file
2
docs/learn/tests/.dagger/env/kube-gcp-cue-manifest/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# dagger state
|
||||
state/**
|
32
docs/learn/tests/.dagger/env/kube-gcp-cue-manifest/values.yaml
vendored
Normal file
32
docs/learn/tests/.dagger/env/kube-gcp-cue-manifest/values.yaml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
plan:
|
||||
package: ./kube-gcp/cue-manifest/test
|
||||
name: kube-gcp-cue-manifest
|
||||
inputs:
|
||||
gcpConfig.project:
|
||||
text: dagger-ci
|
||||
gcpConfig.region:
|
||||
text: us-west2-a
|
||||
gcpConfig.serviceKey:
|
||||
secret: ENC[AES256_GCM,data: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,iv:uGLdGFprxBx2JX4GXdJlwiikOxarEX3zzJnuiF3jtV8=,tag:aZIAWTfjgDBCAKDDGXVHZw==,type:str]
|
||||
gkeConfig.clusterName:
|
||||
text: test-cluster
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1gxwmtwahzwdmrskhf90ppwlnze30lgpm056kuesrxzeuyclrwvpsupwtpk
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2TWhqdVQ4Si9CQU5mRmQy
|
||||
SEpCM0l6UGsydkM1SlFIREZmSTh5YmtuT1cwClN5eUJlNGkyS29jYmlEMWhYTDZK
|
||||
NzdLeitIL0Erdm1IVHAxSitQWWRDOG8KLS0tIGNFa1JEclJNWEQ2SHVlbW5lY3kw
|
||||
enc0b29RU2xKMWFoWFVqcnJ4S3NOKzQK6coqwcUNfO/D3OFcEnVHqjZTUFv9zJPr
|
||||
OT4sQCfYA4tJWL6Xm8aDiWKr91GqURo4aTpZnwzlWIrIrTTs25IQig==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2021-08-16T22:09:04Z"
|
||||
mac: ENC[AES256_GCM,data:kXzvMaEEy9vJneQU9FlRGBzwP73aJhhyIu/axCu36ee84pYuHYEXkJB6Irh/1kYyDDwj+m3k3ySszlkQfa5+Lhy7U+sKb7KFJKmy2rYJekBIjTnYyPNeM1M0mG52pKwbUTElZ9Wo3z4vDkSrjfYxsgYM2cSvEKgoiC4M5VhzXjM=,iv:WNar5O7/+Vwh0+S8tcTKNbloUUpB+79QJEyrVJVeGsc=,tag:iAwTMUidHmTv+TNJxt0BBg==,type:str]
|
||||
pgp: []
|
||||
encrypted_suffix: secret
|
||||
version: 3.7.1
|
25
docs/learn/tests/kube-gcp/cue-manifest/config.cue
Normal file
25
docs/learn/tests/kube-gcp/cue-manifest/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
|
||||
}
|
43
docs/learn/tests/kube-gcp/cue-manifest/deployment.cue
Normal file
43
docs/learn/tests/kube-gcp/cue-manifest/deployment.cue
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
// Deployment template containing all the common boilerplate shared by
|
||||
// deployments of this application.
|
||||
#Deployment: {
|
||||
// Name of the deployment. This will be used to label resources automatically
|
||||
// and generate selectors.
|
||||
name: string
|
||||
|
||||
// Container image.
|
||||
image: string
|
||||
|
||||
// 80 is the default port.
|
||||
port: *80 | int
|
||||
|
||||
// 1 is the default, but we allow any number.
|
||||
replicas: *1 | int
|
||||
|
||||
// Deployment manifest. Uses the name, image, port and replicas above to
|
||||
// generate the resource manifest.
|
||||
manifest: {
|
||||
apiVersion: "apps/v1"
|
||||
kind: "Deployment"
|
||||
metadata: {
|
||||
"name": name
|
||||
labels: app: name
|
||||
}
|
||||
spec: {
|
||||
"replicas": replicas
|
||||
selector: matchLabels: app: name
|
||||
template: {
|
||||
metadata: labels: app: name
|
||||
spec: containers: [{
|
||||
"name": name
|
||||
"image": image
|
||||
ports: [{
|
||||
containerPort: port
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
19
docs/learn/tests/kube-gcp/cue-manifest/input.cue
Normal file
19
docs/learn/tests/kube-gcp/cue-manifest/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"
|
29
docs/learn/tests/kube-gcp/cue-manifest/manifest.cue
Normal file
29
docs/learn/tests/kube-gcp/cue-manifest/manifest.cue
Normal file
@ -0,0 +1,29 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/yaml"
|
||||
)
|
||||
|
||||
// Define and generate kubernetes deployment to deploy to kubernetes cluster
|
||||
#AppManifest: {
|
||||
// Name of the application
|
||||
name: string
|
||||
|
||||
// Image to deploy to
|
||||
image: string
|
||||
|
||||
// Define a kubernetes deployment object
|
||||
deployment: #Deployment & {
|
||||
"name": name
|
||||
"image": image
|
||||
}
|
||||
|
||||
// Define a kubernetes service object
|
||||
service: #Service & {
|
||||
"name": name
|
||||
ports: http: deployment.port
|
||||
}
|
||||
|
||||
// Merge definitions and convert them back from CUE to YAML
|
||||
manifest: yaml.MarshalStream([deployment.manifest, service.manifest])
|
||||
}
|
36
docs/learn/tests/kube-gcp/cue-manifest/service.cue
Normal file
36
docs/learn/tests/kube-gcp/cue-manifest/service.cue
Normal file
@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
// Service template containing all the common boilerplate shared by
|
||||
// services of this application.
|
||||
#Service: {
|
||||
// Name of the service. This will be used to label resources automatically
|
||||
// and generate selector.
|
||||
name: string
|
||||
|
||||
// NodePort is the default service type.
|
||||
type: *"NodePort" | "LoadBalancer" | "ClusterIP" | "ExternalName"
|
||||
|
||||
// Ports where the service should listen
|
||||
ports: [string]: number
|
||||
|
||||
// Service manifest. Uses the name, type and ports above to
|
||||
// generate the resource manifest.
|
||||
manifest: {
|
||||
apiVersion: "v1"
|
||||
kind: "Service"
|
||||
metadata: {
|
||||
"name": "\(name)-service"
|
||||
labels: app: name
|
||||
}
|
||||
spec: {
|
||||
"type": type
|
||||
"ports": [
|
||||
for k, v in ports {
|
||||
name: k
|
||||
port: v
|
||||
},
|
||||
]
|
||||
selector: app: name
|
||||
}
|
||||
}
|
||||
}
|
66
docs/learn/tests/kube-gcp/cue-manifest/test/test.cue
Normal file
66
docs/learn/tests/kube-gcp/cue-manifest/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"
|
||||
},
|
||||
]
|
||||
}
|
45
docs/learn/tests/kube-gcp/cue-manifest/todoapp.cue
Normal file
45
docs/learn/tests/kube-gcp/cue-manifest/todoapp.cue
Normal file
@ -0,0 +1,45 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"alpha.dagger.io/dagger"
|
||||
"alpha.dagger.io/docker"
|
||||
"alpha.dagger.io/kubernetes"
|
||||
)
|
||||
|
||||
// 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"
|
||||
|
||||
// Todoapp deployment pipeline
|
||||
todoApp: {
|
||||
// Build the image from repositoru artifact
|
||||
image: docker.#Build & {
|
||||
source: repository
|
||||
}
|
||||
|
||||
// Push image to registry
|
||||
remoteImage: docker.#Push & {
|
||||
target: "\(registry):\(tag)"
|
||||
source: image
|
||||
auth: {
|
||||
username: gcrCreds.username
|
||||
secret: gcrCreds.secret
|
||||
}
|
||||
}
|
||||
|
||||
// Generate deployment manifest
|
||||
deployment: #AppManifest & {
|
||||
name: "todoapp"
|
||||
image: remoteImage.ref
|
||||
}
|
||||
|
||||
// Deploy the customized manifest to a kubernetes cluster
|
||||
kubeSrc: kubernetes.#Resources & {
|
||||
"kubeconfig": kubeconfig
|
||||
manifest: deployment.manifest
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user