Skip to content

Commit ab8b8e6

Browse files
committed
cluster create init
1 parent 17a4bbb commit ab8b8e6

File tree

4 files changed

+60
-7
lines changed

4 files changed

+60
-7
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,14 @@
216216
az postgres flexible-server create -g testGroup -n testServer --location testLocation --performance-tier P15
217217
218218
- name: >
219-
create flexible server with storage auto-grow as Enabled. Accepted values Enabled / Disabled. Default value for storage auto-grow is "Disabled".
219+
Create flexible server with storage auto-grow as Enabled. Accepted values Enabled / Disabled. Default value for storage auto-grow is "Disabled".
220220
text: >
221221
az postgres flexible-server create -g testGroup -n testServer --location testLocation --storage-auto-grow Enabled
222+
223+
- name: >
224+
Create elastic cluster with node count of 5. Default node count is 2 when --cluster-option is "ElasticCluster".
225+
text: >
226+
az postgres flexible-server create -g testGroup -n testServer --location testLocation --cluster-option ElasticCluster --node-count 5
222227
"""
223228

224229
helps['postgres flexible-server show'] = """

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from azure.cli.command_modules.rdbms.validators import configuration_value_validator, validate_subnet, \
1818
tls_validator, public_access_validator, maintenance_window_validator, ip_address_validator, \
1919
retention_validator, firewall_rule_name_validator, validate_identity, validate_byok_identity, validate_identities, \
20-
virtual_endpoint_name_validator
20+
virtual_endpoint_name_validator, node_count_validator
2121
from azure.cli.core.local_context import LocalContextAttribute, LocalContextAction
2222

2323
from .randomname.generate import generate_username
@@ -332,6 +332,20 @@ def _flexible_server_params(command_group):
332332
help='Enable or disable the creation of default database flexibleserverdb. Default value is Enabled.'
333333
)
334334

335+
cluster_option_arg_type = CLIArgumentType(
336+
arg_type=get_enum_type(['Server', 'ElasticCluster']),
337+
options_list=['--cluster-option'],
338+
help='Cluster option for the server. Servers are for workloads that can fit on one node. '
339+
'Elastic clusters provides schema- and row-based sharding on a database. Default value is Server.'
340+
)
341+
342+
create_node_count_arg_type = CLIArgumentType(
343+
type=int,
344+
options_list=['--node-count'],
345+
help='The number of nodes for elastic cluster. Range of 1 to 10. Default is 2 nodes.',
346+
validator=node_count_validator
347+
)
348+
335349
auto_grow_arg_type = CLIArgumentType(
336350
arg_type=get_enum_type(['Enabled', 'Disabled']),
337351
options_list=['--storage-auto-grow'],
@@ -576,6 +590,8 @@ def _flexible_server_params(command_group):
576590
c.argument('throughput', default=None, arg_type=throughput_arg_type)
577591
c.argument('performance_tier', default=None, arg_type=performance_tier_arg_type)
578592
c.argument('create_default_db', default='Enabled', arg_type=create_default_db_arg_type)
593+
c.argument('create_cluster', default='Server', arg_type=cluster_option_arg_type)
594+
c.argument('cluster_size', default=None, arg_type=create_node_count_arg_type)
579595
elif command_group == 'mysql':
580596
c.argument('tier', default='Burstable', arg_type=tier_arg_type)
581597
c.argument('sku_name', default='Standard_B1ms', arg_type=sku_name_arg_type)

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from azure.core.exceptions import HttpResponseError, ResourceNotFoundError
2323
from azure.mgmt.core.tools import resource_id, is_valid_resource_id, parse_resource_id
2424
from azure.cli.core.azclierror import BadRequestError, FileOperationError, MutuallyExclusiveArgumentError, RequiredArgumentMissingError, ArgumentUsageError, InvalidArgumentValueError
25-
from azure.mgmt.rdbms import postgresql_flexibleservers
25+
from azure.mgmt import postgresqlflexibleservers as postgresql_flexibleservers
2626
from ._client_factory import cf_postgres_flexible_firewall_rules, get_postgresql_flexible_management_client, \
2727
cf_postgres_flexible_db, cf_postgres_check_resource_availability, cf_postgres_flexible_servers, \
2828
cf_postgres_check_resource_availability_with_location, \
@@ -60,7 +60,7 @@ def flexible_server_create(cmd, client,
6060
high_availability=None, zone=None, standby_availability_zone=None,
6161
geo_redundant_backup=None, byok_identity=None, byok_key=None, backup_byok_identity=None, backup_byok_key=None,
6262
active_directory_auth=None, password_auth=None, auto_grow=None, performance_tier=None,
63-
storage_type=None, iops=None, throughput=None, create_default_db='Enabled', yes=False):
63+
storage_type=None, iops=None, throughput=None, create_default_db='Enabled', create_cluster=None, cluster_size=None, yes=False):
6464

