Skip to content

Commit 5cba0f2

Browse files
authored
{RDBMS} az postgres flexible-server update: Fix bug not able to enable password authentication during update (#30200)
* generate password and usernmae when switching away from AAD only auth * Prompt for user name when enabling password auth first time during update * Fix styling issue * Fix indent
1 parent 856cb62 commit 5cba0f2

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

src/azure-cli/azure/cli/command_modules/rdbms/flexible_server_custom_postgres.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
from dateutil.tz import tzutc # pylint: disable=import-error
1414
import uuid
1515
from knack.log import get_logger
16+
from knack.prompting import (
17+
prompt
18+
)
1619
from azure.cli.core.commands.client_factory import get_subscription_id
1720
from azure.cli.core.local_context import ALL
1821
from azure.cli.core.util import CLIError, sdk_no_wait, user_confirmation
@@ -121,7 +124,8 @@ def flexible_server_create(cmd, client,
121124
high_availability = postgresql_flexibleservers.models.HighAvailability(mode=high_availability,
122125
standby_availability_zone=standby_availability_zone)
123126

124-
administrator_login_password = generate_password(administrator_login_password)
127+
password_auth_enabled = password_auth.lower() == 'enabled'
128+
administrator_login_password = generate_password(administrator_login_password) if password_auth_enabled else None
125129

126130
identity, data_encryption = build_identity_and_data_encryption(db_engine='postgres',
127131
byok_identity=byok_identity,
@@ -383,14 +387,18 @@ def flexible_server_update_custom_func(cmd, client, instance,
383387
byok_key=byok_key)
384388

385389
auth_config = instance.auth_config
390+
administrator_login = instance.administrator_login if instance.administrator_login else None
386391
if active_directory_auth:
387392
auth_config.active_directory_auth = active_directory_auth
388393
if password_auth:
394+
administrator_login, administrator_login_password = _update_login(server_name, resource_group_name, auth_config,
395+
password_auth, administrator_login, administrator_login_password)
389396
auth_config.password_auth = password_auth
390397

391398
params = ServerForUpdate(sku=instance.sku,
392399
storage=instance.storage,
393400
backup=instance.backup,
401+
administrator_login=administrator_login,
394402
administrator_login_password=administrator_login_password,
395403
maintenance_window=instance.maintenance_window,
396404
network=instance.network,
@@ -1536,6 +1544,20 @@ def _create_migration(cmd, logging_name, client, subscription_id, resource_group
15361544
return client.create(subscription_id, resource_group_name, target_db_server_name, migration_name, migration_parameters)
15371545

15381546

1547+
def _update_login(server_name, resource_group_name, auth_config, password_auth, administrator_login, administrator_login_password):
1548+
if auth_config.password_auth.lower() == 'disabled' and password_auth.lower() == 'enabled':
1549+
administrator_login = administrator_login if administrator_login else prompt('Please enter administrator username for the server. Once set, it cannot be changed: ')
1550+
if not administrator_login:
1551+
raise CLIError('Administrator username is required for enabling password authentication.')
1552+
if not administrator_login_password:
1553+
administrator_login_password = generate_password(administrator_login_password)
1554+
logger.warning('Make a note of password "%s". You can '
1555+
'reset your password with "az postgres flexible-server update -n %s -g %s -p <new-password>".',
1556+
administrator_login_password, server_name, resource_group_name)
1557+
1558+
return administrator_login, administrator_login_password
1559+
1560+
15391561
# pylint: disable=too-many-instance-attributes, too-few-public-methods, useless-object-inheritance
15401562
class DbContext(object):
15411563
def __init__(self, cmd=None, azure_sdk=None, logging_name=None, cf_firewall=None, cf_db=None,

0 commit comments

Comments
 (0)