如何为此编写可重用的bash脚本?

  • 本文关键字:bash 脚本 bash kubernetes
  • 更新时间 :
  • 英文 :


由于minikube问题13841和13872(我认为是相同的),我必须使用minikube1.23.2。我尝试使用minikube start --kubernetes-version v...版本1.24+,但没有工作(不知道为什么)。因此,我不能使用方便的命令kubectl -n ... create token ...。Seba对这个问题的回答显示了如何使用这个较旧的kubectl版本生成令牌:

$ export secret=$(kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}')
$ kubectl get secret $secret -o jsonpath='{.data.token}' | base64 --decode

显然,该命令只适用于业务帐户default。我如何重写该脚本,使其可以用于其他用户如下?

$ export my_script=....
$ my_script another_account

如果我猜对了你想问的问题,

#!/bin/sh
secret=$(kubectl get serviceaccount "${1-default}" -o jsonpath='{.secrets[0].name}')
kubectl get secret "$secret" -o jsonpath='{.data.token}' | base64 --decode

默认为serviceaccount default,但如果您这样做,则使用传入的任何参数作为第一个命令行参数。

如果您将其保存为ktoken,chmod +x文件,并确保它所在的目录在PATH上(可能带有符号链接),您可以运行

ktoken

default帐户运行它,

ktoken otheraccount

otheraccount运行。

其实,没有必要export一个变量,除非你需要子进程访问它。

检查完这个问题后,我可以看到这样做的一种方法是创建一个get_token.sh文件,其中包含以下内容:

#!/bin/bash
user_account=$1
function get_token() {
secret=$(kubectl get serviceaccount "$1" -o jsonpath='{.secrets[0].name}')
kubectl get secret "$secret" -o jsonpath='{.data.token}' | base64 --decode
}
get_token $user_account

然后我可以从终端调用:

$ bash get_token.sh another_account

另一种不涉及bash脚本文件的方法是定义get_token函数然后使用它:

$ function get_token() { secret=$(kubectl get serviceaccount "$1" -o jsonpath='{.secrets[0].name}') &&  kubectl get secret "$secret" -o jsonpath='{.data.token}' | base64 --decode; }
$ get_token another_account

不确定是否有其他或更好的方法。

相关内容

  • 没有找到相关文章

最新更新