我正在使用 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
实际上,我本来希望看到一些可以处理的文件示例,但代码本身强化了我的假设。
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