Как получить значение в файле с Bash - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь прочитать значение в файле yaml из сценария bash

Вот так выглядит мой yaml

apiVersion: v1
data:
  consul-write: 100
kind: Secret

Мне нужно получить значение consul-write. (в данном случае это 100)

Как получить это значение, используя bash

, эта команда выводит вышеупомянутый yaml

kubectl get secrets consul-write -n test -o yaml

Это что я пытался Может кто-нибудь помочь мне?

NAMESPACE=$1
TOKEN_NAME=$2

KUBE_GET=$(kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml)

echo $KUBE_GET

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Используйте awk, чтобы выбрать поле 2 в строке, соответствующей TOKEN_NAME

 kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml | awk -vns=$TOKEN_NAME '$1 ~ ns {print $2}'

EDIT: фиксированная переменная и многострочный вывод.

0 голосов
/ 06 апреля 2020

Я предлагаю использовать yq . Пожалуйста, проверьте его документ для подробностей установки.
После того, как вы установили yq, вы можете поместить следующую команду в командной строке:

# yq r your_yaml_file 'data."consul-write"'

Если это сработало, поместите его в bash файл.

0 голосов
/ 06 апреля 2020

Попробуйте:

NAMESPACE="$1"
TOKEN_NAME="$2"

KUBE_GET=$(kubectl get secrets "$TOKEN_NAME" -n "$NAMESPACE" -o yaml)

grep "$TOKEN_NAME" <<< "$KUBE_GET" | sed 's/.*: \(.*\)$/\1/'

Объяснение:

Здесь будет найдена первая строка, содержащая данное имя токена:

grep "$TOKEN_NAME" <<< "$KUBE_GET"

Это найдет строку «:» в строке, найденной grep, а затем вернет остаток строки после этой строки:

sed 's/.*: \(.*\)$/\1/'
...