Ansible zum Konfigurieren einer Gruppe von Hosts, die bestimmte Bedingungen erfüllen

Ansible zum Konfigurieren einer Gruppe von Hosts, die bestimmte Bedingungen erfüllen

Ich habe einen Anwendungsfall, bei dem ich in meiner Inventardatei, beispielsweise inventory.txt, eine Reihe von Hosts habe als

[ios]
a.b.c.d
s.i.s.i
x.x.c.c

Ich muss überprüfen, ob vstack auf jedem dieser Hosts aktiviert ist. Wenn aktiviert, muss ich es als Selbstheilungsprozess deaktivieren.

Mein Playbook:

---
- hosts: all

  connection: network_cli

  become: true
  become_method: enable
  tasks:
    - name: Verify whether vstack feature is enabled

      ios_command:
        commands:
          - show vstack config | incl Role
      vars:
        ansible_command_timeout: 30
      register: showvstack

    - debug:
       var: showvstack.stdout
  #   when: showvstack.stdout is regex("'Role.*'")
    #- name: set regex pattern
     # set_fact:
      #  regex_pattern: "^.*Client (SmartInstall enabled).*$"

    - name: Check with when condition
      debug:
        msg: "Vstack Enabled!!!!"
      when: showvstack.stdout | join('') | match('Client (SmartInstall enabled)') or showvstack.stdout | join('') | match('Client')


    - name: If vstack is enabled on switch disable vstack
      ios_config:
       lines:
         - no vstack
      when: showvstack.stdout | join('') | search('Client')

   ----------------------------------------------------------------------------

Spielergebnis

TASK [Gathering Facts] **********************************************************************************************************************************************************************
ok: [a.b.c.d]
ok: [x.v.b.n]
ok: [z.z.x.c]

TASK [Verify whether vstack feature is enabled] *********************************************************************************************************************************************
ok: [a.b.c.d]
ok: [x.v.b.n]
ok: [z.z.x.c]

TASK [debug] ********************************************************************************************************************************************************************************
ok: [a.b.c.d] => {
    "showvstack.stdout": [
        "Role: Client (SmartInstall enabled)"
    ]
}
ok: [x.v.b.n] => {
    "showvstack.stdout": [
        "Role: NA"
    ]
}
ok: [z.z.x.c] => {
    "showvstack.stdout": [
        "Role: Client"
    ]
}

TASK [Check with when condition] ************************************************************************************************************************************************************
skipping: [a.b.c.d]
skipping: [x.v.b.n]
skipping: [z.z.x.c]

TASK [If vstack is enabled on switch disable vstack] ****************************************************************************************************************************************
skipping: [a.b.c.d]
changed: [x.v.b.n]
changed: [z.z.x.c]

PLAY RECAP **********************************************************************************************************************************************************************************
a.b.c.d             : ok=4    changed=1    unreachable=0    failed=0
x.v.b.n                 : ok=3    changed=0    unreachable=0    failed=0
z.z.x.c    : ok=4    changed=1    unreachable=0    failed=0

Da einige Cisco-Switches die Rolle „Client“ und einige Cisco-Switches die Rolle „Client Smart Install aktiviert“ angeben, wird das obige Spiel „vstack vorhanden“ auch für Switches ausgeben, die kein vstack enthalten, da ich nach „Client“ suche und es auch „Role: Client Smartinstall deaktiviert“ verwendet, da die Client-Zeichenfolge darin vorhanden ist. Meine Frage ist, ob es eine bessere Möglichkeit gibt, die Meldung auszugeben, dass „vstack vorhanden“ ist, selbst wenn ich eine Bedingung habe, die besagt, dass „Role: Client Smartinstall deaktiviert“ ist.

Antwort1

Führen Sie einfach den Befehl mit demwhenbedingt.

tasks
  - name: Run show command
    ios_command: show vstack config | incl Role
    register: showvstack

  - name: disable vstack
    ios_command: # whatever command disables vstack
    when: "'Role: Enabled' in showvstack"

Es wird übersprungen, wenn die Bedingung nicht erfüllt ist.

verwandte Informationen