Skip to content

Commit 50d1412

Browse files
Add IPA IPA Trust Topology Controller
Add "IPATrustIPA" KnownTopology For topology groups some changes are: - Remove "IPATrust" - Add "IPATrustAD" -- includes IPATrustAD and IPATrustSamba - Add "AnyIPATrust" -- includes IPATrustAD, IPATrustSamba, IPATrustIPA
1 parent 7542de7 commit 50d1412

File tree

5 files changed

+107
-2
lines changed

5 files changed

+107
-2
lines changed

sssd_test_framework/roles/ad.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ def fqn(self, name: str) -> str:
143143
"""
144144
return f"{name}@{self.domain}"
145145

146+
def admin_fqn(self) -> str:
147+
"""
148+
Return fully qualified administrator name in form name@domain.
149+
"""
150+
return f"administrator@{self.domain}"
151+
146152
def user(self, name: str, basedn: ADObject | str | None = "cn=users") -> ADUser:
147153
"""
148154
Get user object.

sssd_test_framework/roles/ipa.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,18 @@ def setup(self) -> None:
137137
super().setup()
138138
self.host.kinit()
139139

140+
def fqn(self, name: str) -> str:
141+
"""
142+
Return fully qualified name in form name@domain.
143+
"""
144+
return f"{name}@{self.domain}"
145+
146+
def admin_fqn(self) -> str:
147+
"""
148+
Return fully qualified admin name in form name@domain.
149+
"""
150+
return f"admin@{self.domain}"
151+
140152
def user(self, name: str) -> IPAUser:
141153
"""
142154
Get user object.

sssd_test_framework/roles/samba.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ def fqn(self, name: str) -> str:
122122
"""
123123
return f"{name}@{self.domain}"
124124

125+
def admin_fqn(self) -> str:
126+
"""
127+
Return fully qualified administrator name in form name@domain.
128+
"""
129+
return f"administrator@{self.domain}"
130+
125131
def user(self, name: str) -> SambaUser:
126132
"""
127133
Get user object.

sssd_test_framework/topology.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
IPATopologyController,
1515
IPATrustADTopologyController,
1616
IPATrustSambaTopologyController,
17+
IPATrustIPATopologyController,
1718
LDAPTopologyController,
1819
SambaTopologyController,
1920
)
@@ -118,6 +119,17 @@ def test_ldap(client: Client, ldap: LDAP):
118119
.. topology-mark:: KnownTopology.IPATrustSamba
119120
"""
120121

122+
IPATrustIPA = SSSDTopologyMark(
123+
name="ipa-trust-ipa",
124+
topology=Topology(TopologyDomain("sssd", client=1, ipa=2)),
125+
controller=IPATrustIPATopologyController(),
126+
domains=dict(test="sssd.ipa[0]"),
127+
fixtures=dict(client="sssd.client[0]", ipa="sssd.ipa[0]", trusted="sssd.ipa[1]"),
128+
)
129+
"""
130+
.. topology-mark:: KnownTopology.IPATrustIPA
131+
"""
132+
121133

122134
class KnownTopologyGroup(KnownTopologyGroupBase):
123135
"""
@@ -145,7 +157,12 @@ def test_ldap(client: Client, provider: GenericProvider):
145157
.. topology-mark:: KnownTopologyGroup.AnyAD
146158
"""
147159

148-
IPATrust = [KnownTopology.IPATrustAD, KnownTopology.IPATrustSamba]
160+
IPATrustAD = [KnownTopology.IPATrustAD, KnownTopology.IPATrustSamba]
161+
"""
162+
.. topology-mark:: KnownTopologyGroup.IPATrustAD
149163
"""
150-
.. topology-mark:: KnownTopologyGroup.IPATrust
164+
165+
AnyIPATrust = [KnownTopology.IPATrustAD, KnownTopology.IPATrustSamba, KnownTopology.IPATrustIPA]
151166
"""
167+
.. topology-mark:: KnownTopologyGroup.IPATrustIPA
168+
"""

sssd_test_framework/topology_controllers.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"SambaTopologyController",
2323
"IPATrustADTopologyController",
2424
"IPATrustSambaTopologyController",
25+
"IPATrustIPATopologyController",
2526
]
2627

2728

@@ -250,3 +251,66 @@ class IPATrustSambaTopologyController(IPATrustADTopologyController):
250251
"""
251252

252253
pass
254+
255+
class IPATrustIPATopologyController(BackupTopologyController):
256+
"""
257+
IPA trust IPA Topology Controller.
258+
"""
259+
260+
@restore_vanilla_on_error
261+
def topology_setup(self, client: ClientHost, ipa: IPAHost, trusted: IPAHost) -> None:
262+
if self.provisioned:
263+
self.logger.info(f"Topology '{self.name}' is already provisioned")
264+
return
265+
266+
267+
# Add ipa-ipa trust COPR and update packages
268+
self.logger.info(f"Adding COPR and updating packages")
269+
ipa.ssh.exec(
270+
["dnf", "copr", "enable", "abbra/wip-ipa-trust", "-y"]
271+
)
272+
client.ssh.exec(
273+
["dnf", "copr", "enable", "abbra/wip-ipa-trust", "-y"]
274+
)
275+
276+
277+
ipa.ssh.exec(
278+
["dnf", "update", "freeipa-server", "sssd-client", "-y"]
279+
)
280+
client.ssh.exec(
281+
["dnf", "update", "sssd-client", "-y"]
282+
)
283+
284+
# F40 sssd-kcm fails to start with 'Invalid option --genconf-section=kcm:'
285+
ipa.ssh.exec(
286+
["systemctl", "restart", "sssd-kcm"]
287+
)
288+
289+
# Create trust
290+
self.logger.info(f"Establishing trust between {ipa.domain} and {trusted.domain}")
291+
292+
ipa.kinit()
293+
ipa.ssh.exec(
294+
["ipa", "trust-add", trusted.domain, "--admin", "admin", "--password",
295+
"--range-type=ipa-ad-trust-posix", "--two-way=true"], input=trusted.adminpw
296+
)
297+
298+
# Do not enroll client into IPA domain if it is already joined
299+
if "ipa" not in self.multihost.provisioned_topologies:
300+
self.logger.info(f"Enrolling {client.hostname} into {ipa.domain}")
301+
302+
# Remove any existing Kerberos configuration and keytab
303+
client.fs.rm("/etc/krb5.conf")
304+
client.fs.rm("/etc/krb5.keytab")
305+
306+
# Backup ipa-client-install files
307+
client.fs.backup("/etc/ipa")
308+
client.fs.backup("/var/lib/ipa-client")
309+
310+
# Join IPA domain)
311+
client.ssh.exec(["realm", "join", ipa.domain], input=ipa.adminpw)
312+
313+
# Backup so we can restore to this state after each test
314+
self.backup_data[ipa] = ipa.backup()
315+
self.backup_data[trusted] = trusted.backup()
316+
self.backup_data[client] = client.backup()

0 commit comments

Comments
 (0)