13
13
// ----------------------------------------------------------------------------------
14
14
15
15
using Microsoft . Azure . Commands . Common . Authentication . Abstractions ;
16
- using Microsoft . Azure . Commands . Common . Authentication . Models ;
17
16
using Microsoft . Azure . Commands . Sql . Backup . Model ;
18
17
using Microsoft . Azure . Commands . Sql . Database . Model ;
19
- using Microsoft . Azure . Commands . Sql . Database . Services ;
20
- using Microsoft . Azure . Commands . Sql . ElasticPool . Services ;
21
18
using Microsoft . Azure . Commands . Sql . Server . Adapter ;
22
19
using Microsoft . Azure . Management . Sql . LegacySdk . Models ;
23
- using Microsoft . WindowsAzure . Commands . Utilities . Common ;
24
20
using System ;
25
21
using System . Collections . Generic ;
26
- using System . Globalization ;
27
22
using System . Linq ;
28
23
using System . Management . Automation ;
29
24
@@ -586,8 +581,10 @@ internal AzureSqlDatabaseGeoBackupPolicyModel SetDatabaseGeoBackupPolicy(
586
581
/// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param>
587
582
/// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param>
588
583
/// <param name="model">An object modeling the database to create via restore</param>
584
+ /// <param name="sourceSubscriptionId">Source Subscription Id</param>
585
+ /// <param name="customHeaders">Custom headers</param>
589
586
/// <returns>Restored database object</returns>
590
- internal AzureSqlDatabaseModel RestoreDatabase ( string resourceGroup , DateTime restorePointInTime , string resourceId , AzureSqlDatabaseModel model )
587
+ internal AzureSqlDatabaseModel RestoreDatabase ( string resourceGroup , DateTime restorePointInTime , string resourceId , AzureSqlDatabaseModel model , string sourceSubscriptionId , Dictionary < string , List < string > > customHeaders = null )
591
588
{
592
589
// Construct the ARM resource Id of the pool
593
590
string elasticPoolId = string . IsNullOrWhiteSpace ( model . ElasticPoolName ) ? null : AzureSqlDatabaseModel . PoolIdTemplate . FormatInvariant (
@@ -614,29 +611,46 @@ internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime re
614
611
RequestedBackupStorageRedundancy = model . RequestedBackupStorageRedundancy ,
615
612
ZoneRedundant = model . ZoneRedundant ,
616
613
} ;
617
-
618
- if ( model . CreateMode == Management . Sql . Models . CreateMode . Recovery )
619
- {
620
- dbModel . RecoverableDatabaseId = resourceId ;
621
- }
622
- else if ( model . CreateMode == Management . Sql . Models . CreateMode . Restore )
623
- {
624
- dbModel . RestorableDroppedDatabaseId = resourceId ;
625
- }
626
- else if ( model . CreateMode == Management . Sql . Models . CreateMode . PointInTimeRestore )
614
+
615
+ // check if restore operation is cross subscription or same subscription
616
+ if ( _subscription . Id != sourceSubscriptionId )
627
617
{
628
- dbModel . SourceDatabaseId = resourceId ;
629
- }
630
- else if ( model . CreateMode == Management . Sql . Models . CreateMode . RestoreLongTermRetentionBackup )
631
- {
632
- dbModel . LongTermRetentionBackupResourceId = resourceId ;
618
+ // cross subscription path
619
+ if ( dbModel . CreateMode != Management . Sql . Models . CreateMode . Recovery
620
+ && dbModel . CreateMode != Management . Sql . Models . CreateMode . Restore
621
+ && dbModel . CreateMode != Management . Sql . Models . CreateMode . PointInTimeRestore
622
+ && dbModel . CreateMode != Management . Sql . Models . CreateMode . RestoreLongTermRetentionBackup )
623
+ {
624
+ throw new ArgumentException ( "Restore mode not supported" ) ;
625
+ }
626
+ dbModel . SourceResourceId = resourceId ;
633
627
}
634
628
else
635
629
{
636
- throw new ArgumentException ( "Restore mode not supported" ) ;
630
+ // same subscription path
631
+ if ( model . CreateMode == Management . Sql . Models . CreateMode . Recovery )
632
+ {
633
+ dbModel . RecoverableDatabaseId = resourceId ;
634
+ }
635
+ else if ( model . CreateMode == Management . Sql . Models . CreateMode . Restore )
636
+ {
637
+ dbModel . RestorableDroppedDatabaseId = resourceId ;
638
+ }
639
+ else if ( model . CreateMode == Management . Sql . Models . CreateMode . PointInTimeRestore )
640
+ {
641
+ dbModel . SourceDatabaseId = resourceId ;
642
+ }
643
+ else if ( model . CreateMode == Management . Sql . Models . CreateMode . RestoreLongTermRetentionBackup )
644
+ {
645
+ dbModel . LongTermRetentionBackupResourceId = resourceId ;
646
+ }
647
+ else
648
+ {
649
+ throw new ArgumentException ( "Restore mode not supported" ) ;
650
+ }
637
651
}
638
652
639
- Management . Sql . Models . Database database = Communicator . RestoreDatabase ( resourceGroup , model . ServerName , model . DatabaseName , dbModel ) ;
653
+ Management . Sql . Models . Database database = Communicator . RestoreDatabase ( resourceGroup , model . ServerName , model . DatabaseName , dbModel , customHeaders ) ;
640
654
641
655
return new AzureSqlDatabaseModel ( resourceGroup , model . ServerName , database ) ;
642
656
}
0 commit comments