@@ -405,6 +405,19 @@ func (c *BackingImageDataSourceController) syncBackingImage(bids *longhorn.Backi
405
405
}
406
406
}
407
407
408
+ // Only copy the secret to spec if it is to encrypt other backing image
409
+ // because we use spec secret to check if it is encrypted.
410
+ if bi .Spec .SourceType == longhorn .BackingImageDataSourceTypeClone &&
411
+ bimtypes .EncryptionType (bi .Spec .SourceParameters [longhorn .DataSourceTypeCloneParameterEncryption ]) == bimtypes .EncryptionTypeEncrypt {
412
+
413
+ if bi .Spec .SourceParameters [longhorn .DataSourceTypeCloneParameterSecret ] != "" {
414
+ bi .Spec .Secret = bi .Spec .SourceParameters [longhorn .DataSourceTypeCloneParameterSecret ]
415
+ }
416
+ if bi .Spec .SourceParameters [longhorn .DataSourceTypeCloneParameterSecretNamespace ] != "" {
417
+ bi .Spec .SecretNamespace = bi .Spec .SourceParameters [longhorn .DataSourceTypeCloneParameterSecretNamespace ]
418
+ }
419
+ }
420
+
408
421
return nil
409
422
}
410
423
@@ -669,7 +682,11 @@ func (c *BackingImageDataSourceController) generateBackingImageDataSourcePodMani
669
682
"--source-type" , string (bids .Spec .SourceType ),
670
683
}
671
684
672
- if err := c .prepareRunningParameters (bids ); err != nil {
685
+ bids .Status .RunningParameters = bids .Spec .Parameters
686
+ if err := c .prepareRunningParametersForClone (bids ); err != nil {
687
+ return nil , err
688
+ }
689
+ if err := c .prepareRunningParametersForExport (bids ); err != nil {
673
690
return nil , err
674
691
}
675
692
for key , value := range bids .Status .RunningParameters {
@@ -679,6 +696,23 @@ func (c *BackingImageDataSourceController) generateBackingImageDataSourcePodMani
679
696
cmd = append (cmd , "--checksum" , bids .Spec .Checksum )
680
697
}
681
698
699
+ if bids .Spec .SourceType == longhorn .BackingImageDataSourceTypeClone &&
700
+ bids .Spec .Parameters [longhorn .DataSourceTypeCloneParameterSecretNamespace ] != "" &&
701
+ bids .Spec .Parameters [longhorn .DataSourceTypeCloneParameterSecret ] != "" {
702
+
703
+ credential , err := c .ds .GetEncryptionSecret (
704
+ bids .Spec .Parameters [longhorn .DataSourceTypeCloneParameterSecretNamespace ],
705
+ bids .Spec .Parameters [longhorn .DataSourceTypeCloneParameterSecret ],
706
+ )
707
+ if err != nil {
708
+ return nil , err
709
+ }
710
+
711
+ for key , value := range credential {
712
+ cmd = append (cmd , "--credential" , fmt .Sprintf ("%s=%s" , key , value ))
713
+ }
714
+ }
715
+
682
716
if bids .Spec .SourceType == longhorn .BackingImageDataSourceTypeRestore {
683
717
var credential map [string ]string
684
718
backupTarget , err := c .ds .GetBackupTargetRO (types .DefaultBackupTargetName )
@@ -745,6 +779,14 @@ func (c *BackingImageDataSourceController) generateBackingImageDataSourcePodMani
745
779
Name : "disk-path" ,
746
780
MountPath : bimtypes .DiskPathInContainer ,
747
781
},
782
+ {
783
+ Name : "host-dev" ,
784
+ MountPath : "/dev" ,
785
+ },
786
+ {
787
+ Name : "host-proc" ,
788
+ MountPath : "/host/proc" , // we use this to enter the host namespace
789
+ },
748
790
},
749
791
Env : []corev1.EnvVar {
750
792
{
@@ -770,6 +812,22 @@ func (c *BackingImageDataSourceController) generateBackingImageDataSourcePodMani
770
812
},
771
813
},
772
814
},
815
+ {
816
+ Name : "host-dev" ,
817
+ VolumeSource : corev1.VolumeSource {
818
+ HostPath : & corev1.HostPathVolumeSource {
819
+ Path : "/dev" ,
820
+ },
821
+ },
822
+ },
823
+ {
824
+ Name : "host-proc" ,
825
+ VolumeSource : corev1.VolumeSource {
826
+ HostPath : & corev1.HostPathVolumeSource {
827
+ Path : "/proc" ,
828
+ },
829
+ },
830
+ },
773
831
},
774
832
NodeName : bids .Spec .NodeID ,
775
833
RestartPolicy : corev1 .RestartPolicyNever ,
@@ -802,8 +860,21 @@ func (c *BackingImageDataSourceController) generateBackingImageDataSourcePodMani
802
860
return podSpec , nil
803
861
}
804
862
805
- func (c * BackingImageDataSourceController ) prepareRunningParameters (bids * longhorn.BackingImageDataSource ) error {
806
- bids .Status .RunningParameters = bids .Spec .Parameters
863
+ func (c * BackingImageDataSourceController ) prepareRunningParametersForClone (bids * longhorn.BackingImageDataSource ) error {
864
+ if bids .Spec .SourceType != longhorn .BackingImageDataSourceTypeClone {
865
+ return nil
866
+ }
867
+
868
+ sourceBackingImageName := bids .Spec .Parameters [longhorn .DataSourceTypeCloneParameterBackingImage ]
869
+ sourceBackingImage , err := c .ds .GetBackingImageRO (sourceBackingImageName )
870
+ if err != nil {
871
+ return err
872
+ }
873
+ bids .Status .RunningParameters [longhorn .DataSourceTypeCloneParameterBackingImageUUID ] = sourceBackingImage .Status .UUID
874
+ return nil
875
+ }
876
+
877
+ func (c * BackingImageDataSourceController ) prepareRunningParametersForExport (bids * longhorn.BackingImageDataSource ) error {
807
878
if bids .Spec .SourceType != longhorn .BackingImageDataSourceTypeExportFromVolume {
808
879
return nil
809
880
}
0 commit comments