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  }