Home > OS >  How to write a re-usable bash script for this?
How to write a re-usable bash script for this?

Time:11-24

Due to minikube issues 13841 and 13872 (which I believe to be the same), I have to use minikube 1.23.2. I try using minikube start --kubernetes-version v... with version 1.24 but none works (not sure why). Thus, I cannot use the convenient command kubectl -n ... create token .... Seba's answer to this question shows how to generate the token with this older kubectl version:

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

Apparently, the command is only good for service account default. How can I rewrite that script so it can be used for other users as follows?

$ export my_script=....
$ my_script another_account

CodePudding user response:

If I'm guessing correctly what you are trying to ask,

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

which defaults to serviceaccount default but uses whatever you passed in as the first-command-line argument if you do.

If you save this as ktoken, chmod x the file, and make sure the directory it's in is on your PATH (perhaps with a symlink), you can run

ktoken

to run it for the default account, and

ktoken otheraccount

to run it for otheraccount.

Tangentially, there is no need to export a variable unless you need subprocesses to have access to it.

CodePudding user response:

After checking out this question, I can see one way to do this is creating a get_token.sh file with the following content:

#!/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

Then I can call from terminal:

$ bash get_token.sh another_account

Another way not involving a bash script file is to define the get_token function then use it:

$ 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

Not sure if there are other or better way of doing it.

  • Related