Команды openshift для программного определения имени POD / скриптинга - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть стручки в моей открытой смене, и я хочу работать с несколькими приложениями открытой смены. Допустим, как показано ниже

sh -4.2 $ o c get pods

NAME                                  READY     STATUS      RESTARTS   AGE
jenkins-7fb689fc66-fs2xb              1/1       Running     0          4d
jenkins-disk-check-1587834000         0/1       Completed   0          21h

NAME                                 READY     STATUS    RESTARTS   AGE
jenkins-7fb689fc66-gsz9j              0/1       Running   735        9d
jenkins-disk-check-1587834000    

NAME                                READY     STATUS    RESTARTS   AGE
jenkins-9euygc66-gsz9j               0/1       Running   735        9d

Я пробовал с приведенной ниже командой

o c get pods

export POD=$(oc get pods | awk '{print $1}' | grep jenkins*)

Я хочу найти модули, начинающиеся с цифр "jenkins-7fb689fc66-fs2xb", jenkins-9euygc66-gsz9j, et c ... с использованием сценариев и необходимости игнорировать блоки проверки диска. Если я ловлю вышеупомянутые стручки и должен выполнить терминал и выполнить некоторые команды оболочки программно. Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

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

Предполагая, что вам нужно напечатать идентификатор jenkins в первом поле, не могли бы вы попробовать следующее:

awk 'match($0,/jenkins[^ ]*/){print substr($0,RSTART,RLENGTH)}' Input_file

Объяснение: Добавление пояснения к приведенному выше коду.

awk '                                ##Starting awk program from here.
match($0,/jenkins[^ ]*/){            ##Using match function in which mentioning regex jenkins till spacein current line.
  print substr($0,RSTART,RLENGTH)    ##Printing sub-string in current line where starting point is RSTART till RLENGTH value.
}
' Input_file                         ##Mentioning Input_file name here.
0 голосов
/ 26 апреля 2020

kubectl get (и, соответственно, oc get) - универсальный инструмент очень . К сожалению, посмотрев некоторое время онлайн, вы определенно не сможете выполнять регулярные выражения, не полагаясь на внешний инструмент, такой как awk или grep. (Я знаю, что это не было точно , о чем вы просили, но я решил, что по крайней мере попытаюсь выяснить, возможно ли это.

С учетом сказанного, есть несколько хитростей вы можете положиться на фильтрацию выходных данных oc get, прежде чем вам даже понадобятся внешние инструменты (бонусные баллы, потому что эта фильтрация происходит на сервере еще до того, как она попадает в ваши локальные инструменты).

I first рекомендуем запускать oc get pods --show-labels, потому что, если нужные вам ярлыки помечены соответствующим образом, вы можете использовать селектор меток, чтобы получить только те желаемые капсулы, например:

oc get pods --selector name=jenkins
oc get pods --selector <label_key>=<label_value>

Second , если вы заботитесь только о Running модулях (поскольку блоки disk-check выглядят так, как будто они уже Completed), вы можете использовать селектор полей, например:

oc get pods --field-selector status.phase=Running
oc get pods --field-selector <json_path>=<json_value>

Наконец , если вам нужно значение speci c, вы можете вставить это значение в CLI, указав пользовательские столбцы, а затем grep, указав нужное вам значение о, например:

oc get pods -o custom-columns=NAME:.metadata.name,TYPES:.status.conditions[*].type | grep "Ready"

Лучше всего, если вы полагаетесь на ярлык лектор и / или селектор полей, фильтрация выполняется на стороне сервера, чтобы сократить объем данных, которые в итоге попадают в конечные пользовательские столбцы, что делает все это намного более эффективным.


Для вашего Если задан c вариант использования, кажется, что достаточно просто использовать --field-selector, поскольку блоки disk-check уже Completed. Таким образом, без дополнительной информации о точно , как устроен модуль Дженкинса JSON, этого должно быть достаточно для вас:

oc get pods --field-selector status.phase=Running
...