195 lines
5.1 KiB
Awk
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]
|
|
}
|
|
}
|