DEV-358: feat: removed hard coded loadbalancer ips

master
Ketelsen, Sven 4 years ago
parent 243aa4c584
commit 4c777356fd

@ -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 }}"
}
]

@ -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 }}"
}
]

@ -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 }}"
}
]

@ -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 = ""
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)

@ -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

@ -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

@ -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

Loading…
Cancel
Save