Create an Azure SQL server with Entra-only auth and a database. Args: resource_group (str): The resource group name. location (str): The Azure region. server_name (str): The SQL server name. database_name (str): The database name. tags (list[str] | N
(
*,
resource_group: str,
location: str,
server_name: str,
database_name: str,
tags: list[str] | None = None,
)
| 294 | |
| 295 | |
| 296 | def create_sql_server_and_db( |
| 297 | *, |
| 298 | resource_group: str, |
| 299 | location: str, |
| 300 | server_name: str, |
| 301 | database_name: str, |
| 302 | tags: list[str] | None = None, |
| 303 | ) -> dict: |
| 304 | """ |
| 305 | Create an Azure SQL server with Entra-only auth and a database. |
| 306 | |
| 307 | Args: |
| 308 | resource_group (str): The resource group name. |
| 309 | location (str): The Azure region. |
| 310 | server_name (str): The SQL server name. |
| 311 | database_name (str): The database name. |
| 312 | tags (list[str] | None): Tags in 'Key=Value' format. |
| 313 | |
| 314 | Returns: |
| 315 | dict: A dict with keys 'server_fqdn' and 'database_name'. |
| 316 | """ |
| 317 | # Get current user for Entra admin |
| 318 | current_user = run_az_json( |
| 319 | args=[ |
| 320 | "ad", |
| 321 | "signed-in-user", |
| 322 | "show", |
| 323 | "--query", |
| 324 | "{displayName:displayName, id:id}", |
| 325 | ] |
| 326 | ) |
| 327 | |
| 328 | logger.info("Creating SQL server: %s (Entra admin: %s)", server_name, current_user["displayName"]) |
| 329 | sql_server_cmd = [ |
| 330 | "sql", |
| 331 | "server", |
| 332 | "create", |
| 333 | "--name", |
| 334 | server_name, |
| 335 | "--resource-group", |
| 336 | resource_group, |
| 337 | "--location", |
| 338 | location, |
| 339 | "--enable-ad-only-auth", |
| 340 | "--external-admin-principal-type", |
| 341 | "User", |
| 342 | "--external-admin-name", |
| 343 | current_user["displayName"], |
| 344 | "--external-admin-sid", |
| 345 | current_user["id"], |
| 346 | ] |
| 347 | if tags: |
| 348 | sql_server_cmd += ["--tags"] + tags |
| 349 | run_az(args=sql_server_cmd) |
| 350 | |
| 351 | server_fqdn = run_az_json( |
| 352 | args=[ |
| 353 | "sql", |
no test coverage detected