我有一個字典,我用它來做簡單的算術運算。這很好,但是當我列印結果時,我只得到最后一個鍵值對的結果,而不是所有的結果。
謝謝。
- hosts: localhost
gather_facts: false
vars:
dict1: [{x: 1, y: 2},{x: 3, y: 4},{x: 5, y: 6}]
tasks:
- set_fact:
percentage: "{{ item.x / item.y * 100}}"
with_items: "{{dict1}}"
>ok: [localhost] => (item={'x': 1, 'y': 2}) => {
"ansible_facts": {
"percentage": "50.0"
},
"ansible_loop_var": "item",
"changed": false,
"item": {
"x": 1,
"y": 2
}
}
>ok: [localhost] => (item={'x': 3, 'y': 4}) => {
"ansible_facts": {
"percentage": "75.0"
},
"ansible_loop_var": "item",
"changed": false,
"item": {
"x": 3,
"y": 4
}
}
>ok: [localhost] => (item={'x': 5, 'y': 6}) => {
"ansible_facts": {
"percentage": "83.33333333333334"
},
"ansible_loop_var": "item",
"changed": false,
"item": {
"x": 5,
"y": 6
}
}
我列印時的結果:
debug:
msg: "{{ percentage }}"
這只是最后一個值:
好的:[本地主機] => {“味精”:“83.33333333333334”}
更新(帶暫存器):
- name: Show percentage
debug:
msg: "{{ item.x / item.y * 100}}"
with_items: "{{ dict1 }}"
register: percentage
- name: Show result
debug:
var: percentage # dict
- name: Show result
debug:
var: percentage.results # list
結果(不僅有結果,還有專案、回圈和其他我不需要的資訊):
>ok: [localhost] => {
"percentage.results": [
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"item": {
"x": 1,
"y": 2
},
"msg": "50.0"
},
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"item": {
"x": 3,
"y": 4
},
"msg": "75.0"
},
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"item": {
"x": 5,
"y": 6
},
"msg": "83.33333333333334"
}
]
}
uj5u.com熱心網友回復:
使用 Jinja 創建串列。例如,
percentage: |
[
{% for i in dict1 %}
{{ i.x / i.y }},
{% endfor %}
]
給
percentage:
- 0.5
- 0.75
- 0.8333333333333334
用于測驗的完整劇本示例
- hosts: localhost
vars:
dict1: [{x: 1, y: 2},{x: 3, y: 4},{x: 5, y: 6}]
percentage: |
[
{% for i in dict1 %}
{{ i.x / i.y }},
{% endfor %}
]
tasks:
- debug:
var: percentage|type_debug
- debug:
var: percentage
uj5u.com熱心網友回復:
“我只得到最后一個鍵值對的結果,而不是所有的。 ”
這是所示set_fact回圈的預期行為,因為它正在注冊每個回圈運行新值。
您可以讓運行以下示例
- name: Show percentage
debug:
msg: "{{ item.x / item.y * 100}}"
with_items: "{{ dict1 }}"
register: percentage
- name: Show result
debug:
var: percentage # dict
熟悉注冊變數和回圈回傳的資料結構。
當您在帶有回圈的任務中注冊變數時,注冊的變數包含回圈中每個專案的值。回圈期間放置在變數中的資料結構將包含一個
results屬性,即來自模塊的所有回應的串列。
在第一次測驗和關于
是的,但我得到了我不需要的所有其他資訊,即 ansible_loop_var': 'item'}, {'ansible_facts' ... or failed': False, 'changed': False, 'item':.. I只需要一個帶有純結果的串列,沒有額外的資訊。
縮小范圍,您可以進一步運行
- name: Show result
debug:
var: percentage.results # list
導致輸出
ok: [localhost] =>
msg:
- ansible_loop_var: item
changed: false
failed: false
item:
x: 1
y: 2
msg: '50.0'
- ansible_loop_var: item
changed: false
failed: false
item:
x: 3
y: 4
msg: '75.0'
- ansible_loop_var: item
changed: false
failed: false
item:
x: 5
y: 6
msg: '83.3333333333'
這是創建結果串列的一種可能方法。
跟進
您似乎只希望獲得百分比結果。因此,有必要在串列上進一步作業以獲取msg元素的值。
一種非常簡單的方法,未提及進一步的資料處理
- name: Show result
debug:
msg: "{{ item.msg }}"
loop: "{{ percentage.results }}"
loop_control:
label: "{{ item.item }}"
將導致輸出
TASK [Show result] ****************************
ok: [localhost] => (item={u'y': 2, u'x': 1}) =>
msg: '50.0'
ok: [localhost] => (item={u'y': 4, u'x': 3}) =>
msg: '75.0'
ok: [localhost] => (item={u'y': 6, u'x': 5}) =>
msg: '83.3333333333'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511144.html
標籤:循环可靠的输出
上一篇:將串列轉換為小寫
