Skip to content

Commit 3db7337

Browse files
sumit-bosepbrezina
authored andcommitted
topologies: add keycloak topology
1 parent 2f39336 commit 3db7337

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

sssd_test_framework/topology.py

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

122+
Keycloak = SSSDTopologyMark(
123+
name="keycloak",
124+
topology=Topology(TopologyDomain("sssd", client=1, keycloak=1)),
125+
controller=KeycloakTopologyController(),
126+
fixtures=dict(
127+
client="sssd.client[0]",
128+
keycloak="sssd.keycloak[0]",
129+
),
130+
)
131+
"""
132+
.. topology-mark:: KnownTopology.Keycloak
133+
"""
134+
121135

122136
class KnownTopologyGroup(KnownTopologyGroupBase):
123137
"""

sssd_test_framework/topology_controllers.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from .hosts.ad import ADHost
88
from .hosts.client import ClientHost
99
from .hosts.ipa import IPAHost
10+
from .hosts.keycloak import KeycloakHost
1011
from .hosts.samba import SambaHost
1112
from .misc.ssh import retry_command
1213

@@ -17,6 +18,7 @@
1718
"SambaTopologyController",
1819
"IPATrustADTopologyController",
1920
"IPATrustSambaTopologyController",
21+
"KeycloakTopologyController",
2022
]
2123

2224

@@ -173,3 +175,45 @@ class IPATrustSambaTopologyController(IPATrustADTopologyController):
173175
"""
174176

175177
pass
178+
179+
180+
class KeycloakTopologyController(ProvisionedBackupTopologyController):
181+
"""
182+
Keycloak Topology Controller.
183+
"""
184+
185+
@BackupTopologyController.restore_vanilla_on_error
186+
def topology_setup(self, client: ClientHost, keycloak: KeycloakHost) -> None:
187+
if self.provisioned:
188+
self.logger.info(f"Topology '{self.name}' is already provisioned")
189+
return
190+
191+
self.logger.info(f"Enrolling {client.hostname} into {keycloak.hostname} by creating an IdP client")
192+
193+
# Create an IdP client
194+
keycloak.kclogin()
195+
keycloak.conn.run(
196+
"/opt/keycloak/bin/kcadm.sh create clients -r master "
197+
'-b \'{"clientId": "myclient", "clientAuthenticatorType": "client-secret", '
198+
'"secret": "ClientSecret123", "serviceAccountsEnabled": true, '
199+
'"attributes": {"oauth2.device.authorization.grant.enabled": "true"}}\' '
200+
)
201+
keycloak.conn.run(
202+
"/opt/keycloak/bin/kcadm.sh add-roles -r master "
203+
"--cclientid account --rolename view-groups --uusername service-account-myclient"
204+
)
205+
keycloak.conn.run(
206+
"/opt/keycloak/bin/kcadm.sh add-roles -r master "
207+
"--cclientid master-realm --rolename view-users --uusername service-account-myclient"
208+
)
209+
keycloak.conn.run(
210+
"/opt/keycloak/bin/kcadm.sh add-roles -r master "
211+
"--cclientid master-realm --rolename query-users --uusername service-account-myclient"
212+
)
213+
keycloak.conn.run(
214+
"/opt/keycloak/bin/kcadm.sh add-roles -r master "
215+
"--cclientid master-realm --rolename query-groups --uusername service-account-myclient"
216+
)
217+
218+
# Backup so we can restore to this state after each test
219+
super().topology_setup()

0 commit comments

Comments
 (0)