Initial version of the k0rdent toolset

Main changes:
* fixed init-workspace.sh to be executed on k0rdent
* fixed running of cfg-checker for nets and pings
* removed some openstack-related scripts
* created the Dockerfile docker-container-toolset-full

Related-PROD: K0RQA-15
Change-Id: Ib57a3b2a1d47e3a0f48951eb3def71839322a46d
diff --git a/k8s/workspace/functions.sh b/k8s/workspace/functions.sh
index e6c6a1a..a1f3f10 100644
--- a/k8s/workspace/functions.sh
+++ b/k8s/workspace/functions.sh
@@ -7,4 +7,92 @@
 
 update_latest_report_to() {
   cp "$1" "$(echo $1|sed s/20[0-9]\\{2\\}.*/latest.html/)"
-}
\ No newline at end of file
+}
+
+check_cluster_deployment_exists() {
+    local cluster_name="$1"
+    echo ""
+    echo "Checking if ClusterDeployment '$cluster_name' exists..."
+    if ! kubectl get cld -A -o name | grep -q "/$cluster_name$"; then
+        echo "Error: ClusterDeployment '$cluster_name' not found in any namespace"
+        return 1
+    fi
+    echo -e "ClusterDeployment '$cluster_name' found"
+    return 0
+}
+
+check_file_exists() {
+    local path="$1"
+    local desc="$2"
+    if [[ ! -f "$path" ]]; then
+        echo "Error: $desc file not found at $path"
+        return 1
+    fi
+}
+
+txt2html_net_ping_report() {
+    local in="$1"
+    local cluster_name="$2"
+    local out="$3"
+
+    [[ -z "$in" ]] && { echo "Usage: txt2html_net_ping_report <input.txt> [cluster_name] [output.html]"; return 2; }
+    [[ ! -f "$in" ]] && { echo "No such file: $in"; return 2; }
+
+    if [[ -z "$out" ]]; then
+        out="${in%.txt}.html"
+        [[ "$out" == "$in" ]] && out="$in.html"
+    fi
+    mkdir -p "$(dirname "$out")" || return 1
+
+    local ts
+    ts="$(get_timestamp)"
+    local cluster_esc_name="$cluster_name"
+    cluster_esc_name="${cluster_esc_name//&/&amp;}"
+    cluster_esc_name="${cluster_esc_name//</&lt;}"
+    cluster_esc_name="${cluster_esc_name//>/&gt;}"
+    local title="Network Ping Report"
+    [[ -n "$cluster_esc_name" ]] && title="Network Ping Report [$cluster_esc_name]"
+
+    {
+
+    cat <<EOF
+<!doctype html>
+<html lang="en"><head>
+<meta charset="utf-8">
+<title>$title</title>
+<style>
+  body { font:14px/1.45 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; margin:20px; }
+  .summary { font-weight:600; margin:0 0 8px; }
+  .net     { color:#0366d6; font-weight:600; }
+  .from    { color:#555; font-weight:600; display:block; margin-top: 18px; margin-bottom: -12px; }
+  .pass    { color:#1a7f37; font-weight:600; }
+  .fail    { color:#e53935; font-weight:600; }
+  pre      { background:#fafafa; border:1px solid #e5e5e5; padding:12px; overflow:auto; }
+</style>
+</head><body>
+<h2>$title</h2>
+<p style="color: gray; font-style: italic; font-size: 10px;">Generated at $ts</p>
+<pre>
+EOF
+
+    awk '
+    function esc(s){ gsub("&","&amp;",s); gsub("<","&lt;"); gsub(">","&gt;"); return s }
+    {
+      raw=$0
+      line=esc(raw)
+      gsub(/\+ PASS:/,"<span class=\"pass\">+ PASS:</span>",line)
+      gsub(/\- FAIL:/,"<span class=\"fail\">- FAIL:</span>",line)
+      if (raw ~ /^# Summary/) { print "<span class=\"summary\">" line "</span>"; next }
+      if (raw ~ /^--->/)      { print "<span class=\"net\">"     line "</span>";   next }
+      if (raw ~ /^=+/)        { print "<span class=\"from\">"    line "</span>";   next }
+      print line
+    }' "$in"
+
+    cat <<'EOF'
+</pre>
+</body></html>
+EOF
+    } > "$out"
+
+    echo "Done: $out"
+}