我在一組服務器上有一個 json 檔案(/tmp/lst_instalaciones_wordpress.json)。此 json 包含有關某些 Wordpress 安裝的資訊(域、路徑、版本...)
{
"id": 1,
"name": "My blog",
"version": "5.9.1",
"fullPath": "/var/www/vhosts/myblog"
}
{
"id": 2,
"name": "My blog2",
"version": "5.9.2",
"fullPath": "/var/www/vhosts/myblog2"
}
{
"id": 3,
"name": "My blog3",
"version": "5.7.6",
"fullPath": "/var/www/vhosts/myblog3"
}
{
"id": 4,
"name": "My blog4",
"version": "5.9.2",
"fullPath": "/var/www/vhosts/myblog4"
}
我在一個變數中啜飲它:
- slurp:
src: /tmp/lst_instalaciones_wordpress.json
register: fichero_json
- set_fact:
lst_versiones: "{{ fichero_json.content | b64decode | from_json}}"
我有一個所有版本的串列,我需要列印每個版本的安裝量。
all_vers:
- 5.7.6
- 5.9.1
- 5.9.2
我正在嘗試這樣的不同選項,但沒有任何效果:
- set_fact:
all_installs_vers: "{{ lst_versiones | json_query('[?version==`'{{item}}'`].version') | length }}"
with_items: "{{all_vers}}"
uj5u.com熱心網友回復:
給定固定的 YAML
shell> cat tmp/lst_instalaciones_wordpress.yml
---
[
{
"id": 1,
"name": "My blog",
"version": "5.9.1",
"fullPath": "/var/www/vhosts/myblog"
},
{
"id": 2,
"name": "My blog2",
"version": "5.9.2",
"fullPath": "/var/www/vhosts/myblog2"
},
{
"id": 3,
"name": "My blog3",
"version": "5.7.6",
"fullPath": "/var/www/vhosts/myblog3"
},
{
"id": 4,
"name": "My blog4",
"version": "5.9.2",
"fullPath": "/var/www/vhosts/myblog4"
}
]
讀取檔案并解碼串列
- slurp:
src: tmp/lst_instalaciones_wordpress.yml
register: fichero_json
- set_fact:
lst_versiones: "{{ fichero_json.content|b64decode|from_yaml }}"
給
lst_versiones:
- fullPath: /var/www/vhosts/myblog
id: 1
name: My blog
version: 5.9.1
- fullPath: /var/www/vhosts/myblog2
id: 2
name: My blog2
version: 5.9.2
- fullPath: /var/www/vhosts/myblog3
id: 3
name: My blog3
version: 5.7.6
- fullPath: /var/www/vhosts/myblog4
id: 4
name: My blog4
version: 5.9.2
然后,給定版本串列
all_vers:
- 5.7.6
- 5.9.1
- 5.9.2
迭代串列,選擇版本,計算專案并組合字典
- set_fact:
all_installs_vers: "{{ all_installs_vers|d({})|
combine({item: _val|int}) }}"
loop: "{{ all_vers }}"
vars:
_val: "{{ lst_versiones|selectattr('version', 'eq', item)|length }}"
給
all_installs_vers:
5.7.6: 1
5.9.1: 1
5.9.2: 2
uj5u.com熱心網友回復:
只需一步的另一種解決方案
- set_fact:
versions: "{{ versions | d({}) | combine({ item.version: nbversion }) }}"
loop: '{{ lst_versiones }}'
vars:
nbversion: >-
{{ (versions[item.version] | int 1) if versions[item.version] is defined
else (1 | int) }}
如果您除錯版本,結果:
ok: [localhost] => {
"msg": {
"5.7.6": "1",
"5.9.1": "1",
"5.9.2": "2"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448554.html
下一篇:使用Jolt的串列轉換串列
