in cns/restserver/restserver.go [248:337]
func (service *HTTPRestService) Init(config *common.ServiceConfig) error {
err := service.Initialize(config)
if err != nil {
logger.Errorf("[Azure CNS] Failed to initialize base service, err:%v.", err)
return err
}
service.restoreState()
err = service.restoreNetworkState()
if err != nil {
logger.Errorf("[Azure CNS] Failed to restore network state, err:%v.", err)
return err
}
// Add handlers.
listener := service.Listener
// default handlers
listener.AddHandler(cns.SetEnvironmentPath, service.setEnvironment)
listener.AddHandler(cns.CreateNetworkPath, service.createNetwork)
listener.AddHandler(cns.DeleteNetworkPath, service.deleteNetwork)
listener.AddHandler(cns.GetHostLocalIPPath, service.getHostLocalIP)
listener.AddHandler(cns.CreateOrUpdateNetworkContainer, service.createOrUpdateNetworkContainer)
listener.AddHandler(cns.DeleteNetworkContainer, service.deleteNetworkContainer)
listener.AddHandler(cns.GetInterfaceForContainer, service.getInterfaceForContainer)
listener.AddHandler(cns.SetOrchestratorType, service.setOrchestratorType)
listener.AddHandler(cns.GetNetworkContainerByOrchestratorContext, service.GetNetworkContainerByOrchestratorContext)
listener.AddHandler(cns.GetAllNetworkContainers, service.GetAllNetworkContainers)
listener.AddHandler(cns.AttachContainerToNetwork, service.attachNetworkContainerToNetwork)
listener.AddHandler(cns.DetachContainerFromNetwork, service.detachNetworkContainerFromNetwork)
listener.AddHandler(cns.CreateHnsNetworkPath, service.createHnsNetwork)
listener.AddHandler(cns.DeleteHnsNetworkPath, service.deleteHnsNetwork)
listener.AddHandler(cns.NumberOfCPUCoresPath, service.getNumberOfCPUCores)
listener.AddHandler(cns.CreateHostNCApipaEndpointPath, service.CreateHostNCApipaEndpoint)
listener.AddHandler(cns.DeleteHostNCApipaEndpointPath, service.DeleteHostNCApipaEndpoint)
listener.AddHandler(cns.PublishNetworkContainer, service.publishNetworkContainer)
listener.AddHandler(cns.UnpublishNetworkContainer, service.unpublishNetworkContainer)
listener.AddHandler(cns.RequestIPConfig, NewHandlerFuncWithHistogram(service.RequestIPConfigHandler, HTTPRequestLatency))
listener.AddHandler(cns.RequestIPConfigs, NewHandlerFuncWithHistogram(service.RequestIPConfigsHandler, HTTPRequestLatency))
listener.AddHandler(cns.ReleaseIPConfig, NewHandlerFuncWithHistogram(service.ReleaseIPConfigHandler, HTTPRequestLatency))
listener.AddHandler(cns.ReleaseIPConfigs, NewHandlerFuncWithHistogram(service.ReleaseIPConfigsHandler, HTTPRequestLatency))
listener.AddHandler(cns.NmAgentSupportedApisPath, service.nmAgentSupportedApisHandler)
listener.AddHandler(cns.PathDebugIPAddresses, service.HandleDebugIPAddresses)
listener.AddHandler(cns.PathDebugPodContext, service.HandleDebugPodContext)
listener.AddHandler(cns.PathDebugRestData, service.HandleDebugRestData)
listener.AddHandler(cns.NetworkContainersURLPath, service.getOrRefreshNetworkContainers)
listener.AddHandler(cns.GetHomeAz, service.getHomeAz)
listener.AddHandler(cns.EndpointPath, service.EndpointHandlerAPI)
// This API is only needed for Direct channel mode.
if config.ChannelMode == cns.Direct {
listener.AddHandler(cns.GetVMUniqueID, service.getVMUniqueID)
listener.AddHandler(cns.GetNCList, service.nmAgentNCListHandler)
}
// handlers for v0.2
listener.AddHandler(cns.V2Prefix+cns.SetEnvironmentPath, service.setEnvironment)
listener.AddHandler(cns.V2Prefix+cns.CreateNetworkPath, service.createNetwork)
listener.AddHandler(cns.V2Prefix+cns.DeleteNetworkPath, service.deleteNetwork)
listener.AddHandler(cns.V2Prefix+cns.GetHostLocalIPPath, service.getHostLocalIP)
listener.AddHandler(cns.V2Prefix+cns.CreateOrUpdateNetworkContainer, service.createOrUpdateNetworkContainer)
listener.AddHandler(cns.V2Prefix+cns.DeleteNetworkContainer, service.deleteNetworkContainer)
listener.AddHandler(cns.V2Prefix+cns.GetInterfaceForContainer, service.getInterfaceForContainer)
listener.AddHandler(cns.V2Prefix+cns.SetOrchestratorType, service.setOrchestratorType)
listener.AddHandler(cns.V2Prefix+cns.GetNetworkContainerByOrchestratorContext, service.GetNetworkContainerByOrchestratorContext)
listener.AddHandler(cns.V2Prefix+cns.GetAllNetworkContainers, service.GetAllNetworkContainers)
listener.AddHandler(cns.V2Prefix+cns.AttachContainerToNetwork, service.attachNetworkContainerToNetwork)
listener.AddHandler(cns.V2Prefix+cns.DetachContainerFromNetwork, service.detachNetworkContainerFromNetwork)
listener.AddHandler(cns.V2Prefix+cns.CreateHnsNetworkPath, service.createHnsNetwork)
listener.AddHandler(cns.V2Prefix+cns.DeleteHnsNetworkPath, service.deleteHnsNetwork)
listener.AddHandler(cns.V2Prefix+cns.NumberOfCPUCoresPath, service.getNumberOfCPUCores)
listener.AddHandler(cns.V2Prefix+cns.CreateHostNCApipaEndpointPath, service.CreateHostNCApipaEndpoint)
listener.AddHandler(cns.V2Prefix+cns.DeleteHostNCApipaEndpointPath, service.DeleteHostNCApipaEndpoint)
listener.AddHandler(cns.V2Prefix+cns.NmAgentSupportedApisPath, service.nmAgentSupportedApisHandler)
listener.AddHandler(cns.V2Prefix+cns.GetHomeAz, service.getHomeAz)
listener.AddHandler(cns.V2Prefix+cns.EndpointPath, service.EndpointHandlerAPI)
// This API is only needed for Direct channel mode.
if config.ChannelMode == cns.Direct {
listener.AddHandler(cns.V2Prefix+cns.GetVMUniqueID, service.getVMUniqueID)
listener.AddHandler(cns.V2Prefix+cns.GetNCList, service.nmAgentNCListHandler)
}
// Initialize HTTP client to be reused in CNS
connectionTimeout, _ := service.GetOption(acn.OptHttpConnectionTimeout).(int)
responseHeaderTimeout, _ := service.GetOption(acn.OptHttpResponseHeaderTimeout).(int)
acn.InitHttpClient(connectionTimeout, responseHeaderTimeout)
logger.SetContextDetails(service.state.OrchestratorType, service.state.NodeID)
logger.Printf("[Azure CNS] Listening.")
return nil
}