Files
clean-architecture-backend-…/infra/redis-lab/lib/render-kubeconfig.awk
T

195 lines
5.1 KiB
Awk

BEGIN {
state = "start"
invalid = 0
output_count = 0
if (target != "ca-redis-lab") {
invalid = 1
}
}
function remember(line) {
output[++output_count] = line
}
function is_credential_line(line, prefix, value) {
if (index(line, prefix) != 1) {
return 0
}
value = substr(line, length(prefix) + 1)
return value ~ /^[A-Za-z0-9+\/=_-]+$/
}
function is_namespace_line(line, value) {
if (index(line, " namespace: ") != 1) {
return 0
}
value = substr(line, length(" namespace: ") + 1)
return value ~ /^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/
}
{
if (invalid) {
next
}
if (index($0, "\t") != 0 || index($0, "\r") != 0 ||
$0 ~ /^[[:space:]]*(---|\.\.\.)([[:space:]]|$)/) {
invalid = 1
next
}
if ($0 != "preferences: {}" &&
(index($0, "{") != 0 || index($0, "}") != 0 ||
index($0, "[") != 0 || index($0, "]") != 0)) {
invalid = 1
next
}
if (state == "start" && $0 == "apiVersion: v1") {
api_version_count += 1
state = "apiVersion"
remember($0)
next
}
if (state == "apiVersion" && $0 == "clusters:") {
clusters_count += 1
state = "clusters"
remember($0)
next
}
if (state == "clusters" && $0 == "- cluster:") {
cluster_item_count += 1
state = "cluster-item"
remember($0)
next
}
if (state == "cluster-item" &&
is_credential_line($0, " certificate-authority-data: ")) {
ca_data_count += 1
state = "ca-data"
remember($0)
next
}
if (state == "ca-data" &&
$0 == " server: https://127.0.0.1:6443") {
server_count += 1
state = "server"
remember(" server: https://" address ":6443")
next
}
if (state == "server" && $0 == " name: default") {
cluster_name_count += 1
state = "cluster-name"
remember(" name: " target)
next
}
if (state == "cluster-name" && $0 == "contexts:") {
contexts_count += 1
state = "contexts"
remember($0)
next
}
if (state == "contexts" && $0 == "- context:") {
context_item_count += 1
state = "context-item"
remember($0)
next
}
if (state == "context-item" && $0 == " cluster: default") {
context_cluster_count += 1
state = "context-cluster"
remember(" cluster: " target)
next
}
if (state == "context-cluster" && is_namespace_line($0)) {
namespace_count += 1
state = "optional-namespace"
remember($0)
next
}
if ((state == "context-cluster" || state == "optional-namespace") &&
$0 == " user: default") {
context_user_count += 1
state = "context-user"
remember(" user: " target)
next
}
if (state == "context-user" && $0 == " name: default") {
context_name_count += 1
state = "context-name"
remember(" name: " target)
next
}
if (state == "context-name" && $0 == "current-context: default") {
current_context_count += 1
state = "current-context"
remember("current-context: " target)
next
}
if (state == "current-context" && $0 == "kind: Config") {
kind_count += 1
state = "kind"
remember($0)
next
}
if (state == "kind" && $0 == "preferences: {}") {
preferences_count += 1
state = "preferences"
remember($0)
next
}
if (state == "preferences" && $0 == "users:") {
users_count += 1
state = "users"
remember($0)
next
}
if (state == "users" && $0 == "- name: default") {
user_name_count += 1
state = "user-name"
remember("- name: " target)
next
}
if (state == "user-name" && $0 == " user:") {
user_body_count += 1
state = "user-body"
remember($0)
next
}
if (state == "user-body" &&
is_credential_line($0, " client-certificate-data: ")) {
client_cert_count += 1
state = "client-cert"
remember($0)
next
}
if (state == "client-cert" &&
is_credential_line($0, " client-key-data: ")) {
client_key_count += 1
state = "client-key"
remember($0)
next
}
invalid = 1
}
END {
if (invalid || state != "client-key" ||
api_version_count != 1 || clusters_count != 1 ||
cluster_item_count != 1 || ca_data_count != 1 ||
server_count != 1 || cluster_name_count != 1 ||
contexts_count != 1 || context_item_count != 1 ||
context_cluster_count != 1 || namespace_count > 1 ||
context_user_count != 1 || context_name_count != 1 ||
current_context_count != 1 || kind_count != 1 ||
preferences_count != 1 || users_count != 1 ||
user_name_count != 1 || user_body_count != 1 ||
client_cert_count != 1 || client_key_count != 1) {
exit 1
}
for (line_number = 1; line_number <= output_count; line_number += 1) {
print output[line_number]
}
}