@@ -550,26 +550,55 @@ public ASRProtectionProfile(ProtectionProfile profile)
550
550
551
551
if ( profile . CustomData . ReplicationProvider == Constants . HyperVReplica )
552
552
{
553
- JavaScriptSerializer serializer = new JavaScriptSerializer ( ) ;
554
- HyperVReplicaProtectionProfileDetails details = ( HyperVReplicaProtectionProfileDetails ) profile . CustomData . ReplicationProviderSettings ;
553
+ HyperVReplicaProtectionProfileDetails details =
554
+ ( HyperVReplicaProtectionProfileDetails ) profile . CustomData . ReplicationProviderSettings ;
555
555
556
- this . ReplicationProviderSettings = new ASRHyperVReplicaProtectionProfileDetails ( ) ;
557
- this . ReplicationProviderSettings . ReplicaDeletionOption =
556
+ ASRHyperVReplicaProtectionProfileDetails replicationProviderSettings =
557
+ new ASRHyperVReplicaProtectionProfileDetails ( ) ;
558
+
559
+ replicationProviderSettings . ReplicaDeletionOption =
558
560
details . ReplicaDeletionOption ;
559
- this . ReplicationProviderSettings . ApplicationConsistentSnapshotFrequencyInHours =
561
+ replicationProviderSettings . ApplicationConsistentSnapshotFrequencyInHours =
560
562
details . ApplicationConsistentSnapshotFrequencyInHours ;
561
-
562
- this . ReplicationProviderSettings . Compression =
563
+ replicationProviderSettings . Compression =
563
564
details . Compression ;
564
- this . ReplicationProviderSettings . ReplicationFrequencyInSeconds =
565
+ replicationProviderSettings . ReplicationFrequencyInSeconds =
565
566
details . ReplicationFrequencyInSeconds ;
566
- this . ReplicationProviderSettings . AllowedAuthenticationType =
567
- ( details . AllowedAuthenticationType == 1 ) ? Constants . AuthenticationTypeKerberos : Constants . AuthenticationTypeCertificate ;
568
- this . ReplicationProviderSettings . RecoveryPoints = details . RecoveryPoints ;
569
- this . ReplicationProviderSettings . InitialReplicationMethod =
570
- ( string . Compare ( details . InitialReplicationMethod , "OverNetwork" , StringComparison . OrdinalIgnoreCase ) == 0 ) ? Constants . OnlineReplicationMethod : Constants . OfflineReplicationMethod ;
571
- this . ReplicationProviderSettings . ReplicationPort = details . ReplicationPort ;
572
- this . ReplicationProviderSettings . OnlineReplicationStartTime = details . OnlineReplicationStartTime ;
567
+ replicationProviderSettings . AllowedAuthenticationType =
568
+ ( details . AllowedAuthenticationType == 1 ) ?
569
+ Constants . AuthenticationTypeKerberos :
570
+ Constants . AuthenticationTypeCertificate ;
571
+ replicationProviderSettings . RecoveryPoints = details . RecoveryPoints ;
572
+ replicationProviderSettings . InitialReplicationMethod =
573
+ ( string . Compare ( details . InitialReplicationMethod , "OverNetwork" , StringComparison . OrdinalIgnoreCase ) == 0 ) ?
574
+ Constants . OnlineReplicationMethod :
575
+ Constants . OfflineReplicationMethod ;
576
+ replicationProviderSettings . ReplicationPort = details . ReplicationPort ;
577
+ replicationProviderSettings . OnlineReplicationStartTime = details . OnlineReplicationStartTime ;
578
+
579
+ this . ReplicationProviderSettings = replicationProviderSettings ;
580
+ }
581
+ else if ( profile . CustomData . ReplicationProvider == Constants . HyperVReplicaAzure )
582
+ {
583
+ HyperVReplicaAzureProtectionProfileDetails details =
584
+ ( HyperVReplicaAzureProtectionProfileDetails ) profile . CustomData . ReplicationProviderSettings ;
585
+
586
+ ASRHyperVReplicaAzureProtectionProfileDetails replicationProviderSettings =
587
+ new ASRHyperVReplicaAzureProtectionProfileDetails ( ) ;
588
+
589
+ replicationProviderSettings . ApplicationConsistentSnapshotFrequencyInHours =
590
+ details . ApplicationConsistentSnapshotFrequencyInHours ;
591
+ replicationProviderSettings . ReplicationFrequencyInSeconds = details . ReplicationInterval ;
592
+ replicationProviderSettings . RecoveryPoints = details . RecoveryPointHistoryDuration ;
593
+ replicationProviderSettings . OnlineReplicationStartTime = details . OnlineReplicationStartTime ;
594
+ replicationProviderSettings . Encryption = details . Encryption ;
595
+ replicationProviderSettings . ActiveStorageAccount = new CustomerStorageAccount ( ) ;
596
+ replicationProviderSettings . ActiveStorageAccount . StorageAccountName =
597
+ details . ActiveStorageAccount . StorageAccountName ;
598
+ replicationProviderSettings . ActiveStorageAccount . SubscriptionId =
599
+ details . ActiveStorageAccount . SubscriptionId ;
600
+
601
+ this . ReplicationProviderSettings = replicationProviderSettings ;
573
602
}
574
603
}
575
604
@@ -603,14 +632,21 @@ public ASRProtectionProfile(ProtectionProfile profile)
603
632
/// Gets or sets HyperVReplicaProviderSettings
604
633
/// </summary>
605
634
// public HyperVReplicaProviderSettings ReplicationProviderSettings { get; set; }
606
- public ASRHyperVReplicaProtectionProfileDetails ReplicationProviderSettings { get ; set ; }
635
+ public ASRProtectionProfileProviderSettingsDetails ReplicationProviderSettings { get ; set ; }
607
636
608
637
#endregion Properties
609
638
}
610
639
640
+ /// <summary>
641
+ /// Protection profile provider settings
642
+ /// </summary>
643
+ public class ASRProtectionProfileProviderSettingsDetails
644
+ {
645
+ }
646
+
611
647
// Summary:
612
648
// HyperV Replica Protection Profile Details.
613
- public class ASRHyperVReplicaProtectionProfileDetails
649
+ public class ASRHyperVReplicaProtectionProfileDetails : ASRProtectionProfileProviderSettingsDetails
614
650
{
615
651
616
652
// Summary:
@@ -658,6 +694,52 @@ public class ASRHyperVReplicaProtectionProfileDetails
658
694
public ushort ReplicationPort { get ; set ; }
659
695
}
660
696
697
+ /// <summary>
698
+ /// ASR HyperV Replica Azure enable protection input.
699
+ /// </summary>
700
+ public class ASRHyperVReplicaAzureProtectionProfileDetails : ASRProtectionProfileProviderSettingsDetails
701
+ {
702
+ // Summary:
703
+ // Optional.
704
+ public CustomerStorageAccount ActiveStorageAccount { get ; set ; }
705
+ //
706
+ // Summary:
707
+ // Optional.
708
+ public int ApplicationConsistentSnapshotFrequencyInHours { get ; set ; }
709
+ //
710
+ // Summary:
711
+ // Optional.
712
+ public string Encryption { get ; set ; }
713
+ //
714
+ // Summary:
715
+ // Optional.
716
+ public TimeSpan ? OnlineReplicationStartTime { get ; set ; }
717
+ //
718
+ // Summary:
719
+ // Optional.
720
+ public int RecoveryPoints { get ; set ; }
721
+ //
722
+ // Summary:
723
+ // Optional.
724
+ public int ReplicationFrequencyInSeconds { get ; set ; }
725
+ }
726
+
727
+ /// <summary>
728
+ /// ASR Customer Storage Account.
729
+ /// </summary>
730
+ public class ASRCustomerStorageAccount
731
+ {
732
+ /// <summary>
733
+ /// Name of the storage account.
734
+ /// </summary>
735
+ public string StorageAccountName { get ; set ; }
736
+
737
+ /// <summary>
738
+ /// Subscription ID to which the Storage Account is associated.
739
+ /// </summary>
740
+ public string SubscriptionId { get ; set ; }
741
+ }
742
+
661
743
/// <summary>
662
744
/// Azure Site Recovery Protection Entity.
663
745
/// </summary>
@@ -700,19 +782,41 @@ public ASRProtectionEntity(ProtectionEntity pe)
700
782
this . ReplicationHealth = pe . Properties . ReplicationHealth ;
701
783
this . TestFailoverStateDescription = pe . Properties . TestFailoverStateDescription ;
702
784
703
- /*
704
- if (!string.IsNullOrWhiteSpace(pe.ReplicationProviderSettings))
785
+ if ( pe . Properties . ReplicationProviderSettings != null )
705
786
{
706
- AzureVmDiskDetails diskDetails;
707
- DataContractUtils.Deserialize<AzureVmDiskDetails>(
708
- pe.ReplicationProviderSettings, out diskDetails);
709
-
710
- this.Disks = diskDetails.Disks;
711
- this.OSDiskId = diskDetails.VHDId;
712
- this.OSDiskName = diskDetails.OsDisk;
713
- this.OS = diskDetails.OsType;
787
+ if ( 0 == string . Compare (
788
+ pe . Properties . ReplicationProvider ,
789
+ Constants . HyperVReplicaAzure ,
790
+ StringComparison . OrdinalIgnoreCase ) )
791
+ {
792
+ if ( pe . Properties . ReplicationProviderSettings is AzureProtectionEntityProviderSettings )
793
+ {
794
+ AzureProtectionEntityProviderSettings providerSettings =
795
+ ( AzureProtectionEntityProviderSettings ) pe . Properties . ReplicationProviderSettings ;
796
+
797
+ AzureVmDiskDetails diskDetails = providerSettings . VMDiskDetails ;
798
+ this . UpdateDiskDetails ( diskDetails ) ;
799
+
800
+ // also take the VM properties
801
+ }
802
+ else if ( pe . Properties . ReplicationProviderSettings is OnPremProtectionEntityProviderSettings )
803
+ {
804
+ OnPremProtectionEntityProviderSettings providerSettings =
805
+ ( OnPremProtectionEntityProviderSettings ) pe . Properties . ReplicationProviderSettings ;
806
+
807
+ AzureVmDiskDetails diskDetails = providerSettings . VMDiskDetails ;
808
+ this . UpdateDiskDetails ( diskDetails ) ;
809
+ }
810
+ }
811
+ else
812
+ {
813
+ OnPremProtectionEntityProviderSettings providerSettings =
814
+ ( OnPremProtectionEntityProviderSettings ) pe . Properties . ReplicationProviderSettings ;
815
+
816
+ AzureVmDiskDetails diskDetails = providerSettings . VMDiskDetails ;
817
+ this . UpdateDiskDetails ( diskDetails ) ;
818
+ }
714
819
}
715
- */
716
820
717
821
if ( pe . Properties . ProtectionProfile != null &&
718
822
! string . IsNullOrWhiteSpace ( pe . Properties . ProtectionProfile . Id ) )
@@ -721,6 +825,22 @@ public ASRProtectionEntity(ProtectionEntity pe)
721
825
}
722
826
}
723
827
828
+ private void UpdateDiskDetails ( AzureVmDiskDetails diskDetails )
829
+ {
830
+ this . Disks = new List < VirtualHardDisk > ( ) ;
831
+ foreach ( var disk in diskDetails . Disks )
832
+ {
833
+ VirtualHardDisk hd = new VirtualHardDisk ( ) ;
834
+ hd . Id = disk . Id ;
835
+ hd . Name = disk . Name ;
836
+ this . Disks . Add ( hd ) ;
837
+ }
838
+
839
+ this . OSDiskId = diskDetails . VHDId ;
840
+ this . OSDiskName = diskDetails . OsDisk ;
841
+ this . OS = diskDetails . OsType ;
842
+ }
843
+
724
844
/// <summary>
725
845
/// Initializes a new instance of the <see cref="ASRProtectionEntity" /> class with
726
846
/// required parameters.
@@ -863,25 +983,25 @@ public ASRProtectionEntity(
863
983
/// </summary>
864
984
public ASRProtectionProfile ProtectionProfile { get ; set ; }
865
985
866
- ///// <summary>
867
- ///// Gets or sets OSDiskVHDId.
868
- ///// </summary>
869
- // public string OSDiskId { get; set; }
986
+ /// <summary>
987
+ /// Gets or sets OSDiskVHDId.
988
+ /// </summary>
989
+ public string OSDiskId { get ; set ; }
870
990
871
- ///// <summary>
872
- ///// Gets or sets OS DiskName.
873
- ///// </summary>
874
- // public string OSDiskName { get; set; }
991
+ /// <summary>
992
+ /// Gets or sets OS DiskName.
993
+ /// </summary>
994
+ public string OSDiskName { get ; set ; }
875
995
876
- ///// <summary>
877
- ///// Gets or sets OS.
878
- ///// </summary>
879
- // public string OS { get; set; }
996
+ /// <summary>
997
+ /// Gets or sets OS.
998
+ /// </summary>
999
+ public string OS { get ; set ; }
880
1000
881
- ///// <summary>
882
- ///// Gets or sets OS.
883
- ///// </summary>
884
- // public List<VirtualHardDisk> Disks { get; set; }
1001
+ /// <summary>
1002
+ /// Gets or sets OS.
1003
+ /// </summary>
1004
+ public List < VirtualHardDisk > Disks { get ; set ; }
885
1005
886
1006
/// <summary>
887
1007
/// Gets or sets Replication provider.
0 commit comments