Seite wählen

NETWAYS Blog

Ansible – Use Blocks and Rescue Errors

Ansible is a widely used and powerful open-source configuration and deployment management tool. It can be used for simple repetitive daily tasks or complex application deployments, therefore Ansible is able to cover mostly any situation.

Since version 2.0.0 Ansible introduced the usage of blocks, they provide the possibility to group or rescue failed tasks.
On blocks we can assign most directives which are available for any other task at block level, only loops aren’t available.

- name: Update Systems
  hosts: all
  tasks:
    - name: execute this block only for rhel family hosts
      block:
        - name: install epel repository
          yum:
            name: epel-release
            state: present

        - name: install updates
          yum:
            name: '*'
            state: latest
            exclude: kernel*

      when: ansible_os_family == 'RedHat'
      become: true

When we try to deploy applications, sometimes we need to test connections or if requirements are met. When those tasks fail caused by the negative test result, the playbook by default fails and therefore stops.
To force Ansible to execute all other tasks, we could use the directive ignore_failed: true and checking the return value for any other depending task.

With blocks this is easily solved, by using rescue to catch the error and force a particular tasks to run.
The always will make sure that the listed tasks get executed.


- name: rescue my errors
  hosts: localhost
  tasks:
    - name: Try to reach host
      block:
        - name: "[Try reach DNS] Check Connection over DNS"
          command: ping client01.demo.local -c 2
          register: output
      rescue:
        - name: "[Rescue failed DNS] Check Connection over IP"
          command: ping 192.168.33.1 -c 2
          register: output
      always:
        - debug:
            var: output

To handle more than one rescue statement, the block can be simply used in the rescue section, like in the following example.


  - name: Try to execute skript
    block:
      - name: Check Connection over DNS
        command: ping nclient01.demo.local -c 2
        register: output
    rescue:
      - name: "this will fail"
        block:
          - name: it will be false
            command: /bin/false
            register: output
        rescue:
          - name: "this works"
            command: ping 192.168.33.1 -c 2
            register: output

Try to reduce ignored tasks in failed state with rescue blocks, this reduces the confusion of users when inspecting the output.
As second advice try to reduce code duplication by grouping tasks with similar directives.

Check out our Blog for more awesome posts and if you need help with Ansible send us a message or sign up for one of our trainings!

Thilo Wening
Thilo Wening
Manager Consulting

Thilo hat bei NETWAYS mit der Ausbildung zum Fachinformatiker, Schwerpunkt Systemadministration begonnen und unterstützt nun nach erfolgreich bestandener Prüfung tatkräftig die Kollegen im Consulting. In seiner Freizeit ist er athletisch in der Senkrechten unterwegs und stählt seine Muskeln beim Bouldern. Als richtiger Profi macht er das natürlich am liebsten in der Natur und geht nur noch in Ausnahmefällen in die Kletterhalle.

Ninja-Blocks-Kit Ausstellungsstück im Shop verfügbar

Auch wir probieren gerne neue Sachen aus und sind immer auf der Suche nach neuen Messgeräten, die wir unseren Kunden anbieten können. Kürzlich hatte ich ein Ninja-Block noch in der Kickstarter-Phase bestellt. Wir haben das Gerät getestet und hätten es gerne für unsere Kunden eingesetzt. Das Problem: das Gerät selbst hat kein eigenes Webinterface, aufgrund der Anfragen unserer Kunden ist ein solches Messgerät also unpassend. Die Daten können dennoch im Browser in einem Portal angesehen werden, dazu schickt der Ninja-Block nach der Registrierung permanent seine Messdaten dort hin.
5
Aufgrund seiner Beagle Bone Technologie verspricht der Ninja vielfältige Einsatzmöglichkeiten, Das Hack-Me-Schild sagt ja da schon alles :). Durch eine Vielzahl von bereits mitgelieferten Sensoren kann man allerhand Dinge schon überwachen. So ist in unserem Kit neben einen kabellosen Temperatur- und Luftfeuchtesensor (in einem Sensor kombiniert) noch ein Bewegungsmelder, ein Tür- oder Fensterkontaktsensor und ein Taster. Je nach Wunsch kann der Ninja dann die Bewegung, zu hohe Temperatur etc. per Mail oder Push-Notification melden. Weitere Infos dazu findet man auf der Herstellerseite.
An sich ist der Ninja eine runde Sache für kleine Einsatzgebiete, so also z. B. zu Hause oder in einer Ferienwohnung, Garage etc. Für den Rechenzentrumsbetrieb ist er wegen der Portallösung eher ungeeignet, zudem laufen die Sensoren auf dem 433 MHz-Band welches von jedem möglichen Funkteilnehmer gestört werden kann (wir hatten im Testbetrieb keine Probleme). Natürlich können noch weitere Sensoren dazu gekauft und einfach mit eingebunden werden.
Wir trennen uns nun schweren Herzens von unserem Ninja, der uns eine Weile mit farbig-leuchtenden Augen beobachtet hat. Dafür hat jetzt ein Käufer die Chance Ihn zum vergünstigten Preis bei uns im Shop-Outlet zu kaufen.