diff --git a/group_vars/stage_dev/plain.yml b/group_vars/stage_dev/plain.yml index 23c1483..6f335c2 100644 --- a/group_vars/stage_dev/plain.yml +++ b/group_vars/stage_dev/plain.yml @@ -131,7 +131,7 @@ shared_service_kube_node_03: "{{ stage_server_infos | first | default('-') }}" -shared_service_kube_prometheus_ip: 10.0.0.20 +shared_service_kube_ip: "{{ stage_private_ingress_loadbalancer_ip }}" shared_service_maria_hostname: "{{ stage }}-maria-01" shared_service_postgres_01_hostname: "{{ stage }}-postgres-01" @@ -248,7 +248,7 @@ shared_service_hosts: [ name: "{{ shared_service_pdns_hostname }}" }, { - ip: "{{ shared_service_kube_prometheus_ip }}", + ip: "{{ shared_service_kube_ip }}", name: "{{ shared_service_kube_prometheus_hostname }}" } ] diff --git a/group_vars/stage_prodnso/plain.yml b/group_vars/stage_prodnso/plain.yml index ae97db4..fa9abb6 100644 --- a/group_vars/stage_prodnso/plain.yml +++ b/group_vars/stage_prodnso/plain.yml @@ -131,9 +131,8 @@ shared_service_kube_node_03: "{{ stage_server_infos | first | default('-') }}" - prometheus_federation_enabled: false -shared_service_kube_prometheus_ip: 10.1.0.26 +shared_service_kube_ip: "{{ stage_private_ingress_loadbalancer_ip }}" shared_service_maria_hostname: "{{ stage }}-maria-01" shared_service_postgres_01_hostname: "{{ stage }}-postgres-01" @@ -250,7 +249,7 @@ shared_service_hosts: [ name: "{{ shared_service_pdns_hostname }}" }, { - ip: "{{ shared_service_kube_prometheus_ip }}", + ip: "{{ shared_service_kube_ip }}", name: "{{ shared_service_kube_prometheus_hostname }}" } ] diff --git a/group_vars/stage_qa/plain.yml b/group_vars/stage_qa/plain.yml index 49d55d0..af67a33 100644 --- a/group_vars/stage_qa/plain.yml +++ b/group_vars/stage_qa/plain.yml @@ -131,7 +131,7 @@ shared_service_kube_node_03: "{{ stage_server_infos | first | default('-') }}" -shared_service_kube_prometheus_ip: 10.1.0.26 +shared_service_kube_ip: "{{ stage_private_ingress_loadbalancer_ip }}" shared_service_maria_hostname: "{{ stage }}-maria-01" shared_service_postgres_01_hostname: "{{ stage }}-postgres-01" @@ -248,7 +248,7 @@ shared_service_hosts: [ name: "{{ shared_service_pdns_hostname }}" }, { - ip: "{{ shared_service_kube_prometheus_ip }}", + ip: "{{ shared_service_kube_ip }}", name: "{{ shared_service_kube_prometheus_hostname }}" } ] diff --git a/inventory_plugins/netgo-hcloud.py b/inventory_plugins/netgo-hcloud.py index 7c1b173..d7ffb32 100644 --- a/inventory_plugins/netgo-hcloud.py +++ b/inventory_plugins/netgo-hcloud.py @@ -27,6 +27,11 @@ DOCUMENTATION = r""" required: true env: - name: HETZNER_CLOUD_TOKEN + stage: + description: Filter servers by this stage. + required: true + env: + - name: HETZNER_STAGE label_selector: description: Filter servers by this label selector. required: true @@ -47,7 +52,7 @@ class MyHcloudAPI: BASE = "https://api.hetzner.cloud" - def __init__(self, token, label_selector): + def __init__(self, token, label_selector=None): self.token = token self.label_selector = label_selector @@ -61,7 +66,12 @@ class MyHcloudAPI: page = 1 page_size = 20 while page > 0: - api_url = "{}/{}?label_selector={}&per_page={}&page={}".format(self.BASE, api_path, self.label_selector, str(page_size), str(page)) + api_url = "" + if not self.label_selector: + api_url = "{}/{}?per_page={}&page={}".format(self.BASE, api_path, str(page_size), str(page)) + else: + api_url = "{}/{}?label_selector={}&per_page={}&page={}".format(self.BASE, api_path, self.label_selector, str(page_size), str(page)) + display.display(api_url) response = open_url( @@ -86,6 +96,9 @@ class MyHcloudAPI: def get_networks(self): return self.get_values("v1/networks", "networks") + def get_loadbalancers(self): + return self.get_values("v1/load_balancers", "load_balancers") + class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): NAME = "netgo-hcloud" @@ -107,6 +120,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): ).get_networks() return networks + def _read_loadbalancers_from_API(self): + loadbalancers = MyHcloudAPI( + self.get_option("api_token") + ).get_loadbalancers() + return loadbalancers + def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path, cache) config = self._read_config_data(path) @@ -143,9 +162,11 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): networks = self._read_networks_from_API() - self.populate(servers, networks) + loadbalancers = self._read_loadbalancers_from_API() - def populate(self, servers, networks): + self.populate(servers, networks, loadbalancers) + + def populate(self, servers, networks, loadbalancers): display = Display() # Add a default top group 'hcloud' @@ -153,6 +174,21 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): self.inventory.add_group(group="etcd") self.inventory.add_group(group="k8s_cluster") + loadbalancerPublicIp = "-" + loadbalancerPrivateIp = "-" + + # filter all loadbalancers by naming convention -> {{ stage }}-ingress + ingressLoadbalancers = [lb for lb in loadbalancers if lb["name"] == self.get_option("stage") + "-ingress"] + + for loadbalancer in ingressLoadbalancers: + loadbalancerId = loadbalancer["id"] + loadbalancerName = loadbalancer["name"] + loadbalancerLabels = loadbalancer["labels"] + loadbalancerPublicIp = loadbalancer["public_net"]["ipv4"]["ip"] + loadbalancerPrivateIp = loadbalancer["private_net"][0]["ip"] + + display.display("loadbalancer:<" + loadbalancerName + ">, publicIp=<" + loadbalancerPublicIp + ">, privateIp=<" + loadbalancerPrivateIp + ">") + for server in servers: serverId = server["id"] serverName = server["name"] @@ -170,7 +206,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): if networkId == privateNet["network"]: serverPrivateIp = privateNet["ip"] - display.display("server:<" + serverName + ">, stage=<" + serverStage + ">, service=<" + serverService + ">, publicIp=<" + serverPublicIp + ">, privateIp=<" + serverPrivateIp + ">") + display.display("server:<" + serverName + ">, stage=<" + serverStage + ">, service=<" + serverService + ">, publicIp=<" + serverPublicIp + ">, privateIp=<" + serverPrivateIp + ">, publicIngressLBIp=<" + loadbalancerPublicIp + ">, privateIngressLBIp=<" + loadbalancerPrivateIp + ">") self.inventory.add_group(group=serverService) self.inventory.add_group(group="stage_" + serverStage) @@ -188,3 +224,5 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): self.inventory.set_variable(serverName, 'stage_server_ip', serverPublicIp) self.inventory.set_variable(serverName, 'ansible_ssh_host', serverPublicIp) self.inventory.set_variable(serverName, 'stage_private_server_ip', serverPrivateIp) + self.inventory.set_variable(serverName, 'stage_ingress_loadbalancer_ip', loadbalancerPublicIp) + self.inventory.set_variable(serverName, 'stage_private_ingress_loadbalancer_ip', loadbalancerPrivateIp) diff --git a/stage-dev-netgo-hcloud.yml b/stage-dev-netgo-hcloud.yml index 662d885..efeaf2d 100644 --- a/stage-dev-netgo-hcloud.yml +++ b/stage-dev-netgo-hcloud.yml @@ -11,7 +11,8 @@ plugin: netgo-hcloud -label_selector: "stage=dev" +stage: "dev" +label_selector: "stage=dev" # jinja isn't available here api_token: !vault | $ANSIBLE_VAULT;1.1;AES256 diff --git a/stage-prodnso-netgo-hcloud.yml b/stage-prodnso-netgo-hcloud.yml index fa65d8e..9b99289 100644 --- a/stage-prodnso-netgo-hcloud.yml +++ b/stage-prodnso-netgo-hcloud.yml @@ -11,7 +11,8 @@ plugin: netgo-hcloud -label_selector: "stage=prodnso" +stage: "prodnso" +label_selector: "stage=prodnso" # jinja isn't available here api_token: !vault | $ANSIBLE_VAULT;1.1;AES256 diff --git a/stage-qa-netgo-hcloud.yml b/stage-qa-netgo-hcloud.yml index 584cbe2..dd68027 100644 --- a/stage-qa-netgo-hcloud.yml +++ b/stage-qa-netgo-hcloud.yml @@ -11,7 +11,8 @@ plugin: netgo-hcloud -label_selector: "stage=qa" +stage: "qa" +label_selector: "stage=qa" # jinja isn't available here api_token: !vault | $ANSIBLE_VAULT;1.1;AES256