小编Fit*_*uan的帖子

Ansible Playbook:如何根据条件运行 Play?

我有一本包含多个剧本的剧本。它看起来是这样的:

- 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 的属性。

case-when ansible

7
推荐指数
2
解决办法
2万
查看次数

Ansible:如何查找变量中出现的单词?

我已经到处搜索如何查找 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)

regex search count ansible find-occurrences

2
推荐指数
1
解决办法
6895
查看次数

标签 统计

ansible ×2

case-when ×1

count ×1

find-occurrences ×1

regex ×1

search ×1