Ansible when er brukt når du ønsker å sette betingelser for når en task skal kjøre.
Innrykket er viktig for when betingelsen. Den tilhører tasken, så den må være på samme innrykk som tasken
---
- name: Nettverk versjon switcher
hosts: switcher
connection: network_cli
gather_facts: no
tasks:
- name: Gather all legacy facts
cisco.ios.ios_facts:
gather_subset: all
register: output
- name: Skriv ut versjon på IOS enheter ved å bruke variabel output
debug:
msg: "{{ output['ansible_facts']['ansible_net_hostname'] }} er {{ output['ansible_facts']['ansible_net_iostype'] }} på versjon {{ output['ansible_facts']['ansible_net_version'] }} "
when: output['ansible_facts']['ansible_net_iostype'] == 'IOS'
- name: Skriv ut versjon på IOS-XE enheter ved å bruke variabel output
debug:
msg: "{{ output['ansible_facts']['ansible_net_hostname'] }} er {{ output['ansible_facts']['ansible_net_iostype'] }} på versjon {{ output['ansible_facts']['ansible_net_version'] }} "
when: output['ansible_facts']['ansible_net_iostype'] == 'IOS-XE'
- name: Skriv ut versjon på IOS enheter
debug:
msg: "{{ ansible_net_hostname }} er {{ ansible_net_iostype }} på versjon {{ ansible_net_version }} "
when: ansible_net_iostype == 'IOS'
- name: Skriv ut versjon på IOS-XE enheter
debug:
msg: "{{ ansible_net_hostname }} er {{ ansible_net_iostype }} på versjon {{ ansible_net_version }} "
when: ansible_net_iostype == 'IOS-XE'
- name: Skriv ut ios og versjon - når begge when statement er sanne
debug:
msg: "{{ ansible_net_hostname }} er {{ ansible_net_iostype }} på versjon {{ ansible_net_version }} "
when:
- ansible_net_iostype == 'IOS-XE'
- ansible_net_version == '17.12.01prd9'
- name: Skriv ut IOS og IOS-XE enheter - når en when statement er sanne
debug:
msg: "{{ ansible_net_hostname }} er {{ ansible_net_iostype }} på versjon {{ ansible_net_version }} "
when:
- ansible_net_iostype == 'IOS-XE' or ansible_net_iostype == 'IOS'
---
- name: vlan loop switcher
hosts: switcher
connection: network_cli
gather_facts: no
vars:
vlan:
- name: vlan100
id: 100
- name: vlan200
id: 200
tasks:
- name: Konfigurer vlan
ios_vlans:
config:
- name: "{{ item.name }}"
vlan_id: "{{ item.id }}"
state: active
loop: "{{ vlan }}"
ansible-playbook playbook_vlan_loop.yaml -k
PLAY [vlan loop switcher] **************************************************************************************************************************************************************************************************************
TASK [Konfigurer vlan] *****************************************************************************************************************************************************************************************************************
changed: [IOS_XE_switch_3] => (item={'name': 'vlan100', 'id': 100})
changed: [IOS_switch_1] => (item={'name': 'vlan100', 'id': 100})
changed: [IOS_XE_switch_3] => (item={'name': 'vlan200', 'id': 200})
changed: [IOS_switch_1] => (item={'name': 'vlan200', 'id': 200})
changed: [IOS_XE_switch_4] => (item={'name': 'vlan100', 'id': 100})
changed: [IOS_switch_2] => (item={'name': 'vlan100', 'id': 100})
changed: [IOS_switch_2] => (item={'name': 'vlan200', 'id': 200})
changed: [IOS_XE_switch_4] => (item={'name': 'vlan200', 'id': 200})
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
IOS_XE_switch_4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
IOS_switch_1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
IOS_switch_2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
---
- name: L2 loop switcher
hosts: switcher
connection: network_cli
gather_facts: no
vars:
interface: [ GigabitEthernet1/0/7, GigabitEthernet1/0/8 ]
vlan: [ 100 ]
tasks:
- name: sett vlan på L2 interface
ios_l2_interfaces:
config:
- name: "{{ item.0 }}"
mode: access
access:
vlan: "{{ item.1 }}"
state: merged
with_nested:
- "{{ interface }}"
- "{{ vlan }}"
ansible-playbook playbook_port_nested_loop.yaml -k -l IOS_XE_switch_3
PLAY [L2 loop switcher] ****************************************************************************************************************************************************************************************************************
TASK [sett vlan på L2 interface] *******************************************************************************************************************************************************************************************************
changed: [IOS_XE_switch_3] => (item=['GigabitEthernet1/0/7', 100])
changed: [IOS_XE_switch_3] => (item=['GigabitEthernet1/0/8', 100])
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- name: sett vlan på L2 interface
ios_l2_interfaces:
config:
- name: "{{ item.0 }}"
mode: access
access:
vlan: "{{ item.1 }}"
state: merged
loop: "{{ interface | product(vlan) | list }}"
---
- name: Hent VLAN facts og endre VLAN 100 til 200
hosts: switcher
connection: network_cli
gather_facts: no
tasks:
- name: hent VLAN facts
ios_facts:
gather_subset: min
gather_network_resources: l2_interfaces
register: ios_facts
- ios_l2_interfaces:
config:
- name: "{{ item.name }}"
mode: access
access:
vlan: "200"
state: merged
loop: "{{ ios_facts.ansible_facts.ansible_network_resources.l2_interfaces }}"
when: "'access' in item and 'vlan' in item.access and item.access.vlan == 100"