Skip to content

Commit 112f5d3

Browse files
phlogistonjohnmergify[bot]
authored andcommitted
sambacc: add public addresses support to ctdb module
Signed-off-by: John Mulligan <[email protected]>
1 parent 36d1e93 commit 112f5d3

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

sambacc/ctdb.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,29 @@ def read_ctdb_nodes(path: str = CTDB_NODES) -> list[str]:
181181
return entries
182182

183183

184+
class PublicAddrAssignment(typing.TypedDict):
185+
address: str
186+
interfaces: list[str]
187+
188+
189+
def _ensure_public_addresses_file(
190+
path: str, addrs: list[PublicAddrAssignment]
191+
) -> None:
192+
with open(path, "w") as fh:
193+
_write_public_addresses_file(fh, addrs)
194+
195+
196+
def _write_public_addresses_file(
197+
fh: typing.IO, addrs: list[PublicAddrAssignment]
198+
) -> None:
199+
for entry in addrs:
200+
fh.write(f"{entry['address']}")
201+
if entry["interfaces"]:
202+
ifaces = " ".join(entry["interfaces"])
203+
fh.write(f" {ifaces}")
204+
fh.write("\n")
205+
206+
184207
def ensure_ctdb_node_present(
185208
node: str,
186209
real_path: str,
@@ -624,7 +647,10 @@ def _maybe_reload_nodes(
624647

625648

626649
def ensure_ctdbd_etc_files(
627-
etc_path: str = ETC_DIR, src_path: str = SHARE_DIR
650+
etc_path: str = ETC_DIR,
651+
src_path: str = SHARE_DIR,
652+
*,
653+
iconfig: typing.Optional[config.InstanceConfig] = None,
628654
) -> None:
629655
"""Ensure certain files that ctdbd expects to exist in its etc dir
630656
do exist.
@@ -637,6 +663,17 @@ def ensure_ctdbd_etc_files(
637663
legacy_scripts_dst = os.path.join(etc_path, "events/legacy")
638664
link_legacy_scripts = ["00.ctdb.script"]
639665

666+
public_addresses: list[PublicAddrAssignment] = []
667+
if iconfig:
668+
ctdb_conf = iconfig.ctdb_config()
669+
# todo: when we have a real config object for ctdb conf we can drop
670+
# the typing.cast
671+
public_addresses = typing.cast(
672+
list[PublicAddrAssignment], ctdb_conf.get("public_addresses", [])
673+
)
674+
if public_addresses:
675+
link_legacy_scripts.append("10.interface.script")
676+
640677
os.makedirs(etc_path, exist_ok=True)
641678
try:
642679
os.unlink(functions_dst)
@@ -660,6 +697,10 @@ def ensure_ctdbd_etc_files(
660697
pass
661698
os.symlink(lscript_src, lscript_dst)
662699

700+
if public_addresses:
701+
pa_path = os.path.join(etc_path, "public_addresses")
702+
_ensure_public_addresses_file(pa_path, public_addresses)
703+
663704

664705
_SRC_TDB_FILES = [
665706
"account_policy.tdb",

0 commit comments

Comments
 (0)