Skip to content

Commit

Permalink
Adding backup interval and retention parameters to database account c…
Browse files Browse the repository at this point in the history
…reate and update cmdlets
  • Loading branch information
kavskalyan committed Feb 22, 2021
1 parent a5dc321 commit a08eff2
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/CosmosDB/CosmosDB/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions src/CosmosDB/CosmosDB/CosmosDBAccount/NewAzCosmosDBAccount.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
20 changes: 20 additions & 0 deletions src/CosmosDB/CosmosDB/CosmosDBAccount/UpdateAzCosmosDBAccount.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions src/CosmosDB/CosmosDB/Helpers/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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.";
Expand Down
72 changes: 72 additions & 0 deletions src/CosmosDB/CosmosDB/Models/DatabaseAccount/PSBackupPolicy.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public PSDatabaseAccountGetResults(DatabaseAccountGetResults databaseAccountGetR
EnableAnalyticalStorage = databaseAccountGetResults.EnableAnalyticalStorage;
NetworkAclBypass = databaseAccountGetResults.NetworkAclBypass;
NetworkAclBypassResourceIds = databaseAccountGetResults.NetworkAclBypassResourceIds;
BackupPolicy = new PSBackupPolicy(databaseAccountGetResults.BackupPolicy);
}

//
Expand Down Expand Up @@ -190,5 +191,9 @@ public PSDatabaseAccountGetResults(DatabaseAccountGetResults databaseAccountGetR
// Summary:
// Gets or sets list of Network Acl Bypass Resource Ids.
public IList<string> NetworkAclBypassResourceIds { get; set; }
//
// Summary:
// Gets or sets the backup policy of the database account.
public PSBackupPolicy BackupPolicy { get; set; }
}
}
47 changes: 39 additions & 8 deletions src/CosmosDB/CosmosDB/help/New-AzCosmosDBAccount.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@ Create a new CosmosDB Account.

```
New-AzCosmosDBAccount [-EnableAutomaticFailover] [-EnableMultipleWriteLocations] [-EnableVirtualNetwork]
[-ApiKind <String>] [-DisableKeyBasedMetadataWriteAccess] [-EnableFreeTier <Boolean>]
[-ServerVersion <String>] [-Location <String[]>] [-LocationObject <PSLocation[]>] -ResourceGroupName <String>
-Name <String> [-DefaultConsistencyLevel <String>] [-IpRule <String[]>]
[-MaxStalenessIntervalInSeconds <Int32>] [-MaxStalenessPrefix <Int32>] [-Tag <Hashtable>]
[-VirtualNetworkRule <String[]>] [-VirtualNetworkRuleObject <PSVirtualNetworkRule[]>]
[-PublicNetworkAccess <String>] [-KeyVaultKeyUri <String>] [-EnableAnalyticalStorage <Boolean>] [-AsJob]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
[-ApiKind <String>] [-DisableKeyBasedMetadataWriteAccess] [-EnableFreeTier <Boolean>] [-Location <String[]>]
[-LocationObject <PSLocation[]>] -ResourceGroupName <String> -Name <String>
[-DefaultConsistencyLevel <String>] [-IpRule <String[]>] [-MaxStalenessIntervalInSeconds <Int32>]
[-MaxStalenessPrefix <Int32>] [-Tag <Hashtable>] [-VirtualNetworkRule <String[]>]
[-VirtualNetworkRuleObject <PSVirtualNetworkRule[]>] [-PublicNetworkAccess <String>]
[-KeyVaultKeyUri <String>] [-EnableAnalyticalStorage <Boolean>] [-AsJob] [-NetworkAclBypass <String>]
[-NetworkAclBypassResourceId <String[]>] [-ServerVersion <String>] [-BackupIntervalInMinutes <Int32>]
[-BackupRetentionIntervalInHours <Int32>] [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```

## DESCRIPTION
Expand Down Expand Up @@ -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.
Expand Down
54 changes: 51 additions & 3 deletions src/CosmosDB/CosmosDB/help/Update-AzCosmosDBAccount.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ Update-AzCosmosDBAccount [-EnableAutomaticFailover <Boolean>] [-EnableMultipleWr
[-MaxStalenessIntervalInSeconds <Int32>] [-MaxStalenessPrefix <Int32>] [-Tag <Hashtable>]
[-VirtualNetworkRule <String[]>] [-VirtualNetworkRuleObject <PSVirtualNetworkRule[]>]
[-PublicNetworkAccess <String>] [-KeyVaultKeyUri <String>] [-EnableAnalyticalStorage <Boolean>] [-AsJob]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>] [-ServerVersion <String>]
[-BackupIntervalInMinutes <Int32>] [-BackupRetentionIntervalInHours <Int32>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

Expand All @@ -32,7 +33,8 @@ Update-AzCosmosDBAccount -ResourceId <String> [-EnableAutomaticFailover <Boolean
[-MaxStalenessIntervalInSeconds <Int32>] [-MaxStalenessPrefix <Int32>] [-Tag <Hashtable>]
[-VirtualNetworkRule <String[]>] [-VirtualNetworkRuleObject <PSVirtualNetworkRule[]>]
[-PublicNetworkAccess <String>] [-KeyVaultKeyUri <String>] [-EnableAnalyticalStorage <Boolean>] [-AsJob]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>] [-ServerVersion <String>]
[-BackupIntervalInMinutes <Int32>] [-BackupRetentionIntervalInHours <Int32>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

Expand All @@ -44,7 +46,8 @@ Update-AzCosmosDBAccount -InputObject <PSDatabaseAccountGetResults> [-EnableAuto
[-MaxStalenessIntervalInSeconds <Int32>] [-MaxStalenessPrefix <Int32>] [-Tag <Hashtable>]
[-VirtualNetworkRule <String[]>] [-VirtualNetworkRuleObject <PSVirtualNetworkRule[]>]
[-PublicNetworkAccess <String>] [-KeyVaultKeyUri <String>] [-EnableAnalyticalStorage <Boolean>] [-AsJob]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>]
[-NetworkAclBypass <String>] [-NetworkAclBypassResourceId <String[]>] [-ServerVersion <String>]
[-BackupIntervalInMinutes <Int32>] [-BackupRetentionIntervalInHours <Int32>]
[-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit a08eff2

Please sign in to comment.