已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
2天前关闭。
这篇文章是编辑和提交审查2天前。
Improve this question
在gitlab-ci.yml文件中,我有一个bash脚本。该脚本调用一个带有输入参数1-16-0
的函数changeNSLabel
。然后changeNSLabel函数将有一个for循环,该循环在命名空间上迭代。此kubectl命令应该只生成istio注入的命名空间的名称,如下所示
kubectl get namespace -Listio.io/rev | awk 'NF==4' | awk -F" {2,}" '{print $1}' | tail -n +2)
--------------
Namespace-A
Namespace-B
Namespace-C
但问题是,我在for循环中使用awk时使用的$1像这样空了,最终打印了所有列
kubectl get namespace -Listio.io/rev | awk 'NF==4' | awk -F" {2,}" '{print }' | tail -n +2
-------------------
Namespace-A Active 6d14h 1-15-3
Namespace-B Active 6h22m 1-15-3
Namespace-C Active 6d14h 1-15-3
如果我在本地运行相同的脚本,它可以正常工作。
function test(){
changeNSLabel "1-16-0"
}
function changeNSLabel(){
local revision=$1
echo "#####Fetch all the namespaces with istio-injected enabled #####"
for ns in $(kubectl get ns -Listio.io/rev | awk 'NF==4' | awk -F" {2,}" '{print $1}' | tail -n +2);
do
kubectl label namespace ${ns} istio-injection- istio.io/rev=$revision --overwrite
done
}
这个问题我只在我通过gitlab pipeline运行我的脚本时遇到。但是如果我运行相同的脚本
1条答案
按热度按时间vuv7lop31#
这并不是您所要求的,但一个更有成效的解决方案可能是利用
kubectl
输出JSON的能力,并使用JSONPath来操作它。或者,结果以空格分隔:
或者,使用
--output=name
并去掉前缀namespace/
:或者,如果您更喜欢使用jq这样的独立JSON处理器:
awk
很棒,但是,利用这样一个事实会更容易,即您(可以)将结构化数据(JSON)作为起点,而不是试图从文本中重新创建结构。