我正在写一本用于多个交换机的ios升级的剧本,除了无闪存检查外,大多数作品都可以使用。基本上,我想在复制图像之前检查是否有足够的可用闪存空间。
我尝试使用“收集事实”模块,但无法按我期望的那样工作:
从收集的事实中我看到了:
"ansible_net_filesystems_info": {
"flash:": {
"spacefree_kb": 37492,
"spacetotal_kb": 56574
这是我想做的支票:
fail:
msg: 'This device does not have enough flash memory to proceed.'
when: "ansible_net_filesystems_info | json_query('*.spacefree_kb')|int < new_ios_filesize|int"
通过一些研究,我了解到jinja2模板返回的任何值都将是字符串,因此我的检查失败了:
Pass integer variable to task without losing the integer type
即使使用ansible 2.7,链接中建议的解决方案似乎也不适合我。
然后我求助于将'dir'的结果存储在寄存器中,并尝试使用regex_search,但似乎语法不正确。
(类似于: Ansible regex_findall multiple strings)
"stdout_lines": [
[
"Directory of flash:/",
"",
" 2 -rwx 785 Jul 2 2019 15:39:05 +00:00 dhcp-snooping.db",
" 3 -rwx 1944 Jul 28 2018 20:05:20 +00:00 vlan.dat",
" 4 -rwx 3096 Jul 2 2019 01:03:26 +00:00 multiple-fs",
" 5 -rwx 1915 Jul 2 2019 01:03:26 +00:00 private-config.text",
" 7 -rwx 35800 Jul 2 2019 01:03:25 +00:00 config.text",
" 8 drwx 512 Apr 25 2015 00:03:16 +00:00 c2960s-universalk9-mz.150-2.SE7",
" 622 drwx 512 Apr 25 2015 00:03:17 +00:00 dc_profile_dir",
"",
"57931776 bytes total (38391808 bytes free)"
]
]
任何人都可以对这个看似简单的任务提供一些见识吗?我只想从上面的示例(或任何其他建议)中将“ 38391808”作为整数。我对ansible相当陌生。
谢谢。
答案 0 :(得分:0)
json_query wildcard expressions返回一个列表。以下任务
<Button onClick={e => getHeight(e.target)}>Top</Button>
getHeight = (button) => {
console.log(button.offsetTop);
}
提供列表
- set_fact:
free_space: "{{ ansible_net_filesystems_info|
json_query('*.spacefree_kb') }}"
- debug:
var: free_space
,它既不能转换为整数,也不能与整数进行比较。这就是问题的原因。
解决方案很简单。只需取列表的第一个元素,条件就会开始起作用
"free_space": [
37492
]
此外,不需要json_query。可以直接引用属性 spacefree_kb
- fail:
msg: 'This device does not have enough flash memory to proceed.'
when: ansible_net_filesystems_info|
json_query('*.spacefree_kb')|
first|
int < new_ios_filesize|int