@@ -181,6 +181,29 @@ def read_ctdb_nodes(path: str = CTDB_NODES) -> list[str]:
181
181
return entries
182
182
183
183
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
+
184
207
def ensure_ctdb_node_present (
185
208
node : str ,
186
209
real_path : str ,
@@ -624,7 +647,10 @@ def _maybe_reload_nodes(
624
647
625
648
626
649
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 ,
628
654
) -> None :
629
655
"""Ensure certain files that ctdbd expects to exist in its etc dir
630
656
do exist.
@@ -637,6 +663,17 @@ def ensure_ctdbd_etc_files(
637
663
legacy_scripts_dst = os .path .join (etc_path , "events/legacy" )
638
664
link_legacy_scripts = ["00.ctdb.script" ]
639
665
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
+
640
677
os .makedirs (etc_path , exist_ok = True )
641
678
try :
642
679
os .unlink (functions_dst )
@@ -660,6 +697,10 @@ def ensure_ctdbd_etc_files(
660
697
pass
661
698
os .symlink (lscript_src , lscript_dst )
662
699
700
+ if public_addresses :
701
+ pa_path = os .path .join (etc_path , "public_addresses" )
702
+ _ensure_public_addresses_file (pa_path , public_addresses )
703
+
663
704
664
705
_SRC_TDB_FILES = [
665
706
"account_policy.tdb" ,
0 commit comments