|
1 | 1 | --- |
2 | | -- name: 'Gather all snapshots with labels: "{{ label_selector }}"' |
| 2 | +- name: Prepare label selector filter |
| 3 | + set_fact: |
| 4 | + label_selector_string: "{{ label_selector | items | map('join', '=') | join(',') }}" |
| 5 | + |
| 6 | +- name: Get number of pages for snapshots that match the label selector |
3 | 7 | delegate_to: "{{ delegation }}" |
4 | 8 | register: response |
5 | | - hetzner.hcloud.hcloud_image_info: |
6 | | - api_token: "{{ api_token }}" |
7 | | - type: snapshot |
8 | | - label_selector: "{{ label_selector | items | map('join', '=') | join(',') }}" |
9 | | - failed_when: response.hcloud_image_info | length == 0 |
| 9 | + uri: |
| 10 | + url: "https://api.hetzner.cloud/v1/images?type=snapshot&per_page=50&status=available&label_selector={{ label_selector_string }}" |
| 11 | + method: GET |
| 12 | + status_code: 200 |
| 13 | + headers: |
| 14 | + Authorization: "Bearer {{ api_token }}" |
10 | 15 |
|
11 | | -- name: Gather snapshots to delete for {{ inventory_hostname }} |
| 16 | +- name: Gather all snapshots that match the label selector |
12 | 17 | delegate_to: "{{ delegation }}" |
| 18 | + register: response |
| 19 | + uri: |
| 20 | + url: "https://api.hetzner.cloud/v1/images?type=snapshot&per_page=50&status=available&label_selector={{ label_selector_string }}&page={{ item }}" |
| 21 | + method: GET |
| 22 | + status_code: 200 |
| 23 | + headers: |
| 24 | + Authorization: "Bearer {{ api_token }}" |
| 25 | + loop: "{{ range(1, response.json.meta.pagination.last_page + 1) | list }}" |
| 26 | + |
| 27 | +- name: "Prepare list of snapshots" |
13 | 28 | set_fact: |
14 | | - delete_list: "{{ response.hcloud_image_info[0:response.hcloud_image_info | length - keep_snapshots | int] }}" |
15 | | - when: response.hcloud_image_info | length - keep_snapshots | int > 0 |
| 29 | + # workaround for selecting only snapshots created from the current host because label_selector has some problems: |
| 30 | + # selectattr('created_from.name', 'equalto', inventory_hostname) |
| 31 | + images: "{{ response.results | map(attribute='json.images') | flatten | selectattr('created_from.name', 'equalto', inventory_hostname) }}" |
| 32 | + |
| 33 | +- name: Gather snapshots to delete |
| 34 | + delegate_to: "{{ delegation }}" |
| 35 | + set_fact: |
| 36 | + delete_list: "{{ images[0:images | length - keep_snapshots | int] }}" |
| 37 | + when: images | length - keep_snapshots | int > 0 |
| 38 | + |
| 39 | +- name: Show number of snapshots to delete |
| 40 | + debug: |
| 41 | + msg: "{{ delete_list | length }} of {{ images | length }} snapshots will be deleted" |
| 42 | + when: delete_list | length > 0 |
16 | 43 |
|
17 | | -- name: 'Delete {{ delete_list | length }} old snapshots for {{ inventory_hostname }}' |
| 44 | +- name: "Delete old snapshots" |
18 | 45 | delegate_to: "{{ delegation }}" |
19 | 46 | when: delete_list | length > 0 |
20 | 47 | loop: "{{ delete_list }}" |
|
0 commit comments