使用以下命令:kubectl -n ns create secret generic test2 --from-literal=username=xxxxxx
我可以创建秘密。我想找到一种(以编程方式)使用列表而不是使用literal=username=xxxxxx 的方法,因为有时我需要多个文字。
我尝试的是以下内容:
NS=test-ns
SF=secrets.yaml
unset SECRET_NAMES
value+=(username)
value+=(password)
echo "" > $SF
for value in "${value[@]}"
do
kubectl -n ${NS} create secret generic test2 \
--from-literal=$value=xxxxxx \
-o yaml >${NS}-$secret_name.yaml
done
cat $SF
但它失败了,因为它首先创建了用户名,然后它无法创建密码,因为秘密 test2 已经存在。你知道我该如何解决这个问题吗?
答案 0 :(得分:2)
您可以根据需要多次重复 --from-literal
标志:
$ kubectl create secret generic test2 --from-literal=username=xxxxxx --from-literal=username2=xxxxxx
secret/test2 created
$ kubectl get secrets test2 -oyaml
apiVersion: v1
type: Opaque
kind: Secret
metadata:
name: test2
data:
username: eHh4eHh4
username2: eHh4eHh4
答案 1 :(得分:0)
解决您对@whites11 回答的评论,引用如下:
<块引用>是的,但这在我的情况下不起作用。问题是我创建了一个 jenkins 工作并且参数化了,我不知道每个用户会创建多少文字。
首先,您必须确定您希望用户如何在 Jenkin 作业参数中指定文字,例如使用“=”符号:
username=user1
password=p@ssword
realm=app
timezone=pdt
假设作业多行字符串参数作为 $SECRETS
传递给作业脚本。以下是对文字进行循环并构造所需的 kubectl
命令的方法:
ARGS=()
while read LINE
do
if [[ "${LINE}" != *"="* ]]; then continue; fi
ARGS+=( "--from-literal=${LINE%%=*}=${LINE#*=}" )
done <<< "$SECRETS"
既然您在 kubectl create configmap
数组变量中有 ARGS
命令的参数,您可以像下面这样使用它:
NS=test-ns
kubectl -n ${NS} create secret generic test2 "${ARGS[@]}"