1

Я пишу сценарии развертывания некоторых приложений и развертывания процессов продвижения, используя bash (shell). Эти сценарии пишутся как отказоустойчивые на случай, если наша CI-платформа снова выйдет из строя (как это было недавно).

В этом процессе у каждого приложения есть текстовый файл с парами ключ-значение, где ключ - это имя области развертывания (dev, qa, prod)… и значение - это хэш, связанный с развертываемым файлом (-ами).

Я изо всех сил пытаюсь определить, как лучше всего подходить к распознаванию ключа, а не к получению значения из простого извлечения файла в… но извлечение файла и последующее ручное сравнение значений для каждой области развертывания кажется слишком сложным.

РЕКАП 1. У меня есть значение (sha1sum), но мне нужен ключ (и), он принадлежит 2. Определите ключ в паре ключ-значение из файла 3. Определите область наивысшего развертывания с соответствующим значением (т. Е. Несколько регионов могут иметь одно и то же значение в списке, вероятность возрастает, когда мы поднимаемся по цепочке.)

Какие-либо предложения?

РЕДАКТИРОВАТЬ 1 Вот где будет жить необходимый код:

###################################################################################################
# IS THIS HASH CURRENTLY DEPLOYED SOMEWHERE ELSE? IF SO, WHERE?
###################################################################################################
grep "${deployHash}" "${deployHashHome}/${deployAppName}/${deployAppName}.manifest"
if [[ "$?" -eq 0 ]]
then
    source ${deployHashHome}/${deployAppName}/${deployAppName}.manifest


    previousDeployRegion=""
    # logThis is a custom logging function which formats logs exactly how we want, we have a Splunk parser for the format
    logThis "${scriptLogDir}/${deployLogFile}" "The hash: ${deployHash}, has been previously deployed to ${previousDeployRegion}." "INFO"
fi

Вот как выглядит файл значения ключа:

mylocal=ca9c244aa1b40f39fd06318f2be9fbc1a82c5c5c
dev=986b747d846555f8c5e393a5cfbbd061ee9d68a7
int=53b8fa87f2241a17623ead2f94032b1d2045069e
reg=53b8fa87f2241a17623ead2f94032b1d2045069e
stage=
prod=
dr=

РЕДАКТИРОВАТЬ 2 Добавлен дополнительный пример значений sha1sum в пример файла значения ключа, чтобы показать, как одно и то же значение может существовать для нескольких ключей.

1 ответ1

2

На самом деле, мне бы хотелось увидеть пример файла для работы, но сам код подтвердил мои предположения.

hash="blablabla"
awk -F' *= *' -v hash="$hash" '$2 == hash { print $1 }' your.manifest | sort ...

Здесь мы просто передаем хеш в awk и просим его разбить строки на знаки равенства. Если значение после знака является хешем, мы выводим значение перед знаком, мы надеемся, регион. Тогда вы можете или не можете сортировать эти значения в соответствии с вашими потребностями.

Если мы хотим увидеть все ключи для хэша, мы можем использовать это:

awk -F' *= *' -v hash="$hash" '$2 == hash { keys=(keys ? keys "," $1 : $1)}; END { print keys}' your.manifest

Если интересен только последний ключ для хэша в файле, этот код выигрывает:

awk -F' *= *' -v hash="$hash" '$2 == hash { key=$1}; END { print key}' your.manifest

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .