...
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
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
46 func (r *Resolver) buildVMEdgeAgentNotification(ctx context.Context, virtualMachines []*model.VirtualMachineMetadataInput, clusterEdgeID, eventType string) (*edgeAgent.NotificationMessage, error) {
47
48 user := middleware.ForContext(ctx)
49
50 notification := edgeAgent.NewNotificationMessage().
51 SetActor(user.Username).
52 SetClusterEdgeID(clusterEdgeID)
53
54 for _, vm := range virtualMachines {
55
56 if err := r.checkVirtualMachineExists(ctx, clusterEdgeID, vm.Name, vm.Namespace); err != nil {
57 return nil, err
58 }
59
60
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