github.com/Cloud-Foundations/Dominator@v0.3.4/hypervisor/metadatad/api.go (about) 1 package metadatad 2 3 import ( 4 "io" 5 "net" 6 "net/http" 7 8 "github.com/Cloud-Foundations/Dominator/hypervisor/manager" 9 "github.com/Cloud-Foundations/Dominator/lib/constants" 10 "github.com/Cloud-Foundations/Dominator/lib/log" 11 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 12 ) 13 14 type rawHandlerFunc func(w http.ResponseWriter, ipAddr net.IP) 15 type metadataWriter func(writer io.Writer, vmInfo proto.VmInfo) error 16 17 type server struct { 18 bridges []net.Interface 19 hypervisorPortNum uint 20 manager *manager.Manager 21 logger log.DebugLogger 22 fileHandlers map[string]string 23 infoHandlers map[string]metadataWriter 24 rawHandlers map[string]rawHandlerFunc 25 paths map[string]struct{} 26 } 27 28 func StartServer(hypervisorPortNum uint, bridges []net.Interface, 29 managerObj *manager.Manager, logger log.DebugLogger) error { 30 s := &server{ 31 bridges: bridges, 32 hypervisorPortNum: hypervisorPortNum, 33 manager: managerObj, 34 logger: logger, 35 } 36 s.fileHandlers = map[string]string{ 37 constants.MetadataIdentityCert: manager.IdentityCertFile, 38 constants.MetadataIdentityKey: manager.IdentityKeyFile, 39 constants.MetadataUserData: manager.UserDataFile, 40 } 41 s.infoHandlers = map[string]metadataWriter{ 42 constants.MetadataEpochTime: s.showTime, 43 constants.MetadataIdentityDoc: s.showVM, 44 } 45 s.rawHandlers = map[string]rawHandlerFunc{ 46 constants.SmallStackDataSource: s.showTrue, 47 constants.MetadataExternallyPatchable: s.showTrue, 48 } 49 s.computePaths() 50 return s.startServer() 51 }