[Azure] 使用 JMESPath 在 Azure CLI 的輸出中,過濾出符合多重條件的結果

[Azure] 使用 JMESPath 在 Azure CLI 的輸出中,過濾出符合多重條件的結果

今天想從 Azure Key Vault 裡面,取出所有的 secret 的名稱,

於是執行了下面的 CLI:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[].name" -o yaml
- Jerry
- enc-Jerry
- Jerry-env-data
- Andy
- Fred
- Fred-env-data
- enc-Fred
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[].name" -o yaml - Jerry - enc-Jerry - Jerry-env-data - Andy - Fred - Fred-env-data - enc-Fred
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[].name" -o yaml

- Jerry
- enc-Jerry
- Jerry-env-data
- Andy
- Fred
- Fred-env-data
- enc-Fred

 

這上面的查詢裡面, 

[].name
[].name 是所謂的 JMESPath

讓我們可以選擇 Json 陣列裡每個元素的 name。

只是我原本預期它輸出的只有 Jerry, Andy, Fred 這些名稱,

因為其他的都是我們把這些人的資料也存在 Key Vault 裡面使用的,

要怎麼過濾掉那些包含 enc- 或 env- 的名稱呢?

 

試了一下,可以用下面的方式來完成:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[?!contains(name, 'enc-')]|[?!contains(name, 'env-')].name" -o yaml
- Jerry
- Andy
- Fred
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[?!contains(name, 'enc-')]|[?!contains(name, 'env-')].name" -o yaml - Jerry - Andy - Fred
$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[?!contains(name, 'enc-')]|[?!contains(name, 'env-')].name" -o yaml

- Jerry
- Andy
- Fred

 

上面使用了  

|
| 將符合條件的資料再往後傳,

第一個條件先過濾出 name 中不包含 enc- 這個字的,

第二個條件再過濾出 name 中不包含 env- 這個字的,

因此最後剩下的就是我們要的部分囉~

 

參考資料:shell – How to handle JMESPath contains filter on attribute that may be null?

(本頁面已被瀏覽過 85 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料