feat: extended hetzner auto discover

- filtering for current stage by label_selector (stage={{ stage}})
- reading server infos for current stage:
  stage_server_infos:
    {
      name: ...
      public_ip: ...
      private_ip: ...
    }
    ...
master
Sven Ketelsen 4 years ago
parent ba82159df3
commit 0e498bba14

@ -1,48 +1,105 @@
--- ---
- name: Fetch private_ips
- name: "Reading hetzner server infos for stage <{{ stage }}>"
uri: uri:
url: https://api.hetzner.cloud/v1/servers?page=1' url: "https://api.hetzner.cloud/v1/servers?label_selector=stage={{ stage }}"
method: GET method: GET
headers: headers:
authorization: Bearer {{ hetzner_authentication_token }} authorization: Bearer {{ hetzner_authentication_token }}
register: dings register: hetzner_servers
delegate_to: 127.0.0.1 delegate_to: 127.0.0.1
become: false become: false
tags: tags:
- autodiscover - autodiscover
- name: "Reading private ip address for {{ inventory_hostname }}" - name: "Printing hetzner server infos for stage <{{ stage }}>"
debug:
msg: "{{ hetzner_servers.json.servers }}"
delegate_to: 127.0.0.1
become: false
tags:
- autodiscover
when:
- debug
- name: "Reading hetzner server infos for stage <{{ stage }}>"
set_fact: set_fact:
stage_private_server_ip: "{{ dings.json.servers | json_query(querystr) | first }}" stage_server_infos: "{{ hetzner_servers.json.servers | json_query(querystr) | default([]) }}"
vars: vars:
querystr: "[?name=='{{ inventory_hostname }}'].private_net[0].ip" querystr: "[*].{ name: name, public_ip: public_net.ipv4.ip, private_ip: private_net[0].ip }"
delegate_to: 127.0.0.1
become: false
tags:
- autodiscover
- name: "Reading hetzner server infos for stage <{{ stage }}>"
debug:
msg: "{{ stage_server_infos }}"
delegate_to: 127.0.0.1
become: false
tags:
- autodiscover
- name: "Reading hetzner private network infos for stage <{{ stage }}>"
uri:
url: "https://api.hetzner.cloud/v1/networks?label_selector=stage={{ stage }}"
method: GET
headers:
authorization: Bearer {{ hetzner_authentication_token }}
register: hetzner_networks
delegate_to: 127.0.0.1
become: false
tags:
- autodiscover
- name: "Printing hetzner private network infos for stage <{{ stage }}>"
debug:
msg: "{{ hetzner_networks.json.networks }}"
delegate_to: 127.0.0.1
become: false
tags:
- autodiscover
when:
- debug
- name: "Reading hetzner private network id for <{{ stage }}>"
set_fact:
stage_private_network_id: "{{ hetzner_networks.json.networks | json_query(querystr) | first }}"
vars:
querystr: "[?ip_range=='{{ shared_service_network }}'].id"
delegate_to: 127.0.0.1 delegate_to: 127.0.0.1
become: false become: false
tags: tags:
- autodiscover - autodiscover
- name: "Gathering current server infos from hetzner" - name: "Reading hetzner private network id for <{{ stage }}>"
hcloud_server_info: debug:
api_token: "{{ hetzner_authentication_token }}" msg: "{{ stage_private_network_id }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1 delegate_to: 127.0.0.1
become: false become: false
tags: tags:
- autodiscover - autodiscover
when:
- debug
- name: "Setting current server infos as fact: hetzner_server_infos_json" # TODO always match first private_net network is wrong
# use stage_private_network_id to match the right network
# expression [?network=`{{ stage_private_network_id }}`] does not work
- name: "Reading private ip address for {{ inventory_hostname }}"
set_fact: set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}" stage_private_server_ip: "{{ hetzner_servers.json.servers | json_query(querystr) | first }}"
vars:
querystr: "[?name=='{{ inventory_hostname }}'].private_net[0].ip"
delegate_to: 127.0.0.1 delegate_to: 127.0.0.1
become: false become: false
tags: tags:
- autodiscover - autodiscover
- name: "Reading ip address for {{ inventory_hostname }}" - name: "Reading public ip address for {{ inventory_hostname }}"
set_fact: set_fact:
stage_server_ip: "{{ hetzner_server_infos_json | json_query(querystr) | first }}" stage_server_ip: "{{ hetzner_servers.json.servers | json_query(querystr) | first }}"
vars: vars:
querystr: "[?name=='{{ inventory_hostname }}'].ipv4_address" querystr: "[?name=='{{ inventory_hostname }}'].public_net.ipv4.ip"
delegate_to: 127.0.0.1 delegate_to: 127.0.0.1
become: false become: false
tags: tags:
@ -56,4 +113,4 @@
tags: tags:
- autodiscover - autodiscover
when: when:
- debug - debug
Loading…
Cancel
Save