From 8b0747dc071b6cf8de4d5e15292406a69fae90b5 Mon Sep 17 00:00:00 2001 From: Hoan To Date: Fri, 9 Jun 2023 11:20:40 +0000 Subject: [PATCH] DEV-1063: reworked the filtering out the stage name out of the loadbalancer --- group_vars/all/services.yml | 2 + group_vars/stage_demompmx/plain.yml | 1 - inventory_plugins/netgo-hcloud.py | 4 +- tasks/autodiscover_pre_tasks.yml | 149 ++++++++++------------------ 4 files changed, 59 insertions(+), 97 deletions(-) diff --git a/group_vars/all/services.yml b/group_vars/all/services.yml index 52f42ad..5632cbd 100644 --- a/group_vars/all/services.yml +++ b/group_vars/all/services.yml @@ -43,6 +43,8 @@ shared_service_kube_loadbalancer_private_ip: "{{ stage_private_ingress_loadbalan # TODO make value available for plays with static inventory - by autodiscover_pre_tasks.yml shared_service_loadbalancer_logstash_private_ip_not_available: "private logstash loadbalancer ip not available" shared_service_loadbalancer_logstash_private_ip: "shared_service_loadbalancer_logstash_private_ip_not_available" +shared_service_loadbalancer_logstash_public_ip: "{{ stage_public_logstash_loadbalancer_ip | default(shared_service_kube_loadbalancer_private_ip_not_available) }}" +shared_service_loadbalancer_logstash_private_ip: "{{ stage_private_logstash_loadbalancer_ip | default(shared_service_kube_loadbalancer_private_ip_not_available) }}" shared_service_default_additional_hosts: - name: "{{ shared_service_kube_hostname_argocd }}" diff --git a/group_vars/stage_demompmx/plain.yml b/group_vars/stage_demompmx/plain.yml index 041d372..25872d8 100644 --- a/group_vars/stage_demompmx/plain.yml +++ b/group_vars/stage_demompmx/plain.yml @@ -42,4 +42,3 @@ elastic_admin_username: "{{ elastic_admin_username_vault }}" elastic_admin_password: "{{ elastic_admin_password_vault }}" shared_service_elastic_stack_01_hostname: "demompmx-connect-data.smardigo.digital:443" -shared_service_loadbalancer_logstash_private_ip: "{{ demompmx_logstash_private_ip }}" diff --git a/inventory_plugins/netgo-hcloud.py b/inventory_plugins/netgo-hcloud.py index 8dddeae..b87270d 100644 --- a/inventory_plugins/netgo-hcloud.py +++ b/inventory_plugins/netgo-hcloud.py @@ -258,9 +258,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): self.inventory.set_variable(serverName, 'stage_public_ingress_loadbalancer_ip', loadbalancerPublicIp) self.inventory.set_variable(serverName, 'stage_private_ingress_loadbalancer_ip', loadbalancerPrivateIp) for extraLoadbalancer in extraLoadbalancers: - self.inventory.set_variable(serverName, f'stage_public_{extraLoadbalancer["name"]}_loadbalancer_ip', extraLoadbalancer["public_net"]["ipv4"]["ip"]) + self.inventory.set_variable(serverName, f'stage_public_{extraLoadbalancer["name"].replace(f"{temp_stage}-", "")}_loadbalancer_ip', extraLoadbalancer["public_net"]["ipv4"]["ip"]) if len(loadbalancer["private_net"]) > 0 : extraLoadbalancerPrivateIp = loadbalancer["private_net"][0]["ip"] else: extraLoadbalancerPrivateIp = '-' - self.inventory.set_variable(serverName, f'stage_private_{extraLoadbalancer["name"]}_loadbalancer_ip', extraLoadbalancerPrivateIp) + self.inventory.set_variable(serverName, f'stage_private_{extraLoadbalancer["name"].replace(f"{temp_stage}-", "")}_loadbalancer_ip', extraLoadbalancerPrivateIp) diff --git a/tasks/autodiscover_pre_tasks.yml b/tasks/autodiscover_pre_tasks.yml index 2c79fdc..4181d38 100644 --- a/tasks/autodiscover_pre_tasks.yml +++ b/tasks/autodiscover_pre_tasks.yml @@ -1,6 +1,10 @@ --- -- name: "Reading hetzner server infos for stage <{{ stage }}>" +############################################################# +# Reading server infos from hetzner rest api +############################################################# + +- name: "Reading hetzner server infos for stage <{{ stage }}/{{ stage_kube }}>" uri: url: "https://api.hetzner.cloud/v1/servers?label_selector=stage={{ stage }}" method: GET @@ -17,7 +21,7 @@ tags: - always -- name: "Reading hetzner server infos for stage <{{ stage }}> without pagination" +- name: "Reading hetzner server infos for stage <{{ stage }}/{{ stage_kube }}> without pagination" set_fact: hetzner_servers: "{{ hetzner_servers_result.json.servers }}" tags: @@ -27,7 +31,7 @@ - name: "Block << WITH >> pagination" block: - - name: "Reading hetzner server infos for stage <{{ stage }}> with pagination" + - name: "Reading hetzner server infos for stage <{{ stage }}/{{ stage_kube }}> with pagination" uri: url: "https://api.hetzner.cloud/v1/servers?label_selector=stage={{ stage }}&page={{ item }}" method: GET @@ -37,28 +41,30 @@ with_sequence: start=1 end={{ total_server_pages }} delegate_to: 127.0.0.1 - - name: "Reading hetzner server infos for stage <{{ stage }}> with pagination" + - name: "Reading hetzner server infos for stage <{{ stage }}/{{ stage_kube }}> without 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 when: - total_server_pages != '1' tags: - always -- name: "Printing hetzner server infos for stage <{{ stage }}>" +- name: "Printing hetzner server infos for stage <{{ stage }}/{{ stage_kube }}>" debug: msg: "{{ hetzner_servers }}" - delegate_to: 127.0.0.1 tags: - always when: - debug -- name: "Reading hetzner private network infos for stage <{{ stage }}>" +############################################################# +# Reading network infos from hetzner rest api +############################################################# + +- name: "Reading hetzner private network infos for stage <{{ stage }}/{{ stage_kube }}>" uri: url: "https://api.hetzner.cloud/v1/networks?label_selector=stage={{ stage }}" method: GET @@ -69,32 +75,25 @@ tags: - always -- name: "Printing hetzner private network infos for stage <{{ stage }}>" +- name: "Printing hetzner private network infos for stage <{{ stage }}/{{ stage_kube }}>" debug: msg: "{{ hetzner_networks.json.networks }}" - delegate_to: 127.0.0.1 tags: - always when: - debug -- name: "Reading hetzner private network id for <{{ stage }}>" +- name: "Reading hetzner private network id for <{{ stage }}/{{ stage_kube }}>" set_fact: - stage_private_network_id: "{{ hetzner_networks.json.networks | map(attribute='id') | first | default(0) }}" - delegate_to: 127.0.0.1 + stage_network_id: "{{ hetzner_networks.json.networks | map(attribute='id') | first | default(0) }}" tags: - always -- name: "Printing hetzner private network id for <{{ stage }}>" - debug: - msg: "{{ stage_private_network_id }}" - delegate_to: 127.0.0.1 - tags: - - always - when: - - debug +############################################################# +# Reading loadbalancer infos from hetzner rest api +############################################################# -- name: "Reading hetzner loadbalancer infos for stage <{{ stage_kube }}>" +- name: "Reading hetzner loadbalancer infos for stage <{{ stage }}/{{ stage_kube }}>" uri: url: "https://api.hetzner.cloud/v1/load_balancers" method: GET @@ -105,16 +104,15 @@ tags: - always -- name: "Printing hetzner loadbalancer infos for stage <{{ stage_kube }}>" +- name: "Printing hetzner loadbalancer infos for stage <{{ stage }}/{{ stage_kube }}>" debug: msg: "{{ hetzner_loadbalancers.json.load_balancers }}" - delegate_to: 127.0.0.1 tags: - always when: - debug -- name: "Reading hetzner loadbalancer infos for stage <{{ stage_kube }}> with pagination" +- name: "Reading hetzner loadbalancer infos for stage <{{ stage }}/{{ stage_kube }}>" set_fact: shared_service_kube_loadbalancer_private_ip: "{{ hetzner_loadbalancers.json.load_balancers @@ -123,49 +121,31 @@ | default([]) | first | default(shared_service_kube_loadbalancer_private_ip_not_available) }}" - vars: - querystr1: "[?name=='{{ stage_kube_load_balancer }}'].private_net[*].ip" - delegate_to: 127.0.0.1 - tags: - - always - -- name: "Reading hetzner loadbalancer infos for stage <{{ stage_kube }}> with pagination" - set_fact: shared_service_kube_loadbalancer_public_ip: "{{ hetzner_loadbalancers.json.load_balancers - | json_query(querystr1) + | json_query(querystr2) | first | default(shared_service_kube_loadbalancer_public_ip_not_available) }}" vars: - querystr1: "[?name=='{{ stage_kube_load_balancer }}'].public_net.ipv4.ip" - delegate_to: 127.0.0.1 - tags: - - always - -- name: "Printing hetzner loadbalancer infos for stage <{{ stage_kube }}>" - debug: - msg: "" - delegate_to: 127.0.0.1 + querystr1: "[?name=='{{ stage_kube_load_balancer }}'].private_net[*].ip" + querystr2: "[?name=='{{ stage_kube_load_balancer }}'].public_net.ipv4.ip" tags: - always - when: - - debug -- name: "Reading public ips of hetzner load balancers for stage <{{ stage_kube }}>" +- name: "Reading hetzner loadbalancer infos for stage <{{ stage }}/{{ stage_kube }}>" set_fact: - "{{ item.name | replace('-','_') }}_public_ip": "{{ item.public_net.ipv4.ip }}" + "stage_public_{{ item.name | replace(stage_kube + '-', '') | replace('-','_') }}_loadbalancer_ip": "{{ item.public_net.ipv4.ip }}" + "stage_private_{{ item.name | replace(stage_kube + '-', '') | replace('-','_') }}_loadbalancer_ip": "{{ item.private_net[0].ip if item.private_net | length > 0 else 'Not Available' }}" loop: "{{ hetzner_loadbalancers.json.load_balancers | selectattr('name', 'match', '^' + stage_kube + '-.*') | list }}" - delegate_to: 127.0.0.1 + loop_control: + label: "{{ item.name }}" tags: - always -- name: "Reading private ips of hetzner load balancers for stage <{{ stage_kube }}>" - set_fact: - "{{ item.name | replace('-','_') }}_private_ip": "{{ item.private_net[0].ip if item.private_net | length > 0 else 'Not Available' }}" - loop: "{{ hetzner_loadbalancers.json.load_balancers | selectattr('name', 'match', '^' + stage_kube + '-.*') | list }}" - delegate_to: 127.0.0.1 - tags: - - always + +############################################################# +# Setting stage infos as facts +############################################################# # due to a hetzner api bug for label selector: only last given selector is used - label_selector=stage=XXX,!manual not working correctly - name: "Reading hetzner server infos for stage <{{ stage }}/{{ stage_kube }}>" @@ -176,7 +156,7 @@ {% if server.labels.manual is not defined %}\ {% if (server.private_net|length) > 0 %}\ {% for private_net in server.private_net %}\ - {% if private_net.network == stage_private_network_id|int %}\ + {% if private_net.network == stage_network_id|int %}\ {{ list.append({'service': server.labels.service | default(''), 'private_ip': private_net.ip, 'public_ip': server.public_net.ipv4.ip, 'name': server.name, 'id': server.id}) }}\ {% endif %}\ {% endfor %}\ @@ -186,60 +166,41 @@ {% endif %}\ {% endfor %}\ {{ list|list }}" - delegate_to: 127.0.0.1 tags: - always - name: "Printing hetzner server infos for stage <{{ stage }}/{{ stage_kube }}>" debug: msg: "{{ stage_server_infos }}" - delegate_to: 127.0.0.1 tags: - always when: - debug -- name: "Reading server id for {{ inventory_hostname }}" - set_fact: - stage_server_id: "{{ stage_server_infos | json_query(querystr) | first | default('') }}" - vars: - querystr: "[?name=='{{ inventory_hostname }}'].id" - delegate_to: 127.0.0.1 - tags: - - always - -- name: "Reading public ip address for {{ inventory_hostname }}" +- name: "Reading stage infos for stage <{{ stage }}/{{ stage_kube }}>" set_fact: - stage_server_ip: "{{ stage_server_infos | json_query(querystr) | first | default('') }}" + stage_server_id: "{{ stage_server_infos | json_query(querystr1) | first | default('') }}" + stage_server_ip: "{{ stage_server_infos | json_query(querystr2) | first | default('') }}" + stage_private_server_ip: "{{ stage_server_infos | json_query(querystr3) | first | default('') }}" vars: - querystr: "[?name=='{{ inventory_hostname }}'].public_ip" - delegate_to: 127.0.0.1 + querystr1: "[?name=='{{ inventory_hostname }}'].id" + querystr2: "[?name=='{{ inventory_hostname }}'].public_ip" + querystr3: "[?name=='{{ inventory_hostname }}'].private_ip" tags: - always -- name: "Reading private ip address for {{ inventory_hostname }}" - set_fact: - stage_private_server_ip: "{{ stage_server_infos | json_query(querystr) | first | default('') }}" - vars: - querystr: "[?name=='{{ inventory_hostname }}'].private_ip" - delegate_to: 127.0.0.1 - tags: - - always - -- name: "Printing ip addresses for {{ inventory_hostname }}" +- name: "Printing autodicoverd values for <{{ inventory_hostname }}> on stage <{{ stage }}/{{ stage_kube }}>" debug: - msg: "{{ stage_server_id }} / {{ stage_server_ip }} / {{ stage_private_server_ip }}" - delegate_to: 127.0.0.1 - tags: - - always -# when: -# - debug - -- name: "Printing groups for {{ inventory_hostname }}" - debug: - msg: "{{ group_names }}" - delegate_to: 127.0.0.1 + msg: + - "host: <{{ inventory_hostname }}>" + - "server id: <{{ stage_server_id }}>" + - "server ip (public): <{{ stage_server_ip }}>" + - "server ip (private): <{{ stage_private_server_ip }}>" + - "server groups: <{{ group_names | join(',') }}>" + - "network id: <{{ stage_network_id }}>" + - "ingess public ip: <{{ shared_service_kube_loadbalancer_public_ip }}>" + - "ingess private ip: <{{ shared_service_kube_loadbalancer_public_ip }}>" + - "logstash public ip: <{{ shared_service_loadbalancer_logstash_public_ip }}>" + - "logstash private ip: <{{ shared_service_loadbalancer_logstash_private_ip }}>" tags: - always -# when: -# - debug