in pkg/cloudprovider/drift.go [141:183]
func (c *CloudProvider) isImageVersionDrifted(
ctx context.Context, nodeClaim *karpv1.NodeClaim) (cloudprovider.DriftReason, error) {
logger := log.FromContext(ctx)
id, err := utils.GetVMName(nodeClaim.Status.ProviderID)
if err != nil {
// TODO (charliedmcb): Do we need to handle vm not found here before its provisioned?
return "", err
}
vm, err := c.instanceProvider.Get(ctx, id)
if err != nil {
// TODO (charliedmcb): Do we need to handle vm not found here before its provisioned?
return "", err
}
if vm == nil {
// TODO (charliedmcb): Do we need to handle vm not found here before its provisioned?
return "", fmt.Errorf("vm with id %s missing", id)
}
if vm.Properties == nil ||
vm.Properties.StorageProfile == nil ||
vm.Properties.StorageProfile.ImageReference == nil {
return "", nil
}
CIGID := lo.FromPtr(vm.Properties.StorageProfile.ImageReference.CommunityGalleryImageID)
SIGID := lo.FromPtr(vm.Properties.StorageProfile.ImageReference.ID)
vmImageID := lo.Ternary(SIGID != "", SIGID, CIGID)
var imageStub imagefamily.DefaultImageOutput
imageStub.PopulateImageTraitsFromID(vmImageID)
expectedImageID, err := c.imageProvider.GetLatestImageID(ctx, imageStub)
if err != nil {
return "", err
}
if vmImageID != expectedImageID {
logger.V(1).Info(fmt.Sprintf("drift triggered for %s, with expected image id %s, and actual image id %s", ImageVersionDrift, expectedImageID, vmImageID))
return ImageVersionDrift, nil
}
return "", nil
}