正在编写一个剧本来更新我们运行的Cisco交换机组,但我在使用一条特定的线路来验证堆栈上是否有足够的可用空间时遇到了问题。
在这里剪下剧本的相关部分。
---
- hosts: Cisco2960
vars:
- firmware_image_size: "41555"
tasks:
- name: Checking for available free space...
fail:
msg: "Insufficient free space on the stack. Please check the flash: directory."
when: ansible_net_filesystems_info[flash:]['spacefree_kb'] > firmware_image_size
我的想法是检查ios_facts模块的数据(在剧本的前面运行(,并将提取的值与显式定义的变量进行比较。
查看文档后,数据类型似乎是从ansible_net_filesystems_info导出的,它在字典中。问题是我在比较两种不同的数据类型吗?
Q:"我在比较两种不同的数据类型吗">
A: 是的。从firmware_image_size中删除引号
firmware_image_size: 41555
并修复括号符号
ansible_net_filesystems_info['flash:']['spacefree_kb']
详细信息:文档只是告诉我们ansible_net_filesystems_info是一本字典。从代码中我们可以看到属性spacetotal_kb是一个整数。问题是您将firmware_image_size声明为字符串
firmware_image_size: "41555"
如果将整数(固定括号表示法(与字符串进行比较
when: ansible_net_filesystems_info['flash:']['spacefree_kb'] > firmware_image_size
你会看到条件失败:
致命:…''>''在"t"one_answers"敏感Unicode"的实例之间不支持
测试的完整剧本示例
- hosts: localhost
vars:
ansible_net_filesystems_info:
'flash:':
spacefree_kb: 50000
firmware_image_size: 41555
tasks:
- assert:
that:
- ansible_net_filesystems_info['flash:'].spacefree_kb > firmware_image_size
fail_msg: Insufficient free space on the stack. Please check the 'flash:' directory.
给出(节略(
msg: All assertions passed