@@ -666,11 +666,71 @@ func (h LifeCycleHandler) fillStatusResources(ctx context.Context, vmSnapshot *v
666666 vmSnapshot .Status .Resources = []virtv2.ResourceRef {}
667667
668668 vmSnapshot .Status .Resources = append (vmSnapshot .Status .Resources , virtv2.ResourceRef {
669- Kind : virtv2 . VirtualMachineKind ,
669+ Kind : vm . Kind ,
670670 ApiVersion : vm .APIVersion ,
671671 Name : vm .Name ,
672672 })
673673
674+ if vmSnapshot .Spec .KeepIPAddress == virtv2 .KeepIPAddressAlways {
675+ vmip , err := object .FetchObject (ctx , types.NamespacedName {
676+ Namespace : vm .Namespace ,
677+ Name : vm .Status .VirtualMachineIPAddress ,
678+ }, h .client , & virtv2.VirtualMachineIPAddress {})
679+ if err != nil {
680+ return err
681+ }
682+
683+ if vmip == nil {
684+ return fmt .Errorf ("the virtual machine ip address %q not found" , vm .Status .VirtualMachineIPAddress )
685+ }
686+
687+ vmSnapshot .Status .Resources = append (vmSnapshot .Status .Resources , virtv2.ResourceRef {
688+ Kind : vmip .Kind ,
689+ ApiVersion : vmip .APIVersion ,
690+ Name : vmip .APIVersion ,
691+ })
692+ }
693+
694+ if vm .Spec .Provisioning != nil {
695+ var provisioningSecretName string
696+
697+ switch vm .Spec .Provisioning .Type {
698+ case virtv2 .ProvisioningTypeSysprepRef :
699+ if vm .Spec .Provisioning .SysprepRef == nil {
700+ return errors .New ("the virtual machine sysprep ref provisioning is nil" )
701+ }
702+
703+ if vm .Spec .Provisioning .SysprepRef .Kind == virtv2 .SysprepRefKindSecret {
704+ provisioningSecretName = vm .Spec .Provisioning .SysprepRef .Name
705+ }
706+
707+ case virtv2 .ProvisioningTypeUserDataRef :
708+ if vm .Spec .Provisioning .UserDataRef == nil {
709+ return errors .New ("the virtual machine user data ref provisioning is nil" )
710+ }
711+
712+ if vm .Spec .Provisioning .UserDataRef .Kind == virtv2 .UserDataRefKindSecret {
713+ provisioningSecretName = vm .Spec .Provisioning .UserDataRef .Name
714+ }
715+ }
716+
717+ if provisioningSecretName != "" {
718+ secretKey := types.NamespacedName {Name : provisioningSecretName , Namespace : vm .Namespace }
719+ provisioner , err := object .FetchObject (ctx , secretKey , h .client , & corev1.Secret {})
720+ if err != nil {
721+ return err
722+ }
723+
724+ if provisioner != nil {
725+ vmSnapshot .Status .Resources = append (vmSnapshot .Status .Resources , virtv2.ResourceRef {
726+ Kind : provisioner .Kind ,
727+ ApiVersion : provisioner .APIVersion ,
728+ Name : provisioner .Name ,
729+ })
730+ }
731+ }
732+ }
733+
674734 for _ , bdr := range vm .Status .BlockDeviceRefs {
675735 if bdr .Kind != virtv2 .DiskDevice {
676736 continue
0 commit comments