block、rescue、always
一、作用:
block::正常要执行的任务(相当于 try)。rescue::如果 block 中 任何一个 task 失败,就执行这里的任务(相当于 except)。always::无论成败 都会执行(相当于 finally),常用来做收尾、记录日志等注意:一旦 block 里面有 task 报错(且没有 ignore_errors: yes),剩下的 task 停止,转去执行 rescue。rescue 里如果也报错,那 play 就直接失败了。always 总会执行 —— 无论 block、rescue 是成功还是失败。
·编写剧本:
当接口中有 shutdown 时,就会返回 fail,然后去执行 rescue 下的task
---- name: Test block module hosts: iosv-r1 gather_facts: false vars: interfaces: - name: 'GigabitEthernet 0/1' address: '1.1.1.1' netmask: '255.255.255.0' - name: 'GigabitEthernet 0/2' address: '2.1.1.1' netmask: '255.255.255.0' tasks: - block: - name: get G0/1 interface information ios_command: commands: "show running-config interface {{ item.name }}" loop: "{{ interfaces }}" register: G1 # - name: # debug: # var: G1.results[0].stdout[0] - name: Create variable set_fact: status: "{{ G1.results[0].stdout[0] }}" - name: fail: msg: "The G0/1 interface was not configured" when: "'shutdown' in status" register: fail rescue: - name: Create variable 2 set_fact: inter: "{{ G1.results[0].stdout_lines[0][4] }}" # - name: # debug: # var: inter - name: Configure interface ios_config: lines: - no shutdown - "ip address {{ item.address }} {{ item.netmask }}" parents: "interface {{ item.name }}" loop: "{{ interfaces }}" register: config - name: Save running to startup when modified cisco.ios.ios_config: save_when: modified when: config.changed always: - name: debug: var: fail - name: Output the log lineinfile: path: /etc/ansible/playbook_running_log.log line: "The interface was Configured" create: yes delegate_to: localhost when: fail.failed is defined