From a08eff20768026efa6ec8b9c33884e1790efb44b Mon Sep 17 00:00:00 2001 From: Kalyan Khandrika Date: Mon, 22 Feb 2021 14:28:06 -0800 Subject: [PATCH] Adding backup interval and retention parameters to database account create and update cmdlets --- src/CosmosDB/CosmosDB/ChangeLog.md | 1 + .../CosmosDBAccount/NewAzCosmosDBAccount.cs | 12 ++++ .../NewOrUpdateAzCosmosDBAccount.cs | 6 ++ .../UpdateAzCosmosDBAccount.cs | 20 ++++++ src/CosmosDB/CosmosDB/Helpers/Constants.cs | 3 + .../Models/DatabaseAccount/PSBackupPolicy.cs | 72 +++++++++++++++++++ .../PSDatabaseAccountGetResults.cs | 5 ++ .../CosmosDB/help/New-AzCosmosDBAccount.md | 47 +++++++++--- .../CosmosDB/help/Update-AzCosmosDBAccount.md | 54 +++++++++++++- 9 files changed, 209 insertions(+), 11 deletions(-) create mode 100644 src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSBackupPolicy.cs diff --git a/src/CosmosDB/CosmosDB/ChangeLog.md b/src/CosmosDB/CosmosDB/ChangeLog.md index c584b02668c1..7343e3720c97 100644 --- a/src/CosmosDB/CosmosDB/ChangeLog.md +++ b/src/CosmosDB/CosmosDB/ChangeLog.md @@ -21,6 +21,7 @@ ## Upcoming Release * Introduced NetworkAclBypass and NetworkAclBypassResourceIds for Database Account cmdlets. * Introduced ServerVersion option to Update-AzCosmosDBAccount. +* Introduced BackupInterval and BackupRetention for Database Account cmdlets ## Version 1.0.0 * General availability of 'Az.CosmosDB' module diff --git a/src/CosmosDB/CosmosDB/CosmosDBAccount/NewAzCosmosDBAccount.cs b/src/CosmosDB/CosmosDB/CosmosDBAccount/NewAzCosmosDBAccount.cs index ca603900a89b..005a53f9929b 100644 --- a/src/CosmosDB/CosmosDB/CosmosDBAccount/NewAzCosmosDBAccount.cs +++ b/src/CosmosDB/CosmosDB/CosmosDBAccount/NewAzCosmosDBAccount.cs @@ -211,6 +211,18 @@ public override void ExecuteCmdlet() databaseAccountCreateUpdateParameters.Kind = ApiKind; + if (BackupIntervalInMinutes.HasValue || BackupRetentionIntervalInHours.HasValue) + { + PSBackupPolicy backupPolicy = new PSBackupPolicy() + { + BackupType = PSBackupPolicy.PeriodicModeBackupType, + BackupIntervalInMin = BackupIntervalInMinutes, + BackupRetentionIntervalInHours = BackupRetentionIntervalInHours + }; + + databaseAccountCreateUpdateParameters.BackupPolicy = backupPolicy.ToSDKModel(); + } + if (ShouldProcess(Name, "Creating Database Account")) { DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.CreateOrUpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountCreateUpdateParameters).GetAwaiter().GetResult().Body; diff --git a/src/CosmosDB/CosmosDB/CosmosDBAccount/NewOrUpdateAzCosmosDBAccount.cs b/src/CosmosDB/CosmosDB/CosmosDBAccount/NewOrUpdateAzCosmosDBAccount.cs index 16b4ee4127fc..e3df45486cb3 100644 --- a/src/CosmosDB/CosmosDB/CosmosDBAccount/NewOrUpdateAzCosmosDBAccount.cs +++ b/src/CosmosDB/CosmosDB/CosmosDBAccount/NewOrUpdateAzCosmosDBAccount.cs @@ -85,6 +85,12 @@ public class NewOrUpdateAzCosmosDBAccount : AzureCosmosDBCmdletBase [PSArgumentCompleter(SDKModel.ServerVersion.ThreeFullStopTwo, SDKModel.ServerVersion.ThreeFullStopSix, SDKModel.ServerVersion.FourFullStopZero)] public string ServerVersion { get; set; } + [Parameter(Mandatory = false, HelpMessage = Constants.BackupIntervalInMinHelpMessage)] + public int? BackupIntervalInMinutes { get; set; } + + [Parameter(Mandatory = false, HelpMessage = Constants.BackupRetentionInHoursHelpMessage)] + public int? BackupRetentionIntervalInHours { get; set; } + public ConsistencyPolicy PopoulateConsistencyPolicy(string DefaultConsistencyLevel, int? MaxStalenessIntervalInSeconds, int? MaxStalenessPrefix) { ConsistencyPolicy consistencyPolicy = new ConsistencyPolicy(); diff --git a/src/CosmosDB/CosmosDB/CosmosDBAccount/UpdateAzCosmosDBAccount.cs b/src/CosmosDB/CosmosDB/CosmosDBAccount/UpdateAzCosmosDBAccount.cs index d6b12a7abce2..757337e8d495 100644 --- a/src/CosmosDB/CosmosDB/CosmosDBAccount/UpdateAzCosmosDBAccount.cs +++ b/src/CosmosDB/CosmosDB/CosmosDBAccount/UpdateAzCosmosDBAccount.cs @@ -156,6 +156,26 @@ public override void ExecuteCmdlet() databaseAccountUpdateParameters.NetworkAclBypassResourceIds = networkAclBypassResourceId; } + if (BackupIntervalInMinutes.HasValue || BackupRetentionIntervalInHours.HasValue) + { + if (readDatabase.BackupPolicy is PeriodicModeBackupPolicy) + { + PSBackupPolicy backupPolicy = new PSBackupPolicy() + { + BackupType = PSBackupPolicy.PeriodicModeBackupType, + BackupIntervalInMin = BackupIntervalInMinutes, + BackupRetentionIntervalInHours = BackupRetentionIntervalInHours + }; + + databaseAccountUpdateParameters.BackupPolicy = backupPolicy.ToSDKModel(); + } + else + { + WriteWarning("Can accept BackupInterval or BackupRetention parameters only for accounts with PeriodicMode backup policy"); + return; + } + } + if (ShouldProcess(Name, "Updating Database Account")) { DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.UpdateWithHttpMessagesAsync(ResourceGroupName, Name, databaseAccountUpdateParameters).GetAwaiter().GetResult().Body; diff --git a/src/CosmosDB/CosmosDB/Helpers/Constants.cs b/src/CosmosDB/CosmosDB/Helpers/Constants.cs index 125bfe37e3c0..16450840f166 100644 --- a/src/CosmosDB/CosmosDB/Helpers/Constants.cs +++ b/src/CosmosDB/CosmosDB/Helpers/Constants.cs @@ -56,6 +56,9 @@ internal static class Constants public const string NetworkAclBypassHelpMessage = "Whether or not Network Acl Bypass is enabled for this account for Synapse Link. Possible values include: 'None', 'AzureServices'."; public const string NetworkAclBypassResourceIdHelpMessage = "List of Resource Ids to allow Network Acl Bypass for Synapse Link."; + //Backup specific help messages + public const string BackupIntervalInMinHelpMessage = "The interval(in minutes) with which backup are taken (only for accounts with periodic mode backups)"; + public const string BackupRetentionInHoursHelpMessage = "The time(in hours) for which each backup is retained (only for accounts with periodic mode backups)"; //Sql cmdlets help messages public const string DatabaseNameHelpMessage = "Database name."; diff --git a/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSBackupPolicy.cs b/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSBackupPolicy.cs new file mode 100644 index 000000000000..2a3858f872b3 --- /dev/null +++ b/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSBackupPolicy.cs @@ -0,0 +1,72 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.CosmosDB.Helpers; +using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; +using Microsoft.Azure.Management.CosmosDB.Models; +using System.Management.Automation; + +namespace Microsoft.Azure.Commands.CosmosDB.Models +{ + public class PSBackupPolicy + { + public static readonly string PeriodicModeBackupType = "Periodic"; + + public PSBackupPolicy() + { + } + + public PSBackupPolicy(BackupPolicy backupPolicy) + { + if (backupPolicy is PeriodicModeBackupPolicy) + { + PeriodicModeBackupPolicy periodicModeBackupPolicy = backupPolicy as PeriodicModeBackupPolicy; + BackupIntervalInMin = periodicModeBackupPolicy.PeriodicModeProperties.BackupIntervalInMinutes; + BackupRetentionIntervalInHours = periodicModeBackupPolicy.PeriodicModeProperties.BackupRetentionIntervalInHours; + BackupType = PeriodicModeBackupType; + } + else + { + return; + } + } + + public int? BackupIntervalInMin { get; set; } + + public int? BackupRetentionIntervalInHours { get; set; } + + public string BackupType { get; set; } + + public BackupPolicy ToSDKModel() + { + if (BackupType.Equals(PSBackupPolicy.PeriodicModeBackupType)) + { + PeriodicModeBackupPolicy periodicModeBackupPolicy = new PeriodicModeBackupPolicy + { + PeriodicModeProperties = new PeriodicModeProperties() + { + BackupIntervalInMinutes = BackupIntervalInMin, + BackupRetentionIntervalInHours = BackupRetentionIntervalInHours + } + }; + + return periodicModeBackupPolicy; + } + else + { + return null; + } + } + } +} diff --git a/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSDatabaseAccountGetResults.cs b/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSDatabaseAccountGetResults.cs index 804921663808..975bf4a8fd51 100644 --- a/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSDatabaseAccountGetResults.cs +++ b/src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSDatabaseAccountGetResults.cs @@ -60,6 +60,7 @@ public PSDatabaseAccountGetResults(DatabaseAccountGetResults databaseAccountGetR EnableAnalyticalStorage = databaseAccountGetResults.EnableAnalyticalStorage; NetworkAclBypass = databaseAccountGetResults.NetworkAclBypass; NetworkAclBypassResourceIds = databaseAccountGetResults.NetworkAclBypassResourceIds; + BackupPolicy = new PSBackupPolicy(databaseAccountGetResults.BackupPolicy); } // @@ -190,5 +191,9 @@ public PSDatabaseAccountGetResults(DatabaseAccountGetResults databaseAccountGetR // Summary: // Gets or sets list of Network Acl Bypass Resource Ids. public IList NetworkAclBypassResourceIds { get; set; } + // + // Summary: + // Gets or sets the backup policy of the database account. + public PSBackupPolicy BackupPolicy { get; set; } } } diff --git a/src/CosmosDB/CosmosDB/help/New-AzCosmosDBAccount.md b/src/CosmosDB/CosmosDB/help/New-AzCosmosDBAccount.md index ca79d35f1c59..34145449767f 100644 --- a/src/CosmosDB/CosmosDB/help/New-AzCosmosDBAccount.md +++ b/src/CosmosDB/CosmosDB/help/New-AzCosmosDBAccount.md @@ -14,14 +14,15 @@ Create a new CosmosDB Account. ``` New-AzCosmosDBAccount [-EnableAutomaticFailover] [-EnableMultipleWriteLocations] [-EnableVirtualNetwork] - [-ApiKind ] [-DisableKeyBasedMetadataWriteAccess] [-EnableFreeTier ] - [-ServerVersion ] [-Location ] [-LocationObject ] -ResourceGroupName - -Name [-DefaultConsistencyLevel ] [-IpRule ] - [-MaxStalenessIntervalInSeconds ] [-MaxStalenessPrefix ] [-Tag ] - [-VirtualNetworkRule ] [-VirtualNetworkRuleObject ] - [-PublicNetworkAccess ] [-KeyVaultKeyUri ] [-EnableAnalyticalStorage ] [-AsJob] - [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] - [-DefaultProfile ] [-WhatIf] [-Confirm] [] + [-ApiKind ] [-DisableKeyBasedMetadataWriteAccess] [-EnableFreeTier ] [-Location ] + [-LocationObject ] -ResourceGroupName -Name + [-DefaultConsistencyLevel ] [-IpRule ] [-MaxStalenessIntervalInSeconds ] + [-MaxStalenessPrefix ] [-Tag ] [-VirtualNetworkRule ] + [-VirtualNetworkRuleObject ] [-PublicNetworkAccess ] + [-KeyVaultKeyUri ] [-EnableAnalyticalStorage ] [-AsJob] [-NetworkAclBypass ] + [-NetworkAclBypassResourceId ] [-ServerVersion ] [-BackupIntervalInMinutes ] + [-BackupRetentionIntervalInHours ] [-DefaultProfile ] [-WhatIf] [-Confirm] + [] ``` ## DESCRIPTION @@ -92,6 +93,36 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -BackupIntervalInMinutes +The interval(in minutes) with which backup are taken (only for accounts with periodic mode backups) + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -BackupRetentionIntervalInHours +The time(in hours) for which each backup is retained (only for accounts with periodic mode backups) + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Confirm Prompts you for confirmation before running the cmdlet. diff --git a/src/CosmosDB/CosmosDB/help/Update-AzCosmosDBAccount.md b/src/CosmosDB/CosmosDB/help/Update-AzCosmosDBAccount.md index 50f993cd1215..f93ec61d17b4 100644 --- a/src/CosmosDB/CosmosDB/help/Update-AzCosmosDBAccount.md +++ b/src/CosmosDB/CosmosDB/help/Update-AzCosmosDBAccount.md @@ -20,7 +20,8 @@ Update-AzCosmosDBAccount [-EnableAutomaticFailover ] [-EnableMultipleWr [-MaxStalenessIntervalInSeconds ] [-MaxStalenessPrefix ] [-Tag ] [-VirtualNetworkRule ] [-VirtualNetworkRuleObject ] [-PublicNetworkAccess ] [-KeyVaultKeyUri ] [-EnableAnalyticalStorage ] [-AsJob] - [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] + [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] [-ServerVersion ] + [-BackupIntervalInMinutes ] [-BackupRetentionIntervalInHours ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] ``` @@ -32,7 +33,8 @@ Update-AzCosmosDBAccount -ResourceId [-EnableAutomaticFailover ] [-MaxStalenessPrefix ] [-Tag ] [-VirtualNetworkRule ] [-VirtualNetworkRuleObject ] [-PublicNetworkAccess ] [-KeyVaultKeyUri ] [-EnableAnalyticalStorage ] [-AsJob] - [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] + [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] [-ServerVersion ] + [-BackupIntervalInMinutes ] [-BackupRetentionIntervalInHours ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] ``` @@ -44,7 +46,8 @@ Update-AzCosmosDBAccount -InputObject [-EnableAuto [-MaxStalenessIntervalInSeconds ] [-MaxStalenessPrefix ] [-Tag ] [-VirtualNetworkRule ] [-VirtualNetworkRuleObject ] [-PublicNetworkAccess ] [-KeyVaultKeyUri ] [-EnableAnalyticalStorage ] [-AsJob] - [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] + [-NetworkAclBypass ] [-NetworkAclBypassResourceId ] [-ServerVersion ] + [-BackupIntervalInMinutes ] [-BackupRetentionIntervalInHours ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] ``` @@ -99,6 +102,36 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -BackupIntervalInMinutes +The interval(in minutes) with which backup are taken (only for accounts with periodic mode backups) + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -BackupRetentionIntervalInHours +The time(in hours) for which each backup is retained (only for accounts with periodic mode backups) + +```yaml +Type: Int32 +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Confirm Prompts you for confirmation before running the cmdlet. @@ -391,6 +424,21 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -ServerVersion +ServerVersion, valid only in case of MongoDB Accounts. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Tag Hashtable of tags as key-value pairs. Use empty string to clear existing tag.