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
  • 但我无法根据用户输入使条件生效

    下面是任务/main.yml

    
    #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'”非常感谢!