我有一本包含多个剧本的剧本。它看起来是这样的:
- name: Play A
hosts: localhost
roles:
- do task to get either B or C
- name: Play B
hosts: Host B
roles:
- do necessary task
- name: Play C
hosts: Host C
roles:
- do necessary task
- name: Play D
host: localhost
roles:
- create_logs
Run Code Online (Sandbox Code Playgroud)
每当 playbook 被触发时,它将首先运行第一个 play 以获得 B 或 C 结果。
结果是确定运行该游戏的主机属性,例如主机的IP地址和操作系统。
之后,根据结果,例如如果结果是B,我将运行播放B并跳过播放C。
否则,如果结果是 C,我将跳过 Play B 并运行 Play C。
无论先前 Play 的结果如何,Play D 将作为最后一个 Play 运行。
我怎样才能做到这一点?我尝试过使用“when”条件,但它说它不是 Play 的属性。
我已经到处搜索如何查找 Ansible 变量中出现的单词,但没有找到。我发现的最接近的方法是搜索变量中的任何“单词”,但它不计算有多少单词并且只返回布尔值。这是我的剧本:
---
- hosts: localhost
name: Test Variable Manipulation and Searching
gather_facts: false
tasks:
- name: read the Output File
set_fact:
output: "{{lookup('file', 'inputFile.txt') }}"
- name: debug the input file
debug:
msg: "{{output.stdout}}"
- name: find word 'down'
debug:
msg: "Found the word 'down' in the Variables/Output"
when: output.stdout is search('down')
Run Code Online (Sandbox Code Playgroud)
这是inputFile.txt内容:
{"failed": false, "changed": false, "ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "stdout_lines": [["Gi1/0/14 down down"]], "stdout": ["Gi1/0/14 down down"]}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以调整这个脚本来满足我的目的吗?我需要计算变量“向下”有多少个单词。
我尝试过使用 regex_findall 以及如下所示:
- name: check the down …Run Code Online (Sandbox Code Playgroud)