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] } }