github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/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/log" 10 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 11 ) 12 13 type rawHandlerFunc func(w http.ResponseWriter, ipAddr net.IP) 14 type metadataWriter func(writer io.Writer, vmInfo proto.VmInfo) error 15 16 type server struct { 17 bridges []net.Interface 18 hypervisorPortNum uint 19 manager *manager.Manager 20 logger log.DebugLogger 21 infoHandlers map[string]metadataWriter 22 rawHandlers map[string]rawHandlerFunc 23 paths map[string]struct{} 24 } 25 26 func StartServer(hypervisorPortNum uint, bridges []net.Interface, 27 managerObj *manager.Manager, logger log.DebugLogger) error { 28 s := &server{ 29 bridges: bridges, 30 hypervisorPortNum: hypervisorPortNum, 31 manager: managerObj, 32 logger: logger, 33 } 34 s.infoHandlers = map[string]metadataWriter{ 35 "/latest/dynamic/epoch-time": s.showTime, 36 "/latest/dynamic/instance-identity/document": s.showVM, 37 } 38 s.rawHandlers = map[string]rawHandlerFunc{ 39 "/datasource/SmallStack": s.showTrue, 40 "/latest/is-externally-patchable": s.showTrue, 41 "/latest/user-data": s.showUserData, 42 } 43 s.computePaths() 44 return s.startServer() 45 }