--- - name: upgrade firmware on openwrt device(s) hosts: - accesspoints - gateways vars: running_garet_profile: "{{ ansible_local['garet']['profile'] | default() }}" running_garet_release: "{{ ansible_local['garet']['release'] | default() }}" firmware_suffix: accesspoints: "bin" gateways: "img.gz" firmware_file: "firmware/garet_{{ garet_profile }}-{{ garet_release }}.{{ firmware_suffix[group_names | first] }}" gather_facts: no tasks: - name: gather firmware version setup: filter: ansible_local - name: stringify garet_release... set_fact: garet_release: "{{ garet_release | string }}" - name: handle update block: - name: upload new firmware copy: src: "{{ firmware_file }}" dest: "/tmp/{{ firmware_file | basename }}" - name: issue sysupgrade command shell: cmd: "sysupgrade /tmp/{{ firmware_file | basename }} && exit 0" ignore_unreachable: yes ignore_errors: yes - name: wait till device is back online wait_for_connection: delay: 10 timeout: 600 when: garet_profile != running_garet_profile or garet_release != running_garet_release