1717
1818from keycloak import KeycloakAdmin
1919from testcontainers .core .container import DockerContainer
20- from testcontainers .core .waiting_utils import wait_container_is_ready , wait_for_logs
21-
22- _DEFAULT_DEV_COMMAND = "start-dev"
20+ from testcontainers .core .waiting_utils import wait_container_is_ready
2321
2422
2523class KeycloakContainer (DockerContainer ):
2624 has_realm_imports = False
25+ # Since Keycloak v26.0.0
26+ # See: https://www.keycloak.org/server/all-config#category-bootstrap_admin
27+ ADMIN_USERNAME_ENVIRONMENT_VARIABLE = "KC_BOOTSTRAP_ADMIN_USERNAME"
28+ ADMIN_PASSWORD_ENVIRONMENT_VARIABLE = "KC_BOOTSTRAP_ADMIN_PASSWORD"
2729
2830 """
2931 Keycloak container.
@@ -46,19 +48,19 @@ def __init__(
4648 password : Optional [str ] = None ,
4749 port : int = 8080 ,
4850 management_port : int = 9000 ,
49- cmd : Optional [str ] = _DEFAULT_DEV_COMMAND ,
51+ cmd : Optional [str ] = "start-dev" ,
5052 ) -> None :
5153 super ().__init__ (image = image )
52- self .username = username or os .environ .get ("KEYCLOAK_ADMIN" , "test" )
53- self .password = password or os .environ .get ("KEYCLOAK_ADMIN_PASSWORD" , "test" )
54+ self .username = username or os .environ .get (self . ADMIN_USERNAME_ENVIRONMENT_VARIABLE , "test" )
55+ self .password = password or os .environ .get (self . ADMIN_PASSWORD_ENVIRONMENT_VARIABLE , "test" )
5456 self .port = port
5557 self .management_port = management_port
5658 self .with_exposed_ports (self .port , self .management_port )
5759 self .cmd = cmd
5860
5961 def _configure (self ) -> None :
60- self .with_env ("KEYCLOAK_ADMIN" , self .username )
61- self .with_env ("KEYCLOAK_ADMIN_PASSWORD" , self .password )
62+ self .with_env (self . ADMIN_USERNAME_ENVIRONMENT_VARIABLE , self .username )
63+ self .with_env (self . ADMIN_PASSWORD_ENVIRONMENT_VARIABLE , self .password )
6264 # Enable health checks
6365 # see: https://www.keycloak.org/server/health#_relevant_options
6466 self .with_env ("KC_HEALTH_ENABLED" , "true" )
@@ -88,8 +90,6 @@ def _readiness_probe(self) -> None:
8890 except requests .exceptions .ConnectionError :
8991 response = requests .get (f"{ self .get_url ()} /health/ready" , timeout = 1 )
9092 response .raise_for_status ()
91- if _DEFAULT_DEV_COMMAND in self ._command :
92- wait_for_logs (self , "Added user .* to realm .*" )
9393
9494 def start (self ) -> "KeycloakContainer" :
9595 super ().start ()
0 commit comments