ansible - 简单条件变量的问题
问题描述
我不能让这个简单的条件起作用。
我pause
在角色中使用用户确认并将输入注册到变量。
我在接下来的 2 个任务中使用这个变量:
- 一个在输入时运行
y
- 另一个是什么时候
n
但是我无法根据用户输入使条件起作用。
下面是任务/main.yml
# tasks file for Update-AdvFirewall-to-V1.6
- name: Get Note
routeros_command:
commands: /system note print
register: output
- name: Get AdvFirewall Version
set_fact:
installed: "{{ item | replace('- AdvFirewall=V', '') | trim }}"
when: "'AdvFirewall=V' in item"
loop: "{{ output.stdout_lines[0] }}"
- name: Confirm if not Installed
pause:
prompt: "AdvFirewall is not installed. Do you want to install (y/n)"
when: installed is undefined
register: confirm_new_install
- name: Install AdvFirewall if not installed
routeros_command:
commands:
- system note set note="Installed ADVfirewall"
when: confirm_new_install == "y"
- meta: end_play
when: confirm_new_install is defined or installed is undefined
- name: Upgrade AdvFirewall if needed
routeros_command:
commands:
- system note set note="Time to upgrade"
when: installed == "1.5"
- name: Send Email if AdvFirewall is older than required
routeros_command:
commands:
- "/tool e-mail send to=\"abc@abc.com\" subject=\"AdvFirewall Upgrade | Installed Version doesn`t meet requirements for upgrade on $[/system identity get name]\" body=\"$[/system identity get name] has AdvFirewall V{{ installed }}. Required Version is V{{ required }}\""
when: installed < "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'"
非常感谢!
解决方案
该pause
模块,因为大多数 Ansible 模块都注册了一个字典,其中用户输入位于user_input
key下。
而且,由于您的pause
任务可以跳过,您必须测试它是否已定义,或者添加一个default
.
因此,您必须将条件更改为:
- 任何一个
when: "confirm_new_install.user_input | default('n') == 'y'"
- 或者
when: - confirm_new_install.user_input is defined - confirm_new_install.user_input == "y"
请记住,您始终可以debug
使用 Ansible 的任何输出来识别此类问题。
使用:
- debug:
var: confirm_new_install
会向你展示类似的东西:
{
"confirm_new_install": {
"changed": false,
"delta": 2,
"echo": true,
"failed": false,
"rc": 0,
"start": "2021-02-01 19:55:09.835787",
"stderr": "",
"stdout": "Paused for 0.04 minutes",
"stop": "2021-02-01 19:55:12.448872",
"user_input": "y"
}
}
推荐阅读
- java - 执行 Selenium 测试用例时出现空指针异常错误
- sql-server - 如何替换 #(lf) 并更改为换行符?
- java - 使用流的返工方法
- html - 显示未在单行中正确显示
- database - 当我尝试使用颤振将图像上传到strapi时出现错误
- html - 如何使通知不扩展到正确的引导程序?
- android - 在多行上将字段共享到文本/电子邮件/注释
- next.js - 使用 NextJS、next-connect 和 passport 时的套接字挂断
- php - 如何使用相同的正则表达式匹配两行?
- php - 自 axios 和 vue 以来在 PHP 中使用文件和 json 数据读取 FormData 的问题