| # Licensed to the Apache Software Foundation (ASF) under one or more contributor |
| # license agreements; and to You under the Apache License, Version 2.0. |
| --- |
| # Remove invoker containers. |
| |
| - name: remove invoker |
| docker_container: |
| name: "invoker{{ groups['invokers'].index(inventory_hostname) }}" |
| image: "{{ docker_registry }}{{ docker.image.prefix }}/invoker:{{ docker.image.tag }}" |
| state: absent |
| stop_timeout: 60 |
| timeout: 120 |
| ignore_errors: True |
| |
| # In case the invoker could not clean up completely in time. |
| - name: pause/resume at runc-level to restore docker consistency |
| shell: | |
| DOCKER_PAUSED=$(docker ps --filter status=paused --filter name=wsk{{ groups['invokers'].index(inventory_hostname) }} -q --no-trunc) |
| for C in $DOCKER_PAUSED; do docker-runc pause $C; done |
| DOCKER_RUNNING=$(docker ps --filter status=running --filter name=wsk{{ groups['invokers'].index(inventory_hostname) }} -q --no-trunc) |
| for C2 in $DOCKER_RUNNING; do docker-runc resume $C2; done |
| TOTAL=$(($(echo $DOCKER_PAUSED | wc -w)+$(echo $DOCKER_RUNNING | wc -w))) |
| echo "Handled $TOTAL remaining actions." |
| register: runc_output |
| ignore_errors: True |
| become: "{{ invoker.docker.become }}" |
| |
| - debug: msg="{{ runc_output.stdout }}" |
| |
| - name: unpause remaining actions |
| shell: "docker unpause $(docker ps -aq --filter status=paused --filter name=wsk{{ groups['invokers'].index(inventory_hostname) }})" |
| failed_when: False |
| |
| - name: remove remaining actions |
| shell: "docker rm -f $(docker ps -aq --filter name=wsk{{ groups['invokers'].index(inventory_hostname) }})" |
| failed_when: False |
| |
| - name: remove invoker log directory |
| file: |
| path: "{{ whisk_logs_dir }}/invoker{{ groups['invokers'].index(inventory_hostname) }}" |
| state: absent |
| become: "{{ logs.dir.become }}" |
| |
| - name: remove invoker conf directory |
| file: |
| path: "{{ invoker.confdir }}/invoker{{ groups['invokers'].index(inventory_hostname) }}" |
| state: absent |
| become: "{{ invoker.dir.become }}" |
| |
| # Workaround for orphaned ifstate.veth* files on Ubuntu 14.04 |
| # See https://github.com/moby/moby/issues/22513 |
| # Remove inactive files older than 60 minutes |
| - name: "Clean orphaned ifstate.veth* files on Ubuntu 14.04" |
| shell: | |
| ACTIVE_VETH_IFACES=$(ip -oneline link show | grep --only-matching --extended-regexp 'veth[0-9a-f]+' | tr '\n' '|' | sed -e 's/.$//') |
| EXCLUDE_REGEX=$(if [ -z ${ACTIVE_VETH_IFACES} ]; then echo 'No active veth interfaces found' >&2; else printf '( -not -regex /run/network/ifstate\.(%s) ) -and ' ${ACTIVE_VETH_IFACES}; fi) |
| find /run/network -regextype posix-egrep ${EXCLUDE_REGEX} -name 'ifstate.veth*' -and -mmin +60 -delete |
| become: True |
| ignore_errors: True |
| when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == '14.04' |