Skip to content

Commit

Permalink
Sql vm minor changes + new property in sql vm create (#9875)
Browse files Browse the repository at this point in the history
* Adding first changes

* Adding tests.

* Adding all test runs

* Updating the version from 3.0 to 4.0

* Updading to prompt for upgrades.

* Update HISTORY.rst

* Updated based on comments
  • Loading branch information
yareyes authored and tjprescott committed Jul 9, 2019
1 parent 3523c04 commit be2c1d1
Show file tree
Hide file tree
Showing 19 changed files with 4,682 additions and 3,728 deletions.
5 changes: 5 additions & 0 deletions src/azure-cli/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ Release History

* Document allowed values for sql db create --sample-name

**SQL VM**

* sql vm create/update: Added optional parameter `--sql-mgmt-type` to setup SQL management
* Minor fixes on SQL vm group that did not allow to update the key for storage accounts.

**VM**

* vmss create: Fix bug where command returns an error message when run with `--no-wait`. The command succesfully sends
Expand Down
1 change: 1 addition & 0 deletions src/azure-cli/azure/cli/command_modules/sqlvm/_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def transform_sqlvm_output(result):
('provisioningState', result.provisioning_state),
('sqlImageOffer', result.sql_image_offer),
('sqlImageSku', result.sql_image_sku),
('sqlManagement', result.sql_management),
('resourceGroup', resource_group),
('sqlServerLicenseType', result.sql_server_license_type),
('virtualMachineResourceId', result.virtual_machine_resource_id),
Expand Down
14 changes: 10 additions & 4 deletions src/azure-cli/azure/cli/command_modules/sqlvm/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,22 @@
- name: Create a SQL virtual machine with specific sku type and license type.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --image-sku Enterprise --license-type AHUB
- name: Create a SQL virtual machine with NoAgent type, only valid for EOS SQL 2008 and SQL 2008 R2.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type AHUB --sql-mgmt-type NoAgent --image-sku Enterprise --image-offer SQL2008-WS2008R2
- name: Enable R services in SQL2016 onwards.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --enable-r-services true
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --sql-mgmt-type Full --enable-r-services true
- name: Create SQL virtual machine and configure auto backup settings.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --backup-schedule-type manual --full-backup-frequency Weekly --full-backup-start-hour 2 --full-backup-duration 2
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --sql-mgmt-type Full --backup-schedule-type manual --full-backup-frequency Weekly --full-backup-start-hour 2 --full-backup-duration 2
--sa-key {storageKey} --storage-account 'https://storageacc.blob.core.windows.net/' --retention-period 30 --log-backup-frequency 60
- name: Create SQL virtual machine and configure auto patching settings.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --day-of-week sunday --maintenance-window-duration 60 --maintenance-window-start-hour 2
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --sql-mgmt-type Full --day-of-week sunday --maintenance-window-duration 60 --maintenance-window-start-hour 2
- name: Create SQL virtual machine and configure SQL connectivity settings.
text: >
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --connectivity-type private --port 1433 --sql-auth-update-username {newlogin} --sql-auth-update-pwd {sqlpassword}
az sql vm create -n sqlvm -g myresourcegroup -l eastus --license-type PAYG --sql-mgmt-type Full --connectivity-type private --port 1433 --sql-auth-update-username {newlogin} --sql-auth-update-pwd {sqlpassword}
"""
helps['sql vm update'] = """
type: command
Expand All @@ -94,6 +97,9 @@
- name: Update a SQL virtual machine with specific sku type.
text: >
az sql vm update -n sqlvm -g myresourcegroup --image-sku Enterprise
- name: Update a SQL virtual machine manageability from LightWeight to Full.
text: >
az sql vm update -n sqlvm -g myresourcegroup --sql-mgmt-type Full --yes
- name: Update SQL virtual machine auto backup settings.
text: >
az sql vm update -n sqlvm -g myresourcegroup --backup-schedule-type manual --full-backup-frequency Weekly --full-backup-start-hour 2 --full-backup-duration 2
Expand Down
26 changes: 22 additions & 4 deletions src/azure-cli/azure/cli/command_modules/sqlvm/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
DiskConfigurationType,
DayOfWeek,
SqlVmGroupImageSku,
SqlImageSku
SqlImageSku,
SqlManagementMode
)

