Skip to content

Commit 226ddc3

Browse files
mattboentoroMatthew Boentoro
andauthored
[RDBMS] az postgres flexible-server upgrade: Add server capability API check to the --version parameter and allow user to upgrade to PG17 when it is available (#31146)
* {RDBMS} az postgres flexible-server upgrade: Add server capability API check to the --version parameter * fix help text --------- Co-authored-by: Matthew Boentoro <mboentoro@microsoft.com>
1 parent 6177df7 commit 226ddc3

File tree

5 files changed

+3579
-2319
lines changed

5 files changed

+3579
-2319
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from azure.cli.core.azclierror import InvalidArgumentValueError
88
from azure.core.paging import ItemPaged
99
from ._client_factory import cf_postgres_flexible_location_capabilities, cf_postgres_flexible_server_capabilities
10+
from collections import defaultdict
1011

1112

1213
def get_postgres_location_capability_info(cmd, location):
@@ -99,12 +100,17 @@ def _postgres_parse_list_capability(result):
99100
for version in result[0].supported_server_versions:
100101
versions.add(version.name)
101102

103+
supported_server_versions = defaultdict(list)
104+
for version in result[0].supported_server_versions:
105+
supported_server_versions[version.name] = version.supported_versions_to_upgrade
106+
102107
return {
103108
'sku_info': tiers_dict,
104109
'single_az': single_az,
105110
'geo_backup_supported': geo_backup_supported,
106111
'zones': zones,
107112
'server_versions': versions,
113+
'supported_server_versions': supported_server_versions,
108114
'index_tuning_supported': index_tuning_supported
109115
}
110116

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -909,8 +909,8 @@
909909
type: command
910910
short-summary: Upgrade the major version of a flexible server.
911911
examples:
912-
- name: Upgrade server 'testsvr' to PostgreSQL major version 16.
913-
text: az postgres flexible-server upgrade -g testgroup -n testsvr -v 16
912+
- name: Upgrade server 'testsvr' to PostgreSQL major version 17.
913+
text: az postgres flexible-server upgrade -g testgroup -n testsvr -v 17
914914
"""
915915

916916
helps['postgres flexible-server identity'] = """

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def _flexible_server_params(command_group):
459459
)
460460

461461
pg_version_upgrade_arg_type = CLIArgumentType(
462-
arg_type=get_enum_type(['12', '13', '14', '15', '16']),
462+
arg_type=get_enum_type(['12', '13', '14', '15', '16', '17']),
463463
options_list=['--version', '-v'],
464464
help='Server major version.'
465465
)

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from ._client_factory import cf_postgres_flexible_replica
1717
from ._flexible_server_util import run_subprocess, \
1818
fill_action_template, get_git_root_dir, resolve_poller, GITHUB_ACTION_PATH
19+
from ._flexible_server_location_capabilities_util import get_postgres_server_capability_info
1920
from .validators import validate_public_access_server, validate_resource_group, check_resource_group, validate_citus_cluster
2021

2122
logger = get_logger(__name__)
@@ -304,6 +305,19 @@ def flexible_server_version_upgrade(cmd, client, resource_group_name, server_nam
304305
"We recommend selecting PostgreSQL 13 or a later version for "
305306
"all future operations.")
306307

308+
list_server_capability_info = get_postgres_server_capability_info(cmd, resource_group_name, server_name)
309+
eligible_versions = list_server_capability_info['supported_server_versions'][str(current_version)]
310+
311+
if version not in eligible_versions:
312+
# version not supported
313+
error_message = ""
314+
if len(eligible_versions) > 0:
315+
error_message = "Server is running version {}. It can only be upgraded to the following versions: {} ".format(str(current_version), eligible_versions)
316+
else:
317+
error_message = "Server is running version {}. It cannot be upgraded to any higher version. ".format(str(current_version))
318+
319+
raise CLIError(error_message)
320+
307321
replica_operations_client = cf_postgres_flexible_replica(cmd.cli_ctx, '_')
308322
version_mapped = version
309323

0 commit comments

Comments
 (0)