Ansible 调试消息到变量
Posted
技术标签:
【中文标题】Ansible 调试消息到变量【英文标题】:Ansible Debug msg to variable 【发布时间】:2020-07-09 12:37:07 【问题描述】:伙计们,
我有下面的脚本,用于在我的 Linux 机器上创建所有块设备的列表,这些块设备上没有分区,然后运行 parted 模块对它们进行分区。 我正在尝试将 item.key 的值保存到一个变量中,该变量以后可以由 parted 模块使用。 任何帮助,我怎样才能将 msg 的值保存到 var 中。
- name: Print disk result
become: true
debug:
msg: "/dev/item.key"
when:
- not item.value.partitions
- item.value.model == "VBOX HARDDISK"
with_dict: " ansible_devices "
【问题讨论】:
【参考方案1】:没有“将调试消息保存到变量”之类的东西,只有“使用与 msg 相同的语法创建变量”。此外,debug:
和 become: true
是一种荒谬的事态
- name: set vbox device fact
set_fact:
vbox_device_path: /dev/ item.key
when:
- not item.value.partitions
- item.value.model == 'VBOX HARDDISK'
with_dict: ' ansible_devices '
- debug:
var: vbox_device_path
【讨论】:
【参考方案2】: # Assuming what your 'ansible_devices' looks like
vars:
ansible_devices:
# model is valid, partitions are empty
device_a:
model: VBOX HARDDISK
partitions: []
# model is valid, partitions are not empty
device_b:
model: VBOX HARDDISK
partitions:
- 1_partition
- 2_partition
# model is not valid, partitions are empty
device_c:
model: BEATBOX HARDDISK
partitions:
- 1_partition
- 2_partition
tasks:
- name: Make the variable with devices with no partitions
# Create a variable using set_fact
# Use json_query to filter and assign without explicitly looping ansible_devices
set_fact:
no_partition_list: " ansible_devices | dict2items | json_query('[?(value.model==`VBOX HARDDISK`)]|[?!(value.partitions)]') "
- debug:
var: no_partition_list
我在做什么?
将字典转换为数组 对转换后的数组应用 json 查询 过滤 value.model 等于所需的模型名称 然后,使用 | 管道传输结果 然后,应用另一个过滤器来查找哪些对象没有“value.partitions” value.partitions 如果不为空则返回 true !(value.partitions) 如果为空则返回 true 打印变量 no_partition_list 的值【讨论】:
以上是关于Ansible 调试消息到变量的主要内容,如果未能解决你的问题,请参考以下文章