public override void ExecuteCmdlet() { if (ParameterSetName.Equals(ParentObjectParameterSet, StringComparison.Ordinal)) { Location = InputObject.Location; DatabaseAccountInstanceId = InputObject.DatabaseAccountInstanceId; } DateTime dateTimeInUtc; if (RestoreTimestampInUtc.Kind == DateTimeKind.Unspecified) { dateTimeInUtc = RestoreTimestampInUtc; } else { dateTimeInUtc = RestoreTimestampInUtc.ToUniversalTime(); } IEnumerable restorableSqlResources = CosmosDBManagementClient.RestorableSqlResources.ListWithHttpMessagesAsync(Location, DatabaseAccountInstanceId, RestoreLocation, dateTimeInUtc.ToString()).GetAwaiter().GetResult().Body; foreach (DatabaseRestoreResource restorableSqlResource in restorableSqlResources) { WriteObject(new PSDatabaseToRestore(restorableSqlResource)); } }
public override void ExecuteCmdlet() { DateTime utcRestoreDateTime; if (RestoreTimestampInUtc.Kind == DateTimeKind.Unspecified) { utcRestoreDateTime = RestoreTimestampInUtc; } else { utcRestoreDateTime = RestoreTimestampInUtc.ToUniversalTime(); } // Fail if provided restoretimesamp is greater than current timestamp if (utcRestoreDateTime > DateTime.UtcNow) { WriteWarning($"Restore timestamp {utcRestoreDateTime} should be less than current timestamp {DateTime.UtcNow}"); return; } bool isSourceRestorableAccountDeleted = false; List <RestorableDatabaseAccountGetResult> restorableDatabaseAccounts = CosmosDBManagementClient.RestorableDatabaseAccounts.ListWithHttpMessagesAsync().GetAwaiter().GetResult().Body.ToList(); RestorableDatabaseAccountGetResult sourceAccountToRestore = null; List <RestorableDatabaseAccountGetResult> accountsWithMatchingName = restorableDatabaseAccounts.Where(databaseAccount => databaseAccount.AccountName.Equals(SourceDatabaseAccountName, StringComparison.OrdinalIgnoreCase)).ToList(); if (accountsWithMatchingName.Count > 0) { foreach (RestorableDatabaseAccountGetResult restorableAccount in accountsWithMatchingName) { if (restorableAccount.CreationTime.HasValue && restorableAccount.CreationTime < utcRestoreDateTime) { if (!restorableAccount.DeletionTime.HasValue || restorableAccount.DeletionTime > utcRestoreDateTime) { sourceAccountToRestore = restorableAccount; isSourceRestorableAccountDeleted = true; break; } } } } if (sourceAccountToRestore == null) { WriteWarning($"No database accounts found with matching account name {SourceDatabaseAccountName} that was alive at given utc-timestamp {utcRestoreDateTime}"); return; } // Validate if source account is empty if the source account is a live account. if (!isSourceRestorableAccountDeleted) { IEnumerable <DatabaseRestoreResource> restorableResources = null; if (sourceAccountToRestore.ApiType.Equals("Sql", StringComparison.OrdinalIgnoreCase)) { try { restorableResources = CosmosDBManagementClient.RestorableSqlResources.ListWithHttpMessagesAsync( sourceAccountToRestore.Location, sourceAccountToRestore.Name, Location, utcRestoreDateTime.ToString()).GetAwaiter().GetResult().Body; } catch (Exception) { WriteWarning($"No database accounts found with matching account name {SourceDatabaseAccountName} that was alive at given utc-timestamp {utcRestoreDateTime} in location {Location}"); return; } } else if (sourceAccountToRestore.ApiType.Equals("MongoDB", StringComparison.OrdinalIgnoreCase)) { try { restorableResources = CosmosDBManagementClient.RestorableMongodbResources.ListWithHttpMessagesAsync( sourceAccountToRestore.Location, sourceAccountToRestore.Name, Location, utcRestoreDateTime.ToString()).GetAwaiter().GetResult().Body; } catch (Exception) { WriteWarning($"No database accounts found with matching account name {SourceDatabaseAccountName} that was alive at given utc-timestamp {utcRestoreDateTime} in location {Location}"); return; } } else { WriteWarning($"Provided API Type {sourceAccountToRestore.ApiType} is not supported"); return; } if (restorableResources == null || !restorableResources.Any()) { WriteWarning($"Database account {SourceDatabaseAccountName} contains no restorable resources in location {Location} at given restore timestamp {utcRestoreDateTime} in location {Location}"); return; } } // Trigger restore PSRestoreParameters restoreParameters = new PSRestoreParameters() { RestoreSource = sourceAccountToRestore.Id, RestoreTimestampInUtc = utcRestoreDateTime, DatabasesToRestore = DatabasesToRestore }; Collection <Location> LocationCollection = new Collection <Location>(); Location loc = new Location(locationName: Location, failoverPriority: 0); LocationCollection.Add(loc); string apiKind = "GlobalDocumentDB"; if (sourceAccountToRestore.ApiType.Equals("MongoDB", StringComparison.OrdinalIgnoreCase)) { apiKind = "MongoDB"; } DatabaseAccountCreateUpdateParameters databaseAccountCreateUpdateParameters = new DatabaseAccountCreateUpdateParameters(locations: LocationCollection, location: sourceAccountToRestore.Location, name: TargetDatabaseAccountName) { Kind = apiKind, CreateMode = CreateMode.Restore, RestoreParameters = restoreParameters.ToSDKModel() }; if (ShouldProcess(TargetDatabaseAccountName, string.Format( "Creating Database Account by restoring Database Account with Name {0} and restorable database account Id {1} to the timestamp {2}", SourceDatabaseAccountName, sourceAccountToRestore.Id, RestoreTimestampInUtc))) { DatabaseAccountGetResults cosmosDBAccount = CosmosDBManagementClient.DatabaseAccounts.CreateOrUpdateWithHttpMessagesAsync(TargetResourceGroupName, TargetDatabaseAccountName, databaseAccountCreateUpdateParameters).GetAwaiter().GetResult().Body; WriteObject(new PSDatabaseAccountGetResults(cosmosDBAccount)); } return; }
public override void ExecuteCmdlet() { if (ParameterSetName.Equals(ParentObjectParameterSet, StringComparison.Ordinal)) { Location = InputObject.Location; DatabaseAccountInstanceId = InputObject.DatabaseAccountInstanceId; } IEnumerable restorableMongoDBResources = CosmosDBManagementClient.RestorableMongodbResources.ListWithHttpMessagesAsync(Location, DatabaseAccountInstanceId, RestoreLocation, RestoreTimestampInUtc.ToString()).GetAwaiter().GetResult().Body; foreach (DatabaseRestoreResource restorableMongoDBResource in restorableMongoDBResources) { WriteObject(new PSDatabaseToRestore(restorableMongoDBResource)); } }