6565
if (not check_resource_group(resource_group_name)):
6666
resource_group_name = None
@@ -97,7 +97,11 @@ def flexible_server_create(cmd, client,
9797
byok_key=byok_key,
9898
backup_byok_identity=backup_byok_identity,
9999
backup_byok_key=backup_byok_key,
100-
performance_tier=performance_tier)
100+
performance_tier=performance_tier,
101+
create_cluster=create_cluster,
102+
cluster_size=cluster_size)
103+
104+
cluster = postgresql_flexibleservers.models.Cluster(cluster_size=cluster_size) if create_cluster else None
101105

102106
server_result = firewall_id = None
103107

@@ -151,7 +155,8 @@ def flexible_server_create(cmd, client,
151155
availability_zone=zone,
152156
identity=identity,
153157
data_encryption=data_encryption,
154-
auth_config=auth_config)
158+
auth_config=auth_config,
159+
cluster=cluster)
155160

156161
# Adding firewall rule
157162
if start_ip != -1 and end_ip != -1:

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ def retention_validator(ns):
9292
raise CLIError('incorrect usage: --backup-retention. Range is 7 to 35 days.')
9393

9494

95+
def node_count_validator(ns):
96+
if ns.cluster_size is not None:
97+
val = ns.cluster_size
98+
if not 1 <= int(val) <= 10:
99+
raise CLIError('incorrect usage: --node-count. Range is 1 to 10 for an elastic cluster.')
100+
101+
95102
# Validates if a subnet id or name have been given by the user. If subnet id is given, vnet-name should not be provided.
96103
def validate_subnet(cmd, namespace):
97104

@@ -301,7 +308,7 @@ def pg_arguments_validator(db_context, location, tier, sku_name, storage_gb, ser
301308
version=None, instance=None, geo_redundant_backup=None,
302309
byok_identity=None, byok_key=None, backup_byok_identity=None, backup_byok_key=None,
303310
auto_grow=None, performance_tier=None,
304-
storage_type=None, iops=None, throughput=None):
311+
storage_type=None, iops=None, throughput=None, create_cluster=None, cluster_size=None):
305312
validate_server_name(db_context, server_name, 'Microsoft.DBforPostgreSQL/flexibleServers')
306313
is_create = not instance
307314
if is_create:
@@ -317,6 +324,8 @@ def pg_arguments_validator(db_context, location, tier, sku_name, storage_gb, ser
317324
sku_info = {k.lower(): v for k, v in sku_info.items()}
318325
single_az = list_location_capability_info['single_az']
319326
geo_backup_supported = list_location_capability_info['geo_backup_supported']
327+
_cluster_validator(create_cluster, cluster_size, auto_grow, geo_redundant_backup, version, tier,
328+
byok_identity, byok_key, backup_byok_identity, backup_byok_key, instance)
320329
_network_arg_validator(subnet, public_access)
321330
_pg_tier_validator(tier, sku_info) # need to be validated first
322331
if tier is None and instance is not None:
@@ -341,6 +350,24 @@ def pg_arguments_validator(db_context, location, tier, sku_name, storage_gb, ser
341350
pg_byok_validator(byok_identity, byok_key, backup_byok_identity, backup_byok_key, geo_redundant_backup, instance)
342351

343352

353+
def _cluster_validator(create_cluster, cluster_size, auto_grow, geo_redundant_backup, version, tier,
354+
byok_identity, byok_key, backup_byok_identity, backup_byok_key, instance):
355+
if create_cluster == 'ElasticCluster' or (instance and instance.cluster and instance.cluster.cluster_size > 0 ):
356+
if instance is None and cluster_size is None:
357+
cluster_size = 2
358+
if instance is None and version == '17':
359+
raise ValidationError("PostgreSQL version 17 is currently not supported for elastic cluster.")
360+
361+
if auto_grow and auto_grow.lower() != 'disabled':
362+
raise ValidationError("Storage Auto-grow is currently not supported for elastic cluster.")
363+
if geo_redundant_backup and geo_redundant_backup.lower() != 'disabled':
364+
raise ValidationError("Geo-redundancy is currently not supported for elastic cluster.")
365+
if byok_identity or byok_key or backup_byok_identity or backup_byok_key:
366+
raise ValidationError("Data encryption is currently not supported for elastic cluster.")
367+
if tier == 'Burstable':
368+
raise ValidationError("Burstable tier is currently not supported for elastic cluster.")
369+
370+
344371
def _pg_storage_validator(storage_gb, sku_info, tier, storage_type, iops, throughput, instance):
345372
is_ssdv2 = storage_type == "PremiumV2_LRS" or instance is not None and instance.storage.type == "PremiumV2_LRS"
346373
# storage_gb range validation

0 commit comments

Comments
 (0)