@@ -42,6 +42,9 @@ const (
4242 // networkFileType represents a network file type (pod only)
4343 networkFileType
4444
45+ // hypervisorFileType represents a hypervisor file type (pod only)
46+ hypervisorFileType
47+
4548 // processFileType represents a process file type
4649 processFileType
4750
@@ -64,6 +67,9 @@ const stateFile = "state.json"
6467// networkFile is the file name storing a pod network.
6568const networkFile = "network.json"
6669
70+ // hypervisorFile is the file name storing a hypervisor's state.
71+ const hypervisorFile = "hypervisor.json"
72+
6773// processFile is the file name storing a container process.
6874const processFile = "process.json"
6975
@@ -109,6 +115,10 @@ type resourceStorage interface {
109115 fetchPodNetwork (podID string ) (NetworkNamespace , error )
110116 storePodNetwork (podID string , networkNS NetworkNamespace ) error
111117
118+ // Hypervisor resources
119+ fetchHypervisorState (podID string , state interface {}) error
120+ storeHypervisorState (podID string , state interface {}) error
121+
112122 // Container resources
113123 storeContainerResource (podID , containerID string , resource podResource , data interface {}) error
114124 deleteContainerResources (podID , containerID string , resources []podResource ) error
@@ -319,7 +329,7 @@ func (fs *filesystem) fetchDeviceFile(fileData []byte, devices *[]Device) error
319329func resourceNeedsContainerID (podSpecific bool , resource podResource ) bool {
320330
321331 switch resource {
322- case lockFileType , networkFileType :
332+ case lockFileType , networkFileType , hypervisorFileType :
323333 // pod-specific resources
324334 return false
325335 default :
@@ -342,7 +352,7 @@ func resourceDir(podSpecific bool, podID, containerID string, resource podResour
342352 case configFileType :
343353 path = configStoragePath
344354 break
345- case stateFileType , networkFileType , processFileType , lockFileType , mountsFileType , devicesFileType :
355+ case stateFileType , networkFileType , processFileType , lockFileType , mountsFileType , devicesFileType , hypervisorFileType :
346356 path = runStoragePath
347357 break
348358 default :
@@ -378,6 +388,8 @@ func (fs *filesystem) resourceURI(podSpecific bool, podID, containerID string, r
378388 filename = stateFile
379389 case networkFileType :
380390 filename = networkFile
391+ case hypervisorFileType :
392+ filename = hypervisorFile
381393 case processFileType :
382394 filename = processFile
383395 case lockFileType :
@@ -429,6 +441,7 @@ func (fs *filesystem) commonResourceChecks(podSpecific bool, podID, containerID
429441 case configFileType :
430442 case stateFileType :
431443 case networkFileType :
444+ case hypervisorFileType :
432445 case processFileType :
433446 case mountsFileType :
434447 case devicesFileType :
@@ -598,10 +611,23 @@ func (fs *filesystem) fetchPodNetwork(podID string) (NetworkNamespace, error) {
598611 return networkNS , nil
599612}
600613
614+ func (fs * filesystem ) fetchHypervisorState (podID string , state interface {}) error {
615+ return fs .fetchResource (true , podID , "" , hypervisorFileType , state )
616+ }
617+
601618func (fs * filesystem ) storePodNetwork (podID string , networkNS NetworkNamespace ) error {
602619 return fs .storePodResource (podID , networkFileType , networkNS )
603620}
604621
622+ func (fs * filesystem ) storeHypervisorState (podID string , state interface {}) error {
623+ hypervisorFile , _ , err := fs .resourceURI (true , podID , "" , hypervisorFileType )
624+ if err != nil {
625+ return err
626+ }
627+
628+ return fs .storeFile (hypervisorFile , state )
629+ }
630+
605631func (fs * filesystem ) deletePodResources (podID string , resources []podResource ) error {
606632 if resources == nil {
607633 resources = []podResource {configFileType , stateFileType }
0 commit comments