Temos muitos racks de servidores de três tipos. Um tipo é nosso cluster de armazenamento usando weka. Todos os nomes de host começam com weka. Os outros dois são nós de computação e GPU. Ambos começam com uma string comum. O próximo é 'r' seguido pelo número do rack. Para os nós de cálculo, um '-c' seguido pelo número do nó de cálculo nesse rack. Ambos os tipos são seguidos por um '-n' seguido pelo número do nó no rack. Sou uma chamada de API para weka que traz de volta todos os três tipos. Quero poder filtrar com base no tipo. Consigo obter os nós weka e de computação, mas não consigo obter os nós GPU. Eu tenho:
# for Weka nodes:
curl --insecure --silent --header "authorization: Bearer ${ATKN}" --request GET https://weka01:14000/api/v2/processes | jq -r '.data[] | select(.hostname | startswith("weka"))'
#
# for compute nodes:
curl --insecure --silent --header "authorization: Bearer ${ATKN}" --request GET https://weka01:14000/api/v2/processes | jq -r '.data[] | select(.hostname | startswith("startstring") and contains("-c"))"
Para os nós da GPU, tentei:
curl --insecure --silent --header "authorization: Bearer ${ATKN}" --request GET https://weka01:14000/api/v2/processes | jq -r '.data[] | select(.hostname | startswith("startstring") and contains("-c")|not)'
o que me dá os nós GPU e weka. Alguém sabe o que estou fazendo de errado? Apenas para esclarecimento, os nomes de host dos nós da GPU são semelhantes a:
startstring-r1-n3
Os nomes de host dos nós de computação são semelhantes a:
startstring-r2-c17-n2
Operador precedente:
Sem os parênteses, o filtro seria analisado como: