1 package resolver
2
3
4
5
6
7 import (
8 "context"
9 "fmt"
10
11 "edge-infra.dev/pkg/edge/api/graph/model"
12 chariotClientApi "edge-infra.dev/pkg/edge/chariot/client"
13 edgeAgent "edge-infra.dev/pkg/edge/edgeagent/model"
14 )
15
16
17 func (r *mutationResolver) CreateVirtualMachine(ctx context.Context, createVM model.VirtualMachineCreateInput) (*model.VirtualMachine, error) {
18 virtualMachine, name, err := r.VirtualMachineService.CreateVirtualMachineEntry(ctx, &createVM)
19 if err != nil {
20 return nil, err
21 }
22
23 cluster, err := r.StoreClusterService.GetCluster(ctx, createVM.ClusterEdgeID)
24 if err != nil {
25 return nil, err
26 }
27
28 namespaces, err := r.NamespaceService.GetClusterNamespaces(ctx, createVM.ClusterEdgeID, &name)
29 if err != nil {
30 return nil, err
31 }
32 if len(namespaces) != 1 {
33 return nil, fmt.Errorf("failed to retrieve namespace for VM")
34 }
35
36 err = r.UpdateKubeNamespaceViaChariot(ctx, namespaces[0], cluster, chariotClientApi.Create)
37 if err != nil {
38 return nil, err
39 }
40
41 return virtualMachine, r.UpdateKubeVirtualMachineViaChariot(ctx, virtualMachine, chariotClientApi.Create)
42 }
43
44
45 func (r *mutationResolver) DeleteVirtualMachine(ctx context.Context, virtualMachineID string) (bool, error) {
46 virtualMachine, err := r.VirtualMachineService.GetVirtualMachineWithDisks(ctx, virtualMachineID)
47 if err != nil {
48 return false, err
49 }
50 err = r.VirtualMachineService.DeleteVirtualMachineEntry(ctx, virtualMachineID)
51 if err != nil {
52 return false, err
53 }
54
55 return true, r.UpdateKubeVirtualMachineViaChariot(ctx, virtualMachine, chariotClientApi.Delete)
56 }
57
58
59 func (r *mutationResolver) UpdateVirtualMachine(ctx context.Context, updateVM model.VirtualMachineIDInput) (*model.VirtualMachine, error) {
60 updatedVM, err := r.VirtualMachineService.UpdateVirtualMachineEntry(ctx, &updateVM)
61 if err != nil {
62 return nil, err
63 }
64
65 return updatedVM, r.UpdateKubeVirtualMachineViaChariot(ctx, updatedVM, chariotClientApi.Create)
66 }
67
68
69 func (r *mutationResolver) CreateVirtualMachineDisks(ctx context.Context, virtualMachineID string, createDisks []*model.VirtualMachineDiskCreateInput) ([]*model.VirtualMachineDisk, error) {
70 createdDisks, err := r.VirtualMachineService.CreateVirtualMachineDiskEntries(ctx, virtualMachineID, createDisks)
71 if err != nil {
72 return nil, err
73 }
74 virtualMachine, err := r.VirtualMachineService.GetVirtualMachineWithDisks(ctx, virtualMachineID)
75 if err != nil {
76 return nil, err
77 }
78 return createdDisks, r.UpdateKubeVirtualMachineViaChariot(ctx, virtualMachine, chariotClientApi.Create)
79 }
80
81
82 func (r *mutationResolver) DeleteVirtualMachineDisk(ctx context.Context, diskID string) (bool, error) {
83 deletedDisk, err := r.VirtualMachineService.DeleteVirtualMachineDiskEntry(ctx, diskID)
84 if err != nil {
85 return false, err
86 }
87 virtualMachineID := deletedDisk.VirtualMachineID
88 virtualMachine, err := r.VirtualMachineService.GetVirtualMachineWithDisks(ctx, virtualMachineID)
89 if err != nil {
90 return false, err
91 }
92 return true, r.UpdateKubeVirtualMachineViaChariot(ctx, virtualMachine, chariotClientApi.Create)
93 }
94
95
96 func (r *mutationResolver) UpdateVirtualMachineDisks(ctx context.Context, updateDisks []*model.VirtualMachineDiskIDInput) ([]*model.VirtualMachineDisk, error) {
97 updatedDisks, err := r.VirtualMachineService.UpdateVirtualMachineDiskEntries(ctx, updateDisks)
98 if err != nil {
99 return nil, err
100 }
101 if len(updatedDisks) == 0 {
102 return nil, fmt.Errorf("vm disks failed to update")
103 }
104 virtualMachineID := updatedDisks[0].VirtualMachineID
105 virtualMachine, err := r.VirtualMachineService.GetVirtualMachineWithDisks(ctx, virtualMachineID)
106 if err != nil {
107 return nil, err
108 }
109 return updatedDisks, r.UpdateKubeVirtualMachineViaChariot(ctx, virtualMachine, chariotClientApi.Create)
110 }
111
112
113 func (r *mutationResolver) StartVirtualMachine(ctx context.Context, clusterEdgeID string, virtualMachines []*model.VirtualMachineMetadataInput) (bool, error) {
114 if virtualMachines == nil {
115 return false, fmt.Errorf("virtual machines list cannot be empty")
116 }
117
118 notification, err := r.buildVMEdgeAgentNotification(ctx, virtualMachines, clusterEdgeID, edgeAgent.EventTypeStart)
119 if err != nil {
120 return false, err
121 }
122
123
124 cluster, err := r.StoreClusterService.GetCluster(ctx, clusterEdgeID)
125 if err != nil {
126 return false, err
127 }
128
129 if err := r.EdgeAgentService.InvokeEdgeAgentPubsub(ctx, notification, cluster.ProjectID); err != nil {
130 return false, err
131 }
132 return true, nil
133 }
134
135
136 func (r *mutationResolver) StopVirtualMachine(ctx context.Context, clusterEdgeID string, virtualMachines []*model.VirtualMachineMetadataInput) (bool, error) {
137 if virtualMachines == nil {
138 return false, fmt.Errorf("virtual machines list cannot be empty")
139 }
140
141 notification, err := r.buildVMEdgeAgentNotification(ctx, virtualMachines, clusterEdgeID, edgeAgent.EventTypeStop)
142 if err != nil {
143 return false, err
144 }
145
146
147 cluster, err := r.StoreClusterService.GetCluster(ctx, clusterEdgeID)
148 if err != nil {
149 return false, err
150 }
151
152 if err := r.EdgeAgentService.InvokeEdgeAgentPubsub(ctx, notification, cluster.ProjectID); err != nil {
153 return false, err
154 }
155 return true, nil
156 }
157
158
159 func (r *mutationResolver) RestartVirtualMachine(ctx context.Context, clusterEdgeID string, virtualMachines []*model.VirtualMachineMetadataInput) (bool, error) {
160 if virtualMachines == nil {
161 return false, fmt.Errorf("virtual machines list cannot be empty")
162 }
163
164 notification, err := r.buildVMEdgeAgentNotification(ctx, virtualMachines, clusterEdgeID, edgeAgent.EventTypeRestart)
165 if err != nil {
166 return false, err
167 }
168
169
170 cluster, err := r.StoreClusterService.GetCluster(ctx, clusterEdgeID)
171 if err != nil {
172 return false, err
173 }
174
175 if err := r.EdgeAgentService.InvokeEdgeAgentPubsub(ctx, notification, cluster.ProjectID); err != nil {
176 return false, err
177 }
178 return true, nil
179 }
180
181
182 func (r *queryResolver) VirtualMachine(ctx context.Context, virtualMachineID string) (*model.VirtualMachine, error) {
183 return r.VirtualMachineService.GetVirtualMachine(ctx, virtualMachineID)
184 }
185
186
187 func (r *queryResolver) VirtualMachines(ctx context.Context, clusterEdgeID *string, hostname *string) ([]*model.VirtualMachine, error) {
188 return r.VirtualMachineService.GetVirtualMachines(ctx, clusterEdgeID, hostname)
189 }
190
191
192 func (r *queryResolver) VirtualMachineDisk(ctx context.Context, diskID string) (*model.VirtualMachineDisk, error) {
193 return r.VirtualMachineService.GetVirtualMachineDisk(ctx, diskID)
194 }
195
196
197 func (r *queryResolver) VirtualMachineDisks(ctx context.Context, virtualMachineID string) ([]*model.VirtualMachineDisk, error) {
198 return r.VirtualMachineService.GetVirtualMachineDisks(ctx, virtualMachineID)
199 }
200
View as plain text