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