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"