Skip to content

Commit eb0633e

Browse files
authored
[MySQL] Fix #32217: az mysql flexible-server restore: Fix --no-wait flag (#32744)
1 parent 8c0af97 commit eb0633e

File tree

3 files changed

+2653
-11
lines changed

3 files changed

+2653
-11
lines changed

src/azure-cli/azure/cli/command_modules/mysql/custom.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -843,19 +843,29 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
843843
else:
844844
parameters.network = source_server_object.network
845845

846-
except Exception as e:
847-
raise ResourceNotFoundError(e)
848-
849-
resolve_poller(
850-
client.begin_create(resource_group_name, server_name, parameters), cmd.cli_ctx,
851-
'Restore Server')
846+
except HttpResponseError as exc:
847+
raise ResourceNotFoundError(exc) from exc
848+
849+
def _begin_network_update():
850+
restore_server_object = client.get(resource_group_name, server_name)
851+
restore_server_network = restore_server_object.network
852+
restore_server_network.public_network_access = public_access if public_access else source_server_object.network.public_network_access
853+
update_parameter = models.ServerForUpdate(network=restore_server_network)
854+
return client.begin_update(resource_group_name, server_name, update_parameter)
855+
856+
create_poller = sdk_no_wait(no_wait, client.begin_create, resource_group_name, server_name, parameters)
857+
if no_wait:
858+
def _post_create_update(poller):
859+
try:
860+
_begin_network_update()
861+
except (HttpResponseError, CLIError) as ex:
862+
logger.warning('Skipping post-restore network update: %s', ex)
852863

853-
restore_server_object = client.get(resource_group_name, server_name)
854-
restore_server_network = restore_server_object.network
855-
restore_server_network.public_network_access = public_access if public_access else source_server_object.network.public_network_access
856-
update_parameter = models.ServerForUpdate(network=restore_server_network)
864+
create_poller.add_done_callback(_post_create_update)
865+
return create_poller
857866

858-
return sdk_no_wait(no_wait, client.begin_update, resource_group_name, server_name, update_parameter)
867+
resolve_poller(create_poller, cmd.cli_ctx, 'Restore Server')
868+
return sdk_no_wait(no_wait, _begin_network_update)
859869

860870

861871
# pylint: disable=too-many-locals, too-many-statements, raise-missing-from

src/azure-cli/azure/cli/command_modules/mysql/tests/latest/recordings/test_mysql_flexible_server_restore_no_wait_mgmt.yaml

Lines changed: 2609 additions & 0 deletions
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ def test_mysql_flexible_server_georestore_mgmt(self, resource_group):
120120
def test_mysql_flexible_server_georestore_update_mgmt(self, resource_group):
121121
self._test_flexible_server_georestore_update_mgmt('mysql', resource_group)
122122

123+
@AllowLargeResponse()
124+
@ResourceGroupPreparer(location=DEFAULT_LOCATION)
125+
@live_only()
126+
def test_mysql_flexible_server_restore_no_wait_mgmt(self, resource_group):
127+
self._test_flexible_server_restore_no_wait('mysql', resource_group)
128+
123129
@AllowLargeResponse()
124130
@ResourceGroupPreparer(location=DEFAULT_LOCATION)
125131
def test_mysql_flexible_server_gtid_reset(self, resource_group):
@@ -698,6 +704,23 @@ def _test_flexible_server_georestore_update_mgmt(self, database_engine, resource
698704
self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(database_engine, resource_group, source_server))
699705
self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(database_engine, resource_group, target_server))
700706

707+
def _test_flexible_server_restore_no_wait(self, database_engine, resource_group):
708+
location = DEFAULT_LOCATION
709+
source_server = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH)
710+
target_server = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH)
711+
712+
self.cmd('{} flexible-server create -g {} -n {} -l {} --public-access None --tier GeneralPurpose --sku-name {}'
713+
.format(database_engine, resource_group, source_server, location, DEFAULT_GENERAL_PURPOSE_SKU))
714+
715+
self.cmd('{} flexible-server restore -g {} --name {} --source-server {} --no-wait'
716+
.format(database_engine, resource_group, target_server, source_server))
717+
718+
self.cmd('{} flexible-server wait -g {} -n {} --created --interval 30 --timeout 600'
719+
.format(database_engine, resource_group, target_server))
720+
721+
self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(database_engine, resource_group, source_server))
722+
self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(database_engine, resource_group, target_server))
723+
701724

702725
def _test_flexible_server_byok_mgmt(self, database_engine, resource_group, vault_name, backup_vault_name=None):
703726
key_name = self.create_random_name('rdbmskey', 32)

0 commit comments

Comments
 (0)