我有以下剧本,试图AssertNX-OS映像的用户提示变量等于从Nexus交换机捕获的ansible_net_image。这让我对测试条件的正确格式感到疯狂。
---
- name: Upgrade NX-OS on switch with pre-checks to load image as required
hosts: nexus-7000
gather_facts: no
vars_prompt:
- name: NX_OS_Upgrade_Version
prompt: "Please enter NX-OS version to upgrade too - ensure that the filename is as used by boot variable"
private: no
##############################################################################
## Start of task execution
##############################################################################
tasks:
- name: Gather IOS configuration and software facts from switches
nxos_facts:
gather_subset: "!hardware"
################################################################################
## Display running image version to terminal
################################################################################
- debug:
msg: "{{ NX_OS_Upgrade_Version }}"
- assert:
that:
- "ansible_net_image | regex:/^bootflash:\\/\\/\\/(.*) == NX_OS_Upgrade_Version"
执行时显示此错误。
fatal:[switcha]:失败!=〉{“msg”:“条件检查'ansible_net_image|regex:/^bootflash:///(.)== NX_OS_Upgrade_Version'失败。错误为:模板化字符串时模板错误:应为标记“语句块结束”,得到“/”。字符串:{% if ansible_net_image|regex:/^bootflash:///(.)== NX_OS_Upgrade_Version %} True {% else %} False {% endif %}"} fatal:[switchb]:失败!=〉{“msg”:“条件检查'ansible_net_image|regex:/^bootflash:///(.)== NX_OS_Upgrade_Version'失败。错误为:模板化字符串时模板错误:应为标记“语句块结束”,得到“/”。字符串:{% if ansible_net_image|regex:/^bootflash:///(.)== NX_OS_Upgrade_Version %} True {% else %} False {% endif %}"}
正则表达式已经测试过了,但是我很难为Ansible play找到正确的语法。
如果有人能告诉我我做错了什么,那就太好了。
1条答案
按热度按时间svujldwt1#
更新
问:***“检查版本,复制新映像,并根据需要进行升级。”***
答:您可以测试 * 版本 *。请参阅 * 比较版本 *。例如,给定当前映像进行测试
获取版本。声明变量
给予
然后测试版本。在您的问题中,您试图找出版本是否相等。这可以通过下面的比较
'=='
来实现但是,要检查图像是否更新,您可能需要使用比较
'<'
完整的测试剧本示例
复制并升级新映像
如果映像不是较新的,则失败
来源
比如说
gives(abridged)