我有一个字符串列表以及与每个字符串关联的日期。我想按日期对列表进行排序并选取最新的字符串。
这是代码:
- debug: msg="{{ sort_list }}"
- debug: msg="{{_latest.snap_name }}"
loop: "{{ sort_list }}"
vars:
_latest: "{{ item | sort(attribute='date')|last }}"
Run Code Online (Sandbox Code Playgroud)
输出是:
ok: [localhost] => {
"msg": [
{
"date": "20220602020004",
"snap_name": "aaa-bbb-ccc-data-sb-20220602020004"
},
{
"date": "20220603020004",
"snap_name": "aaa-bbb-ccc-data-sb-20220603020004"
},
{
"date": "20220604020004",
"snap_name": "aaa-bbb-ccc-data-sb-20220604020004"
}
]
}
TASK [debug] *****************************************************
Sunday 05 June 2022 18:22:30 +0000 (0:00:00.055) 0:00:04.777 ***********
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: {{ item | sort(attribute='date')|last }}: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'date'\n\nThe error appears to be in '/home/philip.shangguan/code/devops/google/ansible/test-scripts/philip/prodcopy/a.yml': line 128, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug: msg=\"{{_latest.snap_name }}\"\n ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n with_items:\n - {{ foo }}\n\nShould be written as:\n\n with_items:\n - \"{{ foo }}\"\n"}
Run Code Online (Sandbox Code Playgroud)
第一次调试给出了列表。然后我想选取zzz-wag-chicken-data-sb-20220604020004具有最新的字符串date。
我的代码中第二个缺少/错误是什么debug?
sort当您想要做的只是将列表传递给 时,您将循环整个列表,然后将单个项目传递给sort。
- debug:
msg: "{{ _latest.snap_name }}"
vars:
_latest: "{{ sort_list | sort(attribute='date') | last }}"
Run Code Online (Sandbox Code Playgroud)
您也可以在没有中间变量的情况下执行此操作:
- debug:
msg: "{{ (sort_list | sort(attribute='date') | last).snap_name }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |