@@ -826,6 +826,63 @@ def __init__(self, user: IPAUser) -> None:
826826 super ().__init__ (user .role , user .name )
827827 self .name = user .name
828828
829+ def add_override_template (
830+ self ,
831+ idview_name : str ,
832+ * ,
833+ home : str | None = None ,
834+ shell : str | None = None ,
835+ domain_name : str | None = None ,
836+ global_template : bool = False ,
837+ ** kwargs ,
838+ ) -> ProcessResult [ProcessError ]:
839+ """
840+ Add a new User ID override.
841+
842+ :param idview_name: Name of IDView.
843+ :type idview_name: str
844+ :param description: Description.
845+ :type description: str | None, defaults to None
846+ :param home: Overridden Home directory.
847+ :type home: str | None, defaults to None
848+ :param shell: Overridden Login shell.
849+ :type shell: str | None, defaults to None
850+ :param domain_name: Override template Domain name. Assumes domain template will be added.
851+ :type domain_name: str | None, defaults to None
852+ :param global_template: Global template override.
853+ :type global_template: bool, defaults to False.
854+ :return: ProcessResult
855+ :rtype: ProcessResult[ProcessError]
856+ """
857+
858+ if domain_name and global_template :
859+ raise ValueError ("Cannot add ID override template that is domain AND global." )
860+
861+ attrs : CLIBuilderArgs = {
862+ "homedir" : (self .cli .option .VALUE , home ),
863+ "shell" : (self .cli .option .VALUE , shell ),
864+ }
865+
866+ if kwargs :
867+ unexpected_keys = ",d " .join (kwargs .keys ())
868+ raise TypeError (f"Unexpected keyword arguments: { unexpected_keys } " )
869+
870+ # Create the ID override first
871+ if domain_name :
872+ result = self .role .host .conn .exec (
873+ ["ipa" , "idoverrideuser-add" , idview_name , "*" , "--template" , domain_name ]
874+ + to_list_without_none (self .cli .args (attrs )),
875+ raise_on_error = False ,
876+ )
877+ elif global_template :
878+ result = self .role .host .conn .exec (
879+ ["ipa" , "idoverrideuser-add" , idview_name , "*" , "--global-template" ]
880+ + to_list_without_none (self .cli .args (attrs )),
881+ raise_on_error = False ,
882+ )
883+
884+ return result
885+
829886 def add_override (
830887 self ,
831888 idview_name : str ,
0 commit comments