我试图弄清楚如何只获取特定的var,并在嵌套/复杂的var中获取其值
我的角色角色是 default / main.yml
disk_additional_disks:
- disk: "/dev/sdb"
fstype: xfs
mount_options: rw,nodev,noatime,nobarrier,inode64
mount: "{{ gp_data_mount_point }}"
vgname: "{{gp_lvm_vg_name }}"
- disk: "/dev/sdc"
fstype: xfs
mount_options: rw,nodev,noatime,nobarrier,inode64
mount: "{{ gp_data_mount_point }}"
vgname: "{{gp_lvm_vg_name }}"
- disk: "/dev/sdd"
fstype: xfs
mount_options: rw,nodev,noatime,nobarrier,inode64
mount: "{{ gp_data_mount_point }}"
vgname: "{{gp_lvm_vg_name }}"
我正在尝试仅获取disk
,/dev/sdb
,/dev/sdc
的值{p}
并创建了一本可打印成一行的剧本
/dev/sdd
假设输出为:
- name: Show disk
debug:
msg: "{{ item| json_query('[].disk') }}"
with_items: "{{ disk_additional_disks }}"
或
'/dev/sdb','/dev/sdd','/dev/sdc'
有人在帮助我,因为我真的很难解决这个问题。
我也研究过类似的问题,但我想使用剧本来实现
答案 0 :(得分:0)
您可以查看有关嵌套变量循环here的相关文档。
角色默认情况下不会向剧本公开默认变量。您可以查看以下线程以获取更多信息:thread1,thread2
@VladimirBotka指出,您可以通过将const comperator = (search, filter) => filter._id === search._id && filter.name === search.name;
const myData$ = combineLatest(search$, filter$).pipe(
map(([search, filter]) => intersectionWith(search, filter, comperator))
);
参数与public: true
一起使用来公开它们。
但是,如果您想对其进行硬编码,则可以使用include_role
将它们明确包含在您的剧本中。这是documentation。
include_vars
答案 1 :(得分:0)
使用 map
或 json_query
。以下两个任务给出相同的结果
- debug:
msg: "{{ disk_additional_disks|
map(attribute='disk')|
list }}"
- debug:
msg: "{{ disk_additional_disks|
json_query('[].disk') }}"
(json_query需要安装JMESPATH)。