diff --git a/src/cosmosdb-preview/azext_cosmosdb_preview/_params.py b/src/cosmosdb-preview/azext_cosmosdb_preview/_params.py index 5f2105ccd1f..de601cc2d15 100644 --- a/src/cosmosdb-preview/azext_cosmosdb_preview/_params.py +++ b/src/cosmosdb-preview/azext_cosmosdb_preview/_params.py @@ -108,10 +108,15 @@ def load_arguments(self, _): 'managed-cassandra cluster update', 'managed-cassandra cluster show', 'managed-cassandra cluster delete', + 'managed-cassandra cluster deallocate', 'managed-cassandra cluster backup list', 'managed-cassandra cluster backup show']: with self.argument_context(scope) as c: c.argument('cluster_name', options_list=['--cluster-name', '-c'], help="Cluster Name", required=True) + + # Managed Cassandra Cluster + with self.argument_context('managed-cassandra cluster deallocate') as c: + c.argument('force', options_list=['--force', '-f'], help="Force to deallocate the cluster", required=False) # Managed Cassandra Cluster for scope in [ @@ -128,6 +133,8 @@ def load_arguments(self, _): c.argument('gossip_certificates', help="A list of certificates that should be accepted by on-premise data centers.") c.argument('external_seed_nodes', nargs='+', validator=validate_seednodes, help="A list of ip addresses of the seed nodes of on-premise data centers.") c.argument('identity_type', options_list=['--identity-type'], arg_type=get_enum_type(['None', 'SystemAssigned']), help="Type of identity used for Customer Managed Disk Key.") + c.argument("cluster_type", options_list=['--cluster-type'], help="Type of the cluster, can be Production or NonProduction. If set to Production, operations on cluster might have restrictions.", arg_type=get_enum_type(['Production', 'NonProduction'])) + c.argument('extensions', nargs='*', help="A set of extensions that will be effective on the cluster. It will replace the entire set of extensions with new set. Use \"\" to remove all. Now Available: cassandra-lucene-index.") # Managed Cassandra Cluster with self.argument_context('managed-cassandra cluster create') as c: diff --git a/src/cosmosdb-preview/azext_cosmosdb_preview/commands.py b/src/cosmosdb-preview/azext_cosmosdb_preview/commands.py index d46541472bc..35cc3cd02d0 100644 --- a/src/cosmosdb-preview/azext_cosmosdb_preview/commands.py +++ b/src/cosmosdb-preview/azext_cosmosdb_preview/commands.py @@ -57,6 +57,7 @@ def load_command_table(self, _): g.custom_command('list', 'cli_cosmosdb_managed_cassandra_cluster_list') g.show_command('show', 'get') g.command('delete', 'begin_delete', confirmation=True, supports_no_wait=True) + g.custom_command('deallocate', 'cli_cosmosdb_managed_cassandra_cluster_deallocate', supports_no_wait=True, confirmation=True) with self.command_group('managed-cassandra datacenter', cosmosdb_managed_cassandra_datacenter_sdk, client_factory=cf_cassandra_data_center) as g: g.custom_command('create', 'cli_cosmosdb_managed_cassandra_datacenter_create', supports_no_wait=True) diff --git a/src/cosmosdb-preview/azext_cosmosdb_preview/custom.py b/src/cosmosdb-preview/azext_cosmosdb_preview/custom.py index 2a4858558b7..3c01d5217a6 100644 --- a/src/cosmosdb-preview/azext_cosmosdb_preview/custom.py +++ b/src/cosmosdb-preview/azext_cosmosdb_preview/custom.py @@ -299,7 +299,9 @@ def cli_cosmosdb_managed_cassandra_cluster_create(client, cassandra_version=None, authentication_method=None, hours_between_backups=None, - repair_enabled=None): + repair_enabled=None, + cluster_type='Production', + extensions=None): """Creates an Azure Managed Cassandra Cluster""" @@ -320,7 +322,9 @@ def cli_cosmosdb_managed_cassandra_cluster_create(client, cassandra_version=cassandra_version, authentication_method=authentication_method, hours_between_backups=hours_between_backups, - repair_enabled=repair_enabled) + repair_enabled=repair_enabled, + cluster_type=cluster_type, + extensions=extensions) managed_service_identity_parameter = ManagedCassandraManagedServiceIdentity( type=identity_type @@ -346,7 +350,9 @@ def cli_cosmosdb_managed_cassandra_cluster_update(client, cassandra_version=None, authentication_method=None, hours_between_backups=None, - repair_enabled=None): + repair_enabled=None, + cluster_type=None, + extensions=None): """Updates an Azure Managed Cassandra Cluster""" @@ -381,6 +387,16 @@ def cli_cosmosdb_managed_cassandra_cluster_update(client, if identity_type is not None: identity = ManagedCassandraManagedServiceIdentity(type=identity_type) + if cluster_type is None: + cluster_type = cluster_resource.properties.cluster_type + + if extensions is None: + extensions = cluster_resource.properties.extensions + + # to remove extension + if len(extensions) == 1 and extensions[0] == '': + extensions = None + cluster_properties = ClusterResourceProperties( provisioning_state=cluster_resource.properties.provisioning_state, restore_from_backup_id=cluster_resource.properties.restore_from_backup_id, @@ -395,7 +411,9 @@ def cli_cosmosdb_managed_cassandra_cluster_update(client, external_gossip_certificates=external_gossip_certificates, gossip_certificates=cluster_resource.properties.gossip_certificates, external_seed_nodes=cluster_resource.properties.external_seed_nodes, - seed_nodes=cluster_resource.properties.seed_nodes + seed_nodes=cluster_resource.properties.seed_nodes, + cluster_type=cluster_type, + extensions=extensions ) cluster_resource_create_update_parameters = ClusterResource( @@ -425,6 +443,15 @@ def cli_cosmosdb_managed_cassandra_cluster_list_backup(client, return client.list_backups(resource_group_name, cluster_name) +def cli_cosmosdb_managed_cassandra_cluster_deallocate(client, + resource_group_name, + cluster_name, + force=False): + + """Deallocate Azure Managed Cassandra Cluster""" + return client.begin_deallocate(resource_group_name, cluster_name, force) + + def cli_cosmosdb_managed_cassandra_cluster_show_backup(client, resource_group_name, cluster_name,