|
8 | 8 | import os |
9 | 9 | import json |
10 | 10 | from importlib import import_module |
| 11 | +from functools import cmp_to_key |
11 | 12 | import re |
12 | 13 | from urllib.parse import quote |
13 | 14 | from urllib.request import urlretrieve |
|
33 | 34 | cf_postgres_flexible_config, cf_postgres_flexible_adadmin |
34 | 35 | from ._flexible_server_util import generate_missing_parameters, resolve_poller, \ |
35 | 36 | generate_password, parse_maintenance_window, get_current_time, build_identity_and_data_encryption, \ |
36 | | - _is_resource_name, get_tenant_id, get_case_insensitive_key_value, get_enum_value_true_false |
| 37 | + _is_resource_name, get_tenant_id, get_case_insensitive_key_value, get_enum_value_true_false, \ |
| 38 | + get_postgres_tiers, get_postgres_skus |
37 | 39 | from ._flexible_server_location_capabilities_util import get_postgres_location_capability_info |
38 | 40 | from ._util import get_index_tuning_settings_map |
39 | 41 | from .flexible_server_custom_common import create_firewall_rule |
40 | 42 | from .flexible_server_virtual_network import prepare_private_network, prepare_private_dns_zone, prepare_public_network |
41 | 43 | from .validators import pg_arguments_validator, validate_server_name, validate_and_format_restore_point_in_time, \ |
42 | 44 | validate_postgres_replica, validate_georestore_network, pg_byok_validator, validate_migration_runtime_server, \ |
43 | 45 | validate_resource_group, check_resource_group, validate_citus_cluster, cluster_byok_validator, validate_backup_name, \ |
44 | | - validate_virtual_endpoint_name_availability |
| 46 | + validate_virtual_endpoint_name_availability, compare_sku_names |
45 | 47 |
|
46 | 48 | logger = get_logger(__name__) |
47 | 49 | DEFAULT_DB_NAME = 'flexibleserverdb' |
@@ -84,6 +86,18 @@ def flexible_server_create(cmd, client, |
84 | 86 | logging_name='PostgreSQL', command_group='postgres', server_client=client, location=location) |
85 | 87 |
|
86 | 88 | server_name = server_name.lower() |
| 89 | + |
| 90 | + if sku_name is None: |
| 91 | + # set sku_name from capability API |
| 92 | + list_location_capability_info = get_postgres_location_capability_info(cmd, location) |
| 93 | + tiers = [item.lower() for item in get_postgres_tiers(list_location_capability_info['sku_info'])] |
| 94 | + try: |
| 95 | + sku_info = list_location_capability_info['sku_info'] |
| 96 | + skus = [item for item in get_postgres_skus(sku_info, tier.lower())] |
| 97 | + skus = sorted(skus, key=cmp_to_key(compare_sku_names)) |
| 98 | + sku_name = skus[0] |
| 99 | + except: |
| 100 | + raise CLIError('Incorrect value for --tier. Allowed values : {}'.format(tiers)) |
87 | 101 |
|
88 | 102 | pg_arguments_validator(db_context, |
89 | 103 | server_name=server_name, |
|
0 commit comments