我正在尝试遍历kubernetes命名空间,以便可以打印出每个命名空间中每个入口的ip地址。
这是很奇怪的地方。在我的shell中运行命令可以运行,但是无法运行脚本。
基本上,NAMESPACES=( $( echo $NAMESPACES ) )
仅在从脚本运行时抓取输出中的第一项,而从我的shell运行时则抓取输出的每一行。因此,当for循环运行时,它只会迭代一项。
我在Mac上。
谁能确定我应该如何遍历名称空间列?我在脚本之后列出输出。谢谢!
#!/bin/bash
# gcloud container clusters get-credentials $CLUSTER --zone $ZONE --project $PROJECT
# get just the column of namespace output
NAMESPACES=$(kubectl get namespace | awk '{print $1}' | tail -n +2)
# transpose the column into an array
NAMESPACES=( $( echo $NAMESPACES ) )
echo
echo "Printing out feature branch deployments and corresponding ip addresses:"
echo
for ns in $NAMESPACES
do
# check if feature is in the namespace
if [[ $ns == "feature-"* ]]
then
IP_ADDRESS=$(kubectl get ingress --namespace $ns | grep $ns | awk '{print $3}')
echo $ns 'ip address:' $IP_ADDRESS
fi
done
这是$ NAMESPACES的样子
$ echo $NAMESPACES
chartmuseum
default
feature-1
feature-2
feature-3
feature-4
feature-5
kube-public
kube-system
qa
twistlock
# here's what $NAMESPACES looks like after it's transposed into the array
# this is what is iterated over in the for loop
$ echo $NAMESPACES
chartmuseum
default feature-1 feature-2 feature-3 feature-4 feature-5 kube-public kube-system qa twistlock
编辑-这是答案:只需注释掉NAMESPACES=( $( echo $NAMESPACES ) )
,脚本就可以工作。谢谢@bigdataolddriver
答案 0 :(得分:0)
尝试使用以下语法引用数组:
for ns in "${NAMESPACES[@]}"
do
done