Tôi đã tạo đoạn mã sau, vì vậy bạn có thể sử dụng nó làm trình bao bọc. Bạn có thể đặt tên cho kịch bản bất cứ điều gì bạn muốn. Ví dụ loại trừ_ns_removal
#!/usr/bin/env bash
chết ()
{
tiếng vang "$@" 1>&2
thoát 1
}
cách sử dụng ()
{
tiếng vang "cách sử dụng: $0 [-h] [-v namespace_to_ignore] " 1>&2
thoát 0
}
inarray ()
{
cục bộ n=$1 h
sự thay đổi
cho h trong "$@"
làm
[[ $n = "$h" ]] && quay lại
xong
trả lại 1
}
trong khi getopts ":v:h" opt; làm
trường hợp $chọn tham gia
h)
cách sử dụng
;;
v)
trường hợp $OPTARG trong
'' | *[0-9]*)
chết "Chữ số không được phép $OPTARG"
;;
*)
val=$OPTARG
;;
thoát hiểm
;;
:)
chết "đối số cần thiết để -$OPTARG"
;;
*)
chết "công tắc không hợp lệ -$OPTARG"
;;
thoát hiểm
xong
thay đổi $((OPTIND - 1))
trong khi IFS='/' read -r _ ns; làm
a+=("$ns")
xong < <(kubectl get namespaces --no-headers -o name)
nếu inarray "$val" "${a[@]}"; sau đó
bỏ đặt 'a'
{
trong khi IFS='/' read -r _ ns; làm
a+=("$ns")
cho tôi trong "${!a[@]}"
làm
nếu [[ ${a[i]} == $val ]]; sau đó
bỏ đặt 'a[i]'
fi
xong
xong
} < <(kubectl get namespaces --no-headers -o name)
printf '%s\n\n' "Không bao gồm ... $val"
cho không gian tên trong "${a[@]}"
làm
printf 'Đang xóa ... %s\n' "$namespace"
xong
khác
chết "Không tìm thấy không gian tên"
fi
Làm cho tập lệnh có thể thực thi được:
chmod u+x loại trừ_ns_removal
Chạy nó như sau:
./exclude_ns_removal -v kube-system
Kết quả sẽ là một cái gì đó như:
Không bao gồm ... hệ thống kube
Đang xóa ... hệ thống ứng dụng
Đang xóa ... hệ thống db
Nếu đầu ra có vẻ tốt, bạn nên sửa đổi dòng này
printf 'Đang xóa ... %s\n' "$namespace"
đến
kubectl xóa không gian tên "$namespace"