...

Source file src/edge-infra.dev/pkg/edge/api/graph/resolver/vm_orchestration.go

Documentation: edge-infra.dev/pkg/edge/api/graph/resolver

     1  package resolver
     2  
     3  import (
     4  	"context"
     5  
     6  	virtv1 "kubevirt.io/api/core/v1"
     7  
     8  	"edge-infra.dev/pkg/edge/api/apierror"
     9  	"edge-infra.dev/pkg/edge/api/graph/model"
    10  	"edge-infra.dev/pkg/edge/api/middleware"
    11  	chariotClientApi "edge-infra.dev/pkg/edge/chariot/client"
    12  	edgeAgent "edge-infra.dev/pkg/edge/edgeagent/model"
    13  )
    14  
    15  func (r *Resolver) UpdateKubeVirtualMachineViaChariot(ctx context.Context, virtualMachine *model.VirtualMachine, operation chariotClientApi.Operation) error {
    16  	return r.updateKubeVirtualMachineViaChariot(ctx, virtualMachine, operation)
    17  }
    18  
    19  func (r *Resolver) updateKubeVirtualMachineViaChariot(ctx context.Context, virtualMachine *model.VirtualMachine, operation chariotClientApi.Operation) error {
    20  	cluster, err := r.StoreClusterService.GetCluster(ctx, virtualMachine.ClusterEdgeID)
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	encodedKubeVM, err := r.VirtualMachineService.CreateDSDSKubeVirtualMachineCR(virtualMachine)
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	return r.sendChariotMessage(ctx, cluster.ProjectID, cluster.ClusterEdgeID, operation, encodedKubeVM)
    31  }
    32  
    33  // Check if virtual machine exists
    34  func (r *Resolver) checkVirtualMachineExists(ctx context.Context, clusterEdgeID, name, namespace string) error {
    35  	vms, err := r.VirtualMachineStatusService.GetStatuses(ctx, &clusterEdgeID, &name, &namespace)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	if len(vms) == 0 {
    40  		return apierror.New("the virtual machine doesn't exist").SetOperationID(ctx)
    41  	}
    42  	return nil
    43  }
    44  
    45  // Builds edge agent notifications for virtual machines, used for vm stop/start/restart queries and live migration
    46  func (r *Resolver) buildVMEdgeAgentNotification(ctx context.Context, virtualMachines []*model.VirtualMachineMetadataInput, clusterEdgeID, eventType string) (*edgeAgent.NotificationMessage, error) {
    47  	//get actor/user from context
    48  	user := middleware.ForContext(ctx)
    49  
    50  	notification := edgeAgent.NewNotificationMessage().
    51  		SetActor(user.Username).
    52  		SetClusterEdgeID(clusterEdgeID)
    53  
    54  	for _, vm := range virtualMachines {
    55  		// Check Virtual machine status
    56  		if err := r.checkVirtualMachineExists(ctx, clusterEdgeID, vm.Name, vm.Namespace); err != nil {
    57  			return nil, err
    58  		}
    59  
    60  		//mapping virtual machine info to edge agent event
    61  		event := edgeAgent.BuildEdgeAgentEvent(vm.Name, virtv1.VirtualMachineGroupVersionKind.Kind, vm.Namespace, eventType)
    62  
    63  		notification.AddEvent(*event)
    64  	}
    65  	return notification, nil
    66  }
    67  

View as plain text