Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from azure.cli.core.azclierror import InvalidArgumentValueError
from azure.core.paging import ItemPaged
from ._client_factory import cf_postgres_flexible_location_capabilities, cf_postgres_flexible_server_capabilities
from collections import defaultdict


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

supported_server_versions = defaultdict(list)
for version in result[0].supported_server_versions:
supported_server_versions[version.name] = version.supported_versions_to_upgrade

return {
'sku_info': tiers_dict,
'single_az': single_az,
'geo_backup_supported': geo_backup_supported,
'zones': zones,
'server_versions': versions,
'supported_server_versions': supported_server_versions,
'index_tuning_supported': index_tuning_supported
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -909,8 +909,8 @@
type: command
short-summary: Upgrade the major version of a flexible server.
examples:
- name: Upgrade server 'testsvr' to PostgreSQL major version 16.
text: az postgres flexible-server upgrade -g testgroup -n testsvr -v 16
- name: Upgrade server 'testsvr' to PostgreSQL major version 17.
text: az postgres flexible-server upgrade -g testgroup -n testsvr -v 17
"""

helps['postgres flexible-server identity'] = """
Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli/azure/cli/command_modules/rdbms/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ def _flexible_server_params(command_group):
)

pg_version_upgrade_arg_type = CLIArgumentType(
arg_type=get_enum_type(['12', '13', '14', '15', '16']),
arg_type=get_enum_type(['12', '13', '14', '15', '16', '17']),
options_list=['--version', '-v'],
help='Server major version.'
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from ._client_factory import cf_postgres_flexible_replica
from ._flexible_server_util import run_subprocess, \
fill_action_template, get_git_root_dir, resolve_poller, GITHUB_ACTION_PATH
from ._flexible_server_location_capabilities_util import get_postgres_server_capability_info
from .validators import validate_public_access_server, validate_resource_group, check_resource_group, validate_citus_cluster

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

list_server_capability_info = get_postgres_server_capability_info(cmd, resource_group_name, server_name)
eligible_versions = list_server_capability_info['supported_server_versions'][str(current_version)]

if version not in eligible_versions:
# version not supported
error_message = ""
if len(eligible_versions) > 0:
error_message = "Server is running version {}. It can only be upgraded to the following versions: {} ".format(str(current_version), eligible_versions)
else:
error_message = "Server is running version {}. It cannot be upgraded to any higher version. ".format(str(current_version))

raise CLIError(error_message)

replica_operations_client = cf_postgres_flexible_replica(cmd.cli_ctx, '_')
version_mapped = version

Expand Down
Loading