Skip to content

Commit

Permalink
IDview
Browse files Browse the repository at this point in the history
Signed-off-by: Madhuri Upadhye <mupadhye@redhat.com>
  • Loading branch information
madhuriupadhye committed Jan 28, 2025
1 parent ebd77c8 commit 058adbf
Showing 1 changed file with 214 additions and 0 deletions.
214 changes: 214 additions & 0 deletions sssd_test_framework/roles/ipa.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,11 @@ def test_example(client: Client, ipa: IPA):
"""
return IPASudoRule(self, name)

def idview(self, name:str) -> IPAIdView:
return IPAIdView(self, name)

#def idoverride(self, name:str) -> IPAIdOverride:
# return IPAIdOverride(self, name)

class IPAObject(BaseObject[IPAHost, IPA]):
"""
Expand Down Expand Up @@ -641,6 +646,116 @@ def passkey_remove(self, passkey_mapping: str) -> IPAUser:
self._exec("remove-passkey", [passkey_mapping])
return self

def idoverrideuser(self, name: str) -> IPAUserIDOverride:
return IPAUserIDOverride(self, name)


class IPAUserIDOverride(IPAUser):
"""
IPA User ID override management.
"""

def __init__(self, role: IPA, name:str) -> None:
"""
:param role: IPA role object.
:type role: IPA
:param name: Username.
:type name: str
"""
super().__init__(role)
self.name: str = name
#self.name:str = anchor_name
"""Anchor name"""


def add_id_override(
self,
view_name: str,
*,
description: str | None = None,
login: str | None = None,
uid: int | None = None,
gid: int | None = None,
gecos: str | None = None,
home_directory: str | None = None,
shell: str | None = None,
ssh_public_key: str | None = None,
certificate: str | None = None,
) -> IPAUserIDOverride:
"""
Add an ID override for an IPA user.
:param uid: Override for user ID, defaults to None
:type uid: int | None, optional
:param gid: Override for group ID, defaults to None
:type gid: int | None, optional
:param gecos: Override for GECOS, defaults to None
:type gecos: str | None, optional
:param home: Override for home directory, defaults to None
:type home: str | None, optional
:param shell: Override for login shell, defaults to None
:type shell: str | None, optional
:return: Self.
:rtype: IPAUserIDOverride
"""

self.role.host.conn.run(
f"ipa idoverrideuser-add {view_name} {self.name}"
+ (f' --desc="{description}"' if description else "")
+ (f' --login="{login}"' if login else "")
+ (f' --uid="{uid}"' if uid else "")
+ (f' --gidnumber="{gid}"' if gid else "")
+ (f' --gecos="{gecos}"' if gecos else "")
+ (f' --homedir="{home_directory}"' if home_directory else "")
+ (f' --shell="{shell}"' if shell else "")
+ (f' --sshpubkey="{ssh_public_key}"' if ssh_public_key else "")
+ (f' --certificate="{certificate}"' if certificate else "")
)
return self

def modify_id_override(
self,
*,
uid: int | None = None,
gid: int | None = None,
gecos: str | None = None,
home: str | None = None,
shell: str | None = None,
) -> IPAUserIDOverride:
"""
Modify an ID override for an IPA user.
:param uid: Override for user ID, defaults to None
:type uid: int | None, optional
:param gid: Override for group ID, defaults to None
:type gid: int | None, optional
:param gecos: Override for GECOS, defaults to None
:type gecos: str | None, optional
:param home: Override for home directory, defaults to None
:type home: str | None, optional
:param shell: Override for login shell, defaults to None
:type shell: str | None, optional
:return: Self.
:rtype: IPAUserIDOverride
"""
attrs = {
"uid": (self.cli.option.VALUE, uid),
"gidnumber": (self.cli.option.VALUE, gid),
"gecos": (self.cli.option.VALUE, gecos),
"homedir": (self.cli.option.VALUE, home),
"shell": (self.cli.option.VALUE, shell),
}
self._modify(attrs)
return self

def delete_id_override(self) -> None:
"""
Delete the ID override for an IPA user.
:return: None
"""
self._delete()


class IPAGroup(IPAObject):
"""
Expand Down Expand Up @@ -1597,3 +1712,102 @@ def __get_info(self, info: str | NFSExport | IPAAutomountMap | None) -> str | No
return info.name

return info

class IPAIdView(IPAObject):
"""
IPA id view management.
"""

def __init__(self, role:IPA, name:str) -> None:
super().__init__(role, name, command_group="idview")

def add(self,
*,
description: str | None = None,
) -> IPAIdView:
"""
Create new IPA ID view.
:return: Self.
:rtype: IPAIdView
"""
attrs: CLIBuilderArgs = {
"desc": (self.cli.option.VALUE, description),
}

self._add(attrs)
return self


def modify(
self,
*,
description: str | None = None,
rename: str | None = None,
) -> IPAIdView:
"""
Modify existing IPA ID view.
Parameters that are not set are ignored.
:param description: Description, defaults to None
:type description: str | None, optional
:param rename: Name of IPA ID view, defaults to None
:type rename: str | None, optional
:return: Self.
:rtype: IPAIdView
"""
attrs: CLIBuilderArgs = {
"desc": (self.cli.option.VALUE, description),
"rename": (self.cli.option.VALUE, rename),
}

self._modify(attrs)
return self

def apply(self, *, hosts: list[str] | None = None, hostgroups: str | None = None) -> IPAIdView:
"""
Applies ID View to specified hosts or current members of specified
hostgroups. If any other ID View is applied to the host, it is overridden.
:param hosts: Hosts to apply the ID View to, defaults to None
:type hosts: list[str] | None
:param hostgroups: Hostgroups to apply the ID View to, defaults to None
:type hostgroups: str | None
:return: IPAIdView object.
:rtype: IPAIdView
"""
if not hosts and not hostgroups:
raise ValueError(
"Either 'hosts' or 'hostgroups' must be provided.")

attrs: CLIBuilderArgs = {}
if hosts:
attrs["hosts"] = (self.cli.option.VALUE, hosts)
if hostgroups:
attrs["hostgroups"] = (self.cli.option.VALUE, hostgroups)

self._exec("apply", self.cli.args(attrs))
return self
'''
class IPAIdOverride(IPAObject):
def __init__(self, role:IPA, name:str) -> None:
super().__init__(role, name, command_group="")
def add(self,
*,
description: str | None = None,
) -> IPAIdView:
"""
Create new IPA ID view.
:return: Self.
:rtype: IPAIdView
"""
attrs: CLIBuilderArgs = {
"desc": (self.cli.option.VALUE, description),
}
self._add(attrs)
return self
'''

0 comments on commit 058adbf

Please sign in to comment.