一千萬個為什麽

搜索

根據變量或組更改Ansible模塊



有許多Ansible網絡模塊(例如:ios_user,asa_user,nxos_user)共享相同(或類似的)足夠的接口。目前,我的劇本必須根據主持人的組或變量有條件地執行任務。這導致了大量重復的代碼,因為任務之間唯一真正的區別就是模塊名稱。

Is there a way to select the module to be run based on group or variable values without adding extra tasks, roles, or playbooks?

例如,這就是劇本目前的樣子:

- hosts: ios
  tasks:
    ios_user:
      provider: "{{ cli }}"
      ...
- hosts: asa
  tasks:
    asa_user:
      provider: "{{ cli }}"
      ...
- hosts: nxos
  tasks:
    nxos_user:
      provider: "{{ cli }}"
      ...

我喜歡這樣的事情:

- hosts: all
  tasks:
    {{ module_name }}:
      provider: "{{ cli }}"
      ...

我發誓,我順帶看到了一些類似的功能,但我很難再找到它。除了版本2.5使netconf_cli成為一流的連接類型之外,這將解決我們組織中的大量問題和不便。

轉載註明原文: 根據變量或組更改Ansible模塊

一共有 2 個回答:

在@ 030的答案詳細闡述,以下是如何使用模塊的變量:

  1. You need to group the target hosts in groups, for the example I'm using server1.example.com as member of hosts1 group and server2.example.com as member of hosts2 group.

  2. You create group variables:

    • group_vars/hosts1
    • group_vars/hosts2

這兩個文件都包含一個名為 module 的變量,其值不同,在測試中我使用 stat

  1. 你的劇本將如下所示:

<�代碼> test.yml </代碼>

---
 - hosts: all        
   user: me        
   tasks:
     - name: test module variables
       action: "{{ module }} path=/home/me/myfile"

該劇的結果:

[[email protected]]$ ansible-playbook test.yml -i test

PLAY [all] ********************************************************************************

TASK [Gathering Facts] ********************************************************************
ok: [server1.example.com]
ok: [server2.example.com]

TASK [test module variables] **************************************************************
ok: [server1.example.com]
ok: [server2.example.com]

PLAY RECAP ********************************************************************************
server1.example.com        : ok=2    changed=0    unreachable=0    failed=0
server2.example.com        : ok=2    changed=0    unreachable=0    failed=0

It is possible to declare group and host vars http://docs.ansible.com/ansible/latest/playbooks_best_practices.html

<�預> <�代碼> group_vars /    group1#here我們將變量分配給特定的組    group2#“” host_vars /    hostname1#如果系統需要特定的變量,請將它們放在這裏    hostname2#“” </代碼>