sync dari sicabe-doc/deploy @ e8f8fde
This commit is contained in:
@@ -145,6 +145,47 @@ def external_address(doc: dict, service: str) -> str | None:
|
||||
return a or None
|
||||
|
||||
|
||||
# Port default per skema — dipakai parse_address() bila operator menulis URL penuh
|
||||
# TANPA port (mis. `https://sso.example.com` → port 443).
|
||||
_DEFAULT_SCHEME_PORT = {
|
||||
"https": 443, "http": 80, "ldaps": 636, "ldap": 389,
|
||||
"postgres": 5432, "postgresql": 5432,
|
||||
}
|
||||
|
||||
|
||||
def parse_address(addr: str) -> tuple[str, str, int | None]:
|
||||
"""Pisah alamat komponen → (skema, host, port).
|
||||
|
||||
Menerima dua bentuk:
|
||||
- **URL penuh** (skema eksplisit): `https://sso.example.com` → ('https','sso.example.com',443)
|
||||
`http://minio.corp:9000` → ('http','minio.corp',9000)
|
||||
- **host/IP polos** (perilaku lama): `sso.example.com` → ('','sso.example.com',None)
|
||||
`10.20.0.10` → ('','10.20.0.10',None)
|
||||
|
||||
Skema non-standar diterima apa adanya; path (`/foo`) dibuang.
|
||||
"""
|
||||
a = (addr or "").strip()
|
||||
scheme = ""
|
||||
if "://" in a:
|
||||
scheme, a = a.split("://", 1)
|
||||
scheme = scheme.strip().lower()
|
||||
a = a.split("/", 1)[0] # buang path bila ada
|
||||
host, sep, port_s = a.rpartition(":")
|
||||
# host:port HANYA bila tepat satu ':' dan port numerik — melindungi IPv6
|
||||
# (mis. `2001:db8::1`) agar tak salah dipecah.
|
||||
if sep and port_s.isdigit() and a.count(":") == 1:
|
||||
host, port = host, int(port_s)
|
||||
else:
|
||||
host, port = a, _DEFAULT_SCHEME_PORT.get(scheme)
|
||||
return scheme, host, port
|
||||
|
||||
|
||||
def external_host(doc: dict, service: str) -> str | None:
|
||||
"""HOST saja (tanpa skema/port) dari alamat eksternal — untuk var `*_HOST`."""
|
||||
a = external_address(doc, service)
|
||||
return parse_address(a)[1] if a else None
|
||||
|
||||
|
||||
def resolve(doc: dict) -> dict[str, list[str]]:
|
||||
"""Komponen → daftar host (tier `engine` bisa >1 host). Komponen EKSTERNAL
|
||||
(ber-`address`) TIDAK masuk hasil — ia bukan milik host mana pun."""
|
||||
|
||||
Reference in New Issue
Block a user