Usando o shell (bash) para determinar a chave do valor do arquivo

1

Estou programando a implantação de alguns aplicativos e implantar processos de promoção usando o bash (shell). Esses scripts estão sendo escritos como seguros contra falhas, caso nossa plataforma de CI falhe novamente (como aconteceu recentemente).

Nesse processo, cada aplicativo tem um arquivo de texto com pares de valores de chave, em que a chave é o nome da região de implantação (dev, qa, prod)… e o valor é um hash associado ao (s) arquivo (s) implantável (s). / p>

Estou lutando para determinar a melhor abordagem para reconhecer a chave, em vez de coletar o valor apenas da origem do arquivo ... mas, ao fazer o sourcing do arquivo e compará-los manualmente para cada região de implantação, parece que tem que ser o caminho mais longo rodada.

RECAP  1. Eu tenho o valor (sha1sum), mas preciso da (s) chave (s) a que pertence  2. Determinar chave no par de valores-chave do arquivo  3. Determine a região de implantação mais alta com o valor associado (ou seja, várias regiões podem ter o mesmo valor listado, a probabilidade aumenta à medida que subimos na cadeia).

Alguma sugestão?

EDIT 1 Aqui é onde o código necessário viveria:

###################################################################################################
# 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

Veja a aparência do arquivo de valor-chave:

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

EDIT 2 Adicionado extra exemplo de valores sha1sum ao arquivo de valor-chave de exemplo para mostrar como o mesmo valor pode existir para várias chaves.

    
por Chris Giddings 13.02.2016 / 22:35

1 resposta

2

Na verdade, eu gostaria de ver algum exemplo do arquivo para trabalhar, mas o código em si fortaleceu minha suposição.

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

Aqui nós apenas passamos o hash para o awk e pedimos que ele dividisse as linhas em sinais de igual. Se o valor após o sinal for o hash, imprimimos o valor antes do sinal, esperamos que a região. Então você pode ou não classificar esses valores de acordo com suas necessidades.

Se quisermos ver todas as chaves para um hash, podemos usar isso:

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

Se apenas a última chave para um hash no arquivo for interessante, esse código ganha:

awk -F' *= *' -v hash="$hash" '$2 == hash { key=$1}; END { print key}' your.manifest
    
por 13.02.2016 / 23:13