Можно настроить набор хостов, который соответствует определенным условиям.
У меня есть сценарий использования, в котором в моем файле инвентаризации указано множество хостов, например: inventory.txt
[ios]
a.b.c.d
s.i.s.i
x.x.c.c
Мне нужно проверить, включен ли vstack на каждом из этих хостов, если он включен, мне нужно отключить его как процесс самовосстановления.
Моя книга игр:
---
- 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')
----------------------------------------------------------------------------
Результат воспроизведения
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
Так как некоторые коммутаторы cisco дают Role: Client, а некоторые коммутаторы cisco дают Role: Client Smart Install включенным, вышеприведенная игра выведет vstack, присутствующий даже для коммутатора, в котором нет vstack, так как я ищу Client, и также принимает Role: Client Smartinstall Отключено, поскольку в нем присутствует строка клиента. У меня вопрос, есть ли лучший способ напечатать сообщение о том, что Vstack присутствует, даже если у меня есть условие: Роль: клиент Smartinstall Disabled
1 ответ
Просто запустите команду с when
условный
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"
Он будет пропущен, если условие не выполнено.