❕ Приглашаем на урок по работе с чувствительными данными в Kubernetes-кластере!
⏺ Открытый урок «K8S + Vault — как получать секреты?»
Бесплатно 17 июня в 20:00 МСК.
Поймете, как организовать безопасное и масштабируемое взаимодействие между Kubernetes и HashiCorp Vault. Разберём подход dynamic secrets и инструмент External Secrets Operator для интеграции секретов из Vault в кластер.
На уроке вы узнаете:
- как Kubernetes работает с секретами по умолчанию и его ограничения;
- способы интеграции Kubernetes и Vault;
- что такое External Secrets Operator и почему его выбирают для production-сред;
- пошаговую схему подключения Vault к K8s.
➡️ Регистрация на вебинар
Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes», ты можешь воспользоваться 🎁 бонусным промокодом Kuber_06 при покупке курса.
#реклама
О рекламодателе
⏺ Открытый урок «K8S + Vault — как получать секреты?»
Бесплатно 17 июня в 20:00 МСК.
Поймете, как организовать безопасное и масштабируемое взаимодействие между Kubernetes и HashiCorp Vault. Разберём подход dynamic secrets и инструмент External Secrets Operator для интеграции секретов из Vault в кластер.
На уроке вы узнаете:
- как Kubernetes работает с секретами по умолчанию и его ограничения;
- способы интеграции Kubernetes и Vault;
- что такое External Secrets Operator и почему его выбирают для production-сред;
- пошаговую схему подключения Vault к K8s.
➡️ Регистрация на вебинар
Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes», ты можешь воспользоваться 🎁 бонусным промокодом Kuber_06 при покупке курса.
#реклама
О рекламодателе
getopts
— это встроенный в любой POSIX-совместимый Linux/Unix-shell мини-парсер аргументов. Один shebang — и у вас CLI-утилита без единой внешней зависимости. В статье рассмотрим, как выжать из getopts
максимум, где он спотыкается и когда пора переехать на getopt
или Argbash.--long-option
. Но и это решаемо.#!/usr/bin/env sh
set -euo pipefail
IFS='
'
usage() {
cat <<EOF
Usage: ${0##*/} [-a] [-b ARG] file...
-a : включить дополнительный режим
-b ARG : передать аргумент
EOF
exit 2
}
# двоеточие в начале → тихий режим ошибок
while getopts ":ab:" opt; do
case "$opt" in
a) flag_a=true ;;
b) param_b=$OPTARG ;;
:) echo "Опция -$OPTARG требует аргумента" >&2; usage ;;
\?) echo "Неизвестная опция -$OPTARG" >&2; usage ;;
esac
done
shift "$((OPTIND-1))" # убираем уже разобранные параметры
optstring
переводит парсер в «silent mode» — ошибки по argv
приходится ловить самостоятельно, зато можно отдать лайтовый help
, а не cryptic usage
из недр шелла. Про необходимость shift "$((OPTIND-1))"
задокументировано даже в posix man-pages — так убираем из $@
опции и получаем чистый список позиционных аргументов.getopts
умеет распаковывать слипшиеся флаги: -abc
интерпретируется как -a -b -c
. Если после символа ожидается аргумент, разбор прекращается ровно там:# optstring="a:b"
$ my.sh -ac # OK: -a, -c как позиционка
$ my.sh -abx # -a, -b x
$ my.sh -ab # ошибка: -b ждёт аргумент
Edge-case
— отрицательные числа (-5)
внезапно принимаются за флаг. Начинайте список ожидаемых опций с --
, тогда getopts
прекратит работу при виде первого не-флага, и минусы в числах останутся нетронутыми.Частый прием: сначала через
case "$1"
ловим варианты --help
, --version
, --long=value
, а затем отдаём остаток в getopts
— так не ломаем POSIX-совместимость и не тащим GNU getopt.while [ $# -gt 0 ]; do
case "$1" in
--help) usage ;;
--output=*) opt_o=${1#*=}; shift ;;
--) shift; break ;; # двойное тире — конец опций
-*) break ;; # короткие опции разберет getopts
*) break ;;
esac
done
# теперь классический getopts
while getopts ":o:f:" opt; do
...
done
shift "$((OPTIND-1))"
--verbose/-v
, или вообще YAML-конфиг после --config=path.yml
.Please open Telegram to view this post
VIEW IN TELEGRAM