traefik-helper/src/traefik/traefikConfig.py

117 lines
2.8 KiB
Python
Raw Normal View History

2024-01-15 22:59:08 +00:00
import yaml
class TraefikConfig:
def __init__(self, configFile) -> None:
self.configFile = configFile
with open(configFile, "r") as config:
self.configYml = yaml.safe_load(config)
def isValid(self) -> bool:
return "http" in self.configYml and "routers" in self.configYml["http"] and "services" in self.configYml["http"]
def getRouter(self, name):
return self.configYml["http"]["routers"][name]
def getService(self, name):
return self.configYml["http"]["services"][name]
def addRouter(self, name, domain, serviceHost):
# Add router
self.configYml["http"]["routers"][name] = {
"entryPoints": ["https"],
"rule": "Host(`%s`)" % domain,
"middlewares": ["default-headers", "https-redirectscheme"],
"tls": {},
"service": name
}
# Add service
self.configYml["http"]["services"][name] = {
"loadBalancer": {
"servers": [
{
"url": serviceHost
}
]
}
}
2024-08-28 02:33:32 +01:00
def addSubPathRouter(self, name, domain, path, serviceHost):
self.addPathRewrite(name, path)
# Add router
self.configYml["http"]["routers"][name] = {
"entryPoints": ["https"],
"rule": "Host(`%s`) && PathPrefix(`%s`)" % (domain, path),
"middlewares": ["default-headers", "https-redirectscheme", name],
"tls": {},
"service": name
}
# Add service
self.configYml["http"]["services"][name] = {
"loadBalancer": {
"servers": [
{
"url": serviceHost
}
]
}
}
2024-01-15 22:59:08 +00:00
def removeRouter(self, name):
# Remove router
del self.configYml["http"]["routers"][name]
# Remove service
del self.configYml["http"]["services"][name]
def hasRouter(self, name):
return name in self.configYml["http"]["routers"]
2024-08-28 02:33:32 +01:00
def hasPathRewrite(self, name):
return name in self.configYml["http"]["middlewares"]
2024-01-15 22:59:08 +00:00
2024-08-28 02:33:32 +01:00
def addPathRewrite(self, name, path):
self.configYml["http"]["middlewares"][name] = {
"stripPrefix": {
"prefixes": [path]
2024-01-15 22:59:08 +00:00
}
}
def hasService(self, name):
return name in self.configYml["http"]["services"]
def getRouters(self):
return self.configYml["http"]["routers"]
def getServices(self):
return self.configYml["http"]["services"]
def getAll(self):
domains = {}
routers = self.getRouters()
services = self.getServices()
# Loop through routers
for name, router in routers.items():
# Get domain
domain = router["rule"].split("`")[1]
# Get service host
serviceHost = services[name]["loadBalancer"]["servers"][0]["url"]
# Add to domains
domains[name] = {
"domain": domain,
"serviceHost": serviceHost
}
return domains
def save(self):
with open(self.configFile, "w") as config:
yaml.dump(self.configYml, config)