block、rescue、always

noteId: FAE1EB636E99444696E30A47295B5594 · 原始路径:/ALL/Ansible 自动化管理/Ansible 配置合集/常用内置模块 一些 Ansible 中可以用到的语法/block、rescue、always.note

一、作用:

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