Quellcode durchsuchen

update postrenderer for configmap manifest

Alexander Belanger vor 5 Jahren
Ursprung
Commit
0ed2985d7d

Datei-Diff unterdrückt, da er zu groß ist
+ 10376 - 1
dashboard/package-lock.json


+ 1 - 0
dashboard/package.json

@@ -29,6 +29,7 @@
     "d3-array": "^2.11.0",
     "d3-time-format": "^3.0.0",
     "dotenv": "^8.2.0",
+    "highlight.run": "^1.4.4",
     "ini": ">=1.3.6",
     "js-base64": "^3.6.0",
     "js-yaml": "^3.14.0",

+ 70 - 0
internal/helm/postrenderer.go

@@ -2,6 +2,7 @@ package helm
 
 import (
 	"bytes"
+	"fmt"
 	"io"
 	"net/url"
 	"regexp"
@@ -101,6 +102,74 @@ func (d *DockerSecretsPostRenderer) Run(
 		return renderedManifests, nil
 	}
 
+	// Check to see if the resources loaded into the postrenderer contain a configmap
+	// with a manifest that needs secrets generation as well. If this is the case, create and
+	// run another postrenderer for this specific manifest.
+	for i, res := range d.resources {
+		kindVal, hasKind := res["kind"]
+		if !hasKind {
+			continue
+		}
+
+		kind, ok := kindVal.(string)
+
+		if !ok {
+			continue
+		}
+
+		if kind == "ConfigMap" {
+			labelVal := getNestedResource(res, "metadata", "labels")
+
+			if labelVal == nil {
+				continue
+			}
+
+			porterLabelVal, exists := labelVal["getporter.dev/manifest"]
+
+			if !exists {
+				continue
+			}
+
+			if labelValStr, ok := porterLabelVal.(string); ok && labelValStr == "true" {
+				data := getNestedResource(res, "data")
+				manifestData, exists := data["manifest"]
+
+				if !exists {
+					continue
+				}
+
+				manifestDataStr, ok := manifestData.(string)
+
+				if !ok {
+					continue
+				}
+
+				dCopy := &DockerSecretsPostRenderer{
+					Cluster:    d.Cluster,
+					Repo:       d.Repo,
+					Agent:      d.Agent,
+					Namespace:  d.Namespace,
+					DOAuth:     d.DOAuth,
+					registries: d.registries,
+					podSpecs:   make([]resource, 0),
+					resources:  make([]resource, 0),
+				}
+
+				newData, err := dCopy.Run(bytes.NewBufferString(manifestDataStr))
+
+				if err != nil {
+					continue
+				}
+
+				data["manifest"] = string(newData.Bytes())
+
+				d.resources[i] = res
+
+				fmt.Println("RES IS", res, d.resources[i])
+			}
+		}
+	}
+
 	// create the necessary secrets
 	secrets, err := d.Agent.CreateImagePullSecrets(
 		d.Repo,
@@ -425,6 +494,7 @@ func getPodSpecFromResource(kind string, res resource) resource {
 
 func getNestedResource(res resource, keys ...string) resource {
 	curr := res
+
 	var ok bool
 
 	for _, key := range keys {

+ 14 - 5
services/job_sidecar_container/job_killer.sh

@@ -29,11 +29,12 @@ else
   target=$2
 fi  
 
+pattern="$(printf '[%s]%s' $(echo $target | cut -c 1) $(echo $target | cut -c 2-))"
+
 graceful_shutdown() {
     echo "starting graceful shutdown..."
 
     local timeout=$1
-    local pattern="$(printf '[%s]%s' $(echo $2 | cut -c 1) $(echo $2 | cut -c 2-))"
 
     echo "searching for process pattern: $pattern"
 
@@ -74,8 +75,16 @@ graceful_shutdown() {
 
 trap 'graceful_shutdown $grace_period_seconds $target' SIGTERM SIGINT SIGHUP
 
-echo "waiting for job kill signal..."
-sleep infinity &
-child=$!
+echo "waiting for job to start..."
+
+sleep 10
+
+target_pid_arr=$(ps x | grep -v './job_killer.sh' | grep "$pattern" | awk '{ printf "%d ", $1 }' | sort)
+target_pid=$target_pid_arr
+
+if [ -n "$target_pid" ]; then
+    tail --pid=$target_pid -f /dev/null &
+    child=$!
 
-wait "$child"
+    wait "$child"
+fi

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.