From 37931e581ec737c085eced2e751e00ffdac7a870 Mon Sep 17 00:00:00 2001 From: Sven Ketelsen Date: Mon, 18 Oct 2021 16:19:46 +0200 Subject: [PATCH] bugfix: added pagination to autodiscover_pre_tasks - server discovery was limited to 25 servers - hetzner default pagination: 25 servers per page --- tasks/autodiscover_pre_tasks.yml | 54 +++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/tasks/autodiscover_pre_tasks.yml b/tasks/autodiscover_pre_tasks.yml index b342f42..67af490 100644 --- a/tasks/autodiscover_pre_tasks.yml +++ b/tasks/autodiscover_pre_tasks.yml @@ -6,15 +6,59 @@ method: GET headers: authorization: Bearer {{ hetzner_authentication_token }} - register: hetzner_servers + register: hetzner_servers_result delegate_to: 127.0.0.1 become: false tags: - always +- name: "Setting hetzner server pagination count: <{{ hetzner_servers_result.json.meta.pagination.last_page }}>" + set_fact: + total_server_pages: "{{ hetzner_servers_result.json.meta.pagination.last_page }}" + become: false + tags: + - always + +- name: "Reading hetzner server infos for stage <{{ stage }}> without pagination" + set_fact: + hetzner_servers: "{{ hetzner_servers_result.json.servers }}" + become: false + tags: + - always + when: + - total_server_pages == '1' + +- name: "Reading hetzner server infos for stage <{{ stage }}> with pagination" + uri: + url: "https://api.hetzner.cloud/v1/servers?label_selector=stage={{ stage }}&page={{ item }}" + method: GET + headers: + authorization: Bearer {{ hetzner_authentication_token }} + register: hetzner_servers_results + with_sequence: start=1 end={{ total_server_pages }} + delegate_to: 127.0.0.1 + become: false + tags: + - always + when: + - total_server_pages != '1' + +- name: "Reading hetzner server infos for stage <{{ stage }}> with pagination" + set_fact: + hetzner_servers: "{{ hetzner_servers_results.results | json_query(querystr1) | first | json_query(querystr2) | json_query(querystr2) }}" + vars: + querystr1: "[[*].json.servers]" + querystr2: "[]" + delegate_to: 127.0.0.1 + become: false + tags: + - always + when: + - total_server_pages != '1' + - name: "Printing hetzner server infos for stage <{{ stage }}>" debug: - msg: "{{ hetzner_servers.json.servers }}" + msg: "{{ hetzner_servers }}" delegate_to: 127.0.0.1 become: false tags: @@ -66,7 +110,7 @@ set_fact: stage_server_infos: "\ {% set list= [] %}\ - {% for server in hetzner_servers.json.servers %}\ + {% for server in hetzner_servers %}\ {% for private_net in server.private_net %}\ {% if private_net.network == stage_private_network_id|int %}\ {{ list.append({'service': server.labels.service, 'private_ip': private_net.ip, 'public_ip': server.public_net.ipv4.ip, 'name': server.name}) }}\ @@ -91,7 +135,7 @@ - name: "Reading private ip address for {{ inventory_hostname }}" set_fact: - stage_private_server_ip: "{% for server in hetzner_servers.json.servers %}\ + stage_private_server_ip: "{% for server in hetzner_servers %}\ {% if server.name == inventory_hostname %}\ {% for private_net in server.private_net %}\ {% if private_net.network == stage_private_network_id|int %}\ @@ -107,7 +151,7 @@ - name: "Reading public ip address for {{ inventory_hostname }}" set_fact: - stage_server_ip: "{{ hetzner_servers.json.servers | json_query(querystr) | first | default('') }}" + stage_server_ip: "{{ hetzner_servers | json_query(querystr) | first | default('') }}" vars: querystr: "[?name=='{{ inventory_hostname }}'].public_net.ipv4.ip" delegate_to: 127.0.0.1