Ansible 如何从可解释的事实中选择匹配的行?
存在具有ansible_事实操作的ansible任务:Ansible 如何从可解释的事实中选择匹配的行?,ansible,Ansible,存在具有ansible_事实操作的ansible任务: - name: "Output facts" debug: msg: CPU_TYPE: "{{ansible_processor|select('match', '.*CPU.*')|list|unique}}" register: custom_result 如何从该阵列中选择包含CPU的线路: "CPU_TYPE": [ "0", "GenuineIntel",
- name: "Output facts"
debug:
msg:
CPU_TYPE: "{{ansible_processor|select('match', '.*CPU.*')|list|unique}}"
register: custom_result
如何从该阵列中选择包含CPU的线路:
"CPU_TYPE": [
"0",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"1",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"2",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"3",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"4",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"5",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"6",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
"7",
"GenuineIntel",
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz"
],
目前我得到了一个错误:
"CPU_TYPE": "<generator object select_or_reject at 0x7facb2065930>",
由此:
"CPU_TYPE": [
"Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz"
],
为此:
"CPU_TYPE": "Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz"
问:“我得到了错误:”
“CPU类型”:“
A:从所选项目创建列表
CPU_TYPE: "{{ ansible_processor|select('match', '.*CPU.*')|list }}"
例如,打印列表的第一个元素
- set_fact:
CPU_TYPE: "{{ ansible_processor|select('match', '.*CPU.*')|list }}"
- debug:
msg: "{{ CPU_TYPE[0] }}"
使用过滤器unique
仅在列表中保留唯一项。使用filterfirst
选择列表的第一项。比如说
- set_fact:
CPU_TYPE_FIRST: "{{ ansible_processor|
select('match', '.*CPU.*')|
list|
unique|
first }}"
谢谢,请回答如何从括号中获取值,如:“CPU类型”:“Intel(R)Core(TM)i7-8550U CPU@1.80GHz”谢谢,无法通过筛选器执行此操作。
first
筛选器可以选择第一项。我已经更新了答案。谢谢,但是这样做聪明吗:{{ansible_processor}select('match','.*CPU.')| list | unique | json_query('[0]')}
?在您的情况下,列表中的所有项都是相等的。结果将是一个仅包含一项的列表。在first
和json_查询('[0]')
中没有区别json\u查询
是一个值得回顾的强大工具。
- set_fact:
CPU_TYPE_FIRST: "{{ ansible_processor|
select('match', '.*CPU.*')|
list|
unique|
first }}"