From 97cd00332ab2d8196c546bc758b7f3bb40a2b274 Mon Sep 17 00:00:00 2001 From: Tom Chauveau Date: Mon, 6 Sep 2021 15:17:38 +0200 Subject: [PATCH] Improve kubernetes package to handle deployment from url When I was working on ArgoCD test integration, I found that to expose ArgoCD server, we need to add `ingress` to expose an endpoint. To do it with Kind, it's necessary to apply a custom yaml available on Github. It simply then need `kubectl apply -f ` Signed-off-by: Tom Chauveau --- stdlib/kubernetes/kubernetes.cue | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/stdlib/kubernetes/kubernetes.cue b/stdlib/kubernetes/kubernetes.cue index f98838ab..3c1699d2 100644 --- a/stdlib/kubernetes/kubernetes.cue +++ b/stdlib/kubernetes/kubernetes.cue @@ -11,7 +11,7 @@ import ( #Kubectl: { // Kubectl version - version: *"v1.19.9" | string + version: dagger.#Input & {*"v1.19.9" | string} #code: #""" [ -e /usr/local/bin/kubectl ] || { @@ -50,23 +50,35 @@ import ( #Resources: { // Kubernetes config to deploy - source?: dagger.#Artifact @dagger(input) + source: dagger.#Input & {*null | dagger.#Artifact} // Kubernetes manifest to deploy inlined in a string - manifest?: string @dagger(input) + manifest: dagger.#Input & {*null | string} + + // Kubernetes manifest url to deploy remote configuration + url: dagger.#Input & {*null | string} // Kubernetes Namespace to deploy to - namespace: *"default" | string @dagger(input) + namespace: dagger.#Input & {*"default" | string} // Version of kubectl client - version: *"v1.19.9" | string @dagger(input) + version: dagger.#Input & {*"v1.19.9" | string} // Kube config file - kubeconfig: string @dagger(input) + kubeconfig: dagger.#Input & {string} #code: #""" kubectl create namespace "$KUBE_NAMESPACE" > /dev/null 2>&1 || true - kubectl --namespace "$KUBE_NAMESPACE" apply -R -f /source + + if [ -d /source ] || [ -f /source ]; then + kubectl --namespace "$KUBE_NAMESPACE" apply -R -f /source + exit 0 + fi + + if [ -n "$DEPLOYMENT_URL" ]; then + kubectl --namespace "$KUBE_NAMESPACE" apply -R -f "$DEPLOYMENT_URL" + exit 0 + fi """# #up: [ @@ -82,7 +94,7 @@ import ( content: kubeconfig mode: 0o600 }, - if manifest != _|_ { + if manifest != null { op.#WriteFile & { dest: "/source" content: manifest @@ -101,8 +113,11 @@ import ( env: { KUBECONFIG: "/kubeconfig" KUBE_NAMESPACE: namespace + if url != null { + DEPLOYMENT_URL: url + } } - if manifest == _|_ { + if manifest == null && source != null { mount: "/source": from: source } },