Ansible 简单条件变量问题
我不能让这个简单的条件生效 我在角色中使用Ansible 简单条件变量问题,ansible,Ansible,我不能让这个简单的条件生效 我在角色中使用pause进行用户确认,并将输入注册到变量。 我在接下来的两个任务中使用此变量: 当输入为y 另一个是n 但我无法根据用户输入使条件生效 下面是任务/main.yml #Update-AdvFirewall-to-V1.6的任务文件 -姓名:GetNote routeros_命令: 命令:/system note打印 寄存器:输出 -名称:获取防火墙版本 设定事实: 已安装:{item | replace('-AdvFirewall=V','')| t
pause
进行用户确认,并将输入注册到变量。我在接下来的两个任务中使用此变量:
y
n
#Update-AdvFirewall-to-V1.6的任务文件
-姓名:GetNote
routeros_命令:
命令:/system note打印
寄存器:输出
-名称:获取防火墙版本
设定事实:
已安装:{item | replace('-AdvFirewall=V','')| trim}
当项目中出现“'AdvFirewall=V”时
循环:“{output.stdout_行[0]}”
-名称:如果未安装,请确认
暂停:
提示:“未安装AdvFirewall。是否要安装(y/n)”
何时:安装未定义
注册:确认新安装
-名称:如果未安装,请安装AdvFirewall
routeros_命令:
命令:
-系统说明set note=“已安装的ADVfirewall”
时间:确认新安装==“y”
-梅塔:结束比赛
何时:确认已定义新安装或未定义已安装
-名称:如果需要,升级AdvFirewall
routeros_命令:
命令:
-系统说明set note=“升级时间”
时间:已安装==“1.5”
-名称:如果AdvFirewall早于要求,则发送电子邮件
routeros_命令:
命令:
-“/tool电子邮件发送至=\”abc@abc.com\“subject=\”AdvFirewall Upgrade |安装的版本`不符合升级$[/system-identity-get-name]\“body=\”$[/system-identity-get-name]上的要求,$[/system-identity-get-name]具有AdvFirewall V{{Installed}。所需版本为V{{Required}\“”
何时:安装<“1.5”
编辑:
毕竟,在你的帮助下,我发现了一些变化
- name: Install AdvFirewall if not installed
routeros_command:
commands:
- system note set note="Installed ADVfirewall"
when: "confirm_new_install.user_input | default('X') == 'y'"
- meta: end_play
when: "confirm_new_install.user_input | default('X') != 'X'"
多谢各位 暂停模块,因为大多数Ansible模块都注册了一个字典,用户输入在字典下面 但是,由于您的
pause
任务可以跳过,因此您必须测试它是否已定义,或者添加一个
因此,您必须将您的条件更改为:
- 或者
当:“确认新安装用户输入默认值('n')='y'”
- 或
当: -确认定义了用户输入 -确认新安装。用户输入==“y”
请记住,您始终可以
调试Ansible的任何输出,以识别此类问题
使用:
-调试:
变量:确认新安装
会给你看一些东西,比如:
{
“确认新安装”:{
“更改”:错误,
“三角洲”:2,
“回声”:没错,
“失败”:错误,
“rc”:0,
“开始”:“2021-02-01 19:55:09.835787”,
“标准”:“,
“标准输出”:“暂停0.04分钟”,
“停止”:“2021-02-01 19:55:12.448872”,
“用户输入”:“y”
}
}
它工作正常,但出现了一个新问题。我得到错误是因为当它在便笺中找到AdvFirewall
时,它跳过pause
以获得错误结果的输入。Mhm?您的意思是跳过暂停
然后执行下一个任务错误吗?如果定义了已安装
var,则跳过用户确认并继续执行下一个任务(如果AdvFirewall
为1.5版,升级至1.6版,如果版本较低,则发送电子邮件,说明您必须先运行较旧的更新,如果未安装,则要求确认以重新安装)。但是跳过用户输入意味着确认新的安装。用户输入保持为空。这就是导致错误的原因。有没有办法解决此问题?我尝试过忽略错误:是的
,但它不起作用。请参阅更新的回答。在所有这些更改后,我在您的帮助下找到了它。-名称:安装防火墙adv如果不安装ed routeros_命令:命令:-系统说明设置说明=“安装的ADVfirewall”当:“确认新安装用户输入”默认('X')='y'”-元:结束播放时:“确认新安装用户输入”默认('X')!='X'”非常感谢!