【问题标题】:Failure condition for free space check in AnsibleAnsible 中可用空间检查的失败条件
【发布时间】:2022-07-29 12:10:48
【问题描述】:

正在编写剧本以更新我们运行的 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 导出的数据类型在字典中。问题是我在比较两种不相似的数据类型吗?

【问题讨论】:

  • 您遇到了什么问题:条件的行为与您预期的不一样,还是您遇到了某种错误?

标签: ansible ansible-facts cisco-ios


【解决方案1】:

简答:从 firmware_image_size

中删除引号
firmware_image_size: 41555

详细信息:documentation 只是告诉我们 ansible_net_filesystems_info 是一个字典。从code我们可以看出属性spacetotal_kb是一个整数。问题是您将 firmware_image_size 声明为字符串

firmware_image_size: "41555"

当您将字符串与整数进行比较时

when: ansible_net_filesystems_info[flash:]['spacefree_kb'] > firmware_image_size

你一定已经看到条件失败了:

fatal: ... ''>'' 在 ''int'' 和 ''AnsibleUnicode'' 的实例之间不支持


完整的测试手册示例

- 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

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多