from azure.cli.core.commands.parameters import (
Expand All @@ -31,7 +32,8 @@
validate_sqlvm_list,
validate_load_balancer,
validate_public_ip_address,
validate_subnet
validate_subnet,
validate_sqlmanagement
)


Expand Down Expand Up @@ -158,6 +160,11 @@ def load_arguments(self, _):
c.argument('expand',
help='Get the SQLIaaSExtension configuration settings.',
arg_type=get_enum_type(['*']))
c.argument('sql_management_mode',
help='SQL Server management type. If NoAgent selected, please provide --image-sku and --offer-type.',
options_list=['--sql-mgmt-type'],
validator=validate_sqlmanagement,
arg_type=get_enum_type(SqlManagementMode))

with self.argument_context('sql vm', arg_group='SQL Server License') as c:
c.argument('sql_server_license_type',
Expand All @@ -168,6 +175,9 @@ def load_arguments(self, _):
options_list=['--image-sku'],
help='SQL image sku.',
arg_type=get_enum_type(SqlImageSku))
c.argument('sql_image_offer',
options_list=['--image-offer'],
help='SQL image offer. Examples include SQL2008R2-WS2008, SQL2008-WS2008.')

with self.argument_context('sql vm add-to-group') as c:
c.argument('sql_virtual_machine_group_resource_id',
Expand All @@ -184,10 +194,18 @@ def load_arguments(self, _):
id_part='name',
help="Name of the SQL virtual machine.")

with self.argument_context('sql vm update') as c:
c.argument('sql_management_mode',
help='SQL Server management type. Updates from LightWeight to Full.',
options_list=['--sql-mgmt-type'],
arg_type=get_enum_type(['Full']))
c.argument('prompt',
options_list=['--yes', '-y'],
help="Do not prompt for confirmation. Requires --sql-mgmt-type.")

with self.argument_context('sql vm add-to-group', arg_group='WSFC Domain Credentials') as c:
c.argument('cluster_bootstrap_account_password',
options_list=['-b', '--bootstrap-acc-pwd',
c.deprecate(target='--boostrap-acc-pwd', redirect='--bootstrap-acc-pwd')],
options_list=['-b', '--bootstrap-acc-pwd'],
help='Password for the cluster bootstrap account if provided in the SQL virtual machine group.')
c.argument('cluster_operator_account_password',
options_list=['--operator-acc-pwd', '-p'],
Expand Down
11 changes: 11 additions & 0 deletions src/azure-cli/azure/cli/command_modules/sqlvm/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,14 @@ def validate_subnet(cmd, namespace):
name=vnet, child_type_1='subnets',
child_name_1=subnet
)


# pylint: disable=too-many-statements,line-too-long
def validate_sqlmanagement(namespace):
'''
Validates if sql management mode provided, the offer type and sku type has to be provided.
'''
sql_mgmt_mode = namespace.sql_management_mode

if (sql_mgmt_mode == "NoAgent" and (namespace.sql_image_sku is None or namespace.sql_image_offer is None)):
raise CLIError("usage error: --sql-mgmt-type NoAgent --image-sku NAME --image-offer NAME")
22 changes: 16 additions & 6 deletions src/azure-cli/azure/cli/command_modules/sqlvm/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,9 @@ def sqlvm_group_update(instance, domain_fqdn=None, cluster_operator_account=None
if storage_account_url is not None:
instance.wsfc_domain_profile.storage_account_url = storage_account_url
if storage_account_key is not None:
instance.wsfc_domain_profile.storage_access_key = storage_account_key
instance.wsfc_domain_profile.storage_account_primary_key = storage_account_key
if storage_account_url and not storage_account_key:
instance.wsfc_domain_profile.storage_access_key = prompt_pass('Storage Key: ', confirm=True)
instance.wsfc_domain_profile.storage_account_primary_key = prompt_pass('Storage Key: ', confirm=True)
if file_share_witness_path is not None:
instance.wsfc_domain_profile.file_share_witness_path = file_share_witness_path
if ou_path is not None:
Expand Down Expand Up @@ -171,14 +171,14 @@ def aglistener_update(instance, sql_virtual_machine_instances=None):

# pylint: disable=too-many-arguments, too-many-locals, line-too-long, too-many-boolean-expressions
def sqlvm_create(client, cmd, sql_virtual_machine_name, resource_group_name, sql_server_license_type,
location=None, sql_image_sku=None, enable_auto_patching=None,
location=None, sql_image_sku=None, enable_auto_patching=None, sql_management_mode="LightWeight",
day_of_week=None, maintenance_window_starting_hour=None, maintenance_window_duration=None,
enable_auto_backup=None, enable_encryption=False, retention_period=None, storage_account_url=None,
storage_access_key=None, backup_password=None, backup_system_dbs=False, backup_schedule_type=None,
full_backup_frequency=None, full_backup_start_time=None, full_backup_window_hours=None, log_backup_frequency=None,
enable_key_vault_credential=None, credential_name=None, azure_key_vault_url=None, service_principal_name=None,
service_principal_secret=None, connectivity_type=None, port=None, sql_auth_update_username=None,
sql_auth_update_password=None, sql_workload_type=None, enable_r_services=None, tags=None):
sql_auth_update_password=None, sql_workload_type=None, enable_r_services=None, tags=None, sql_image_offer=None):
'''
Creates a SQL virtual machine.
'''
Expand Down Expand Up @@ -253,6 +253,8 @@ def sqlvm_create(client, cmd, sql_virtual_machine_name, resource_group_name, sql
virtual_machine_resource_id=virtual_machine_resource_id,
sql_server_license_type=sql_server_license_type,
sql_image_sku=sql_image_sku,
sql_management=sql_management_mode,
sql_image_offer=sql_image_offer,
auto_patching_settings=auto_patching_object,
auto_backup_settings=auto_backup_object,
key_vault_credential_settings=keyvault_object,
Expand All @@ -269,8 +271,8 @@ def sqlvm_create(client, cmd, sql_virtual_machine_name, resource_group_name, sql
# pylint: disable=too-many-statements, line-too-long, too-many-boolean-expressions
def sqlvm_update(instance, sql_server_license_type=None, sql_image_sku=None, enable_auto_patching=None,
day_of_week=None, maintenance_window_starting_hour=None, maintenance_window_duration=None,
enable_auto_backup=None, enable_encryption=False, retention_period=None, storage_account_url=None,
storage_access_key=None, backup_password=None, backup_system_dbs=False, backup_schedule_type=None,
enable_auto_backup=None, enable_encryption=False, retention_period=None, storage_account_url=None, prompt=True,
storage_access_key=None, backup_password=None, backup_system_dbs=False, backup_schedule_type=None, sql_management_mode=None,
full_backup_frequency=None, full_backup_start_time=None, full_backup_window_hours=None, log_backup_frequency=None,
enable_key_vault_credential=None, credential_name=None, azure_key_vault_url=None, service_principal_name=None,
service_principal_secret=None, connectivity_type=None, port=None, sql_workload_type=None, enable_r_services=None, tags=None):
Expand All @@ -283,6 +285,14 @@ def sqlvm_update(instance, sql_server_license_type=None, sql_image_sku=None, ena
instance.sql_server_license_type = sql_server_license_type
if sql_image_sku is not None:
instance.sql_image_sku = sql_image_sku
if sql_management_mode is not None and instance.sql_management != "Full":
from knack.prompting import prompt_y_n
if not prompt:
instance.sql_management = sql_management_mode
else:
confirmation = prompt_y_n("Upgrading SQL manageability mode to Full will restart the SQL Server. Proceed?")
if confirmation:
instance.sql_management = sql_management_mode

if (enable_auto_patching is not None or day_of_week is not None or maintenance_window_starting_hour is not None or maintenance_window_duration is not None):

Expand Down
Loading

0 comments on commit be2c1d1

Please sign in to comment.