github.com/cilium/cilium@v1.16.2/api/v1/server/configure_cilium_api.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 // This file is safe to edit. Once it exists it will not be overwritten 5 6 package server 7 8 import ( 9 "context" 10 "crypto/tls" 11 "net" 12 "net/http" 13 14 "github.com/go-openapi/errors" 15 "github.com/go-openapi/runtime" 16 "github.com/go-openapi/runtime/middleware" 17 18 "github.com/cilium/cilium/api/v1/server/restapi" 19 "github.com/cilium/cilium/api/v1/server/restapi/daemon" 20 "github.com/cilium/cilium/api/v1/server/restapi/endpoint" 21 "github.com/cilium/cilium/api/v1/server/restapi/ipam" 22 "github.com/cilium/cilium/api/v1/server/restapi/metrics" 23 "github.com/cilium/cilium/api/v1/server/restapi/policy" 24 "github.com/cilium/cilium/api/v1/server/restapi/prefilter" 25 "github.com/cilium/cilium/api/v1/server/restapi/service" 26 "github.com/cilium/cilium/pkg/api" 27 "github.com/cilium/cilium/pkg/logging" 28 ciliumMetrics "github.com/cilium/cilium/pkg/metrics" 29 ) 30 31 //go:generate swagger generate server --target ../../v1 --name CiliumAPI --spec ../openapi.yaml --api-package restapi --server-package server --principal interface{} --default-scheme unix 32 33 func configureFlags(api *restapi.CiliumAPIAPI) { 34 // api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ ... } 35 } 36 37 func configureAPI(api *restapi.CiliumAPIAPI) http.Handler { 38 // configure the api here 39 api.ServeError = errors.ServeError 40 41 // Set your custom logger if needed. Default one is log.Printf 42 // Expected interface func(string, ...interface{}) 43 // 44 // Example: 45 // api.Logger = log.Printf 46 47 // api.UseSwaggerUI() 48 // To continue using redoc as your UI, uncomment the following line 49 // api.UseRedoc() 50 51 api.JSONConsumer = runtime.JSONConsumer() 52 53 api.JSONProducer = runtime.JSONProducer() 54 55 if api.EndpointDeleteEndpointIDHandler == nil { 56 api.EndpointDeleteEndpointIDHandler = endpoint.DeleteEndpointIDHandlerFunc(func(params endpoint.DeleteEndpointIDParams) middleware.Responder { 57 return middleware.NotImplemented("operation endpoint.DeleteEndpointID has not yet been implemented") 58 }) 59 } 60 if api.PolicyDeleteFqdnCacheHandler == nil { 61 api.PolicyDeleteFqdnCacheHandler = policy.DeleteFqdnCacheHandlerFunc(func(params policy.DeleteFqdnCacheParams) middleware.Responder { 62 return middleware.NotImplemented("operation policy.DeleteFqdnCache has not yet been implemented") 63 }) 64 } 65 if api.IpamDeleteIpamIPHandler == nil { 66 api.IpamDeleteIpamIPHandler = ipam.DeleteIpamIPHandlerFunc(func(params ipam.DeleteIpamIPParams) middleware.Responder { 67 return middleware.NotImplemented("operation ipam.DeleteIpamIP has not yet been implemented") 68 }) 69 } 70 if api.PolicyDeletePolicyHandler == nil { 71 api.PolicyDeletePolicyHandler = policy.DeletePolicyHandlerFunc(func(params policy.DeletePolicyParams) middleware.Responder { 72 return middleware.NotImplemented("operation policy.DeletePolicy has not yet been implemented") 73 }) 74 } 75 if api.PrefilterDeletePrefilterHandler == nil { 76 api.PrefilterDeletePrefilterHandler = prefilter.DeletePrefilterHandlerFunc(func(params prefilter.DeletePrefilterParams) middleware.Responder { 77 return middleware.NotImplemented("operation prefilter.DeletePrefilter has not yet been implemented") 78 }) 79 } 80 if api.ServiceDeleteServiceIDHandler == nil { 81 api.ServiceDeleteServiceIDHandler = service.DeleteServiceIDHandlerFunc(func(params service.DeleteServiceIDParams) middleware.Responder { 82 return middleware.NotImplemented("operation service.DeleteServiceID has not yet been implemented") 83 }) 84 } 85 if api.DaemonGetClusterNodesHandler == nil { 86 api.DaemonGetClusterNodesHandler = daemon.GetClusterNodesHandlerFunc(func(params daemon.GetClusterNodesParams) middleware.Responder { 87 return middleware.NotImplemented("operation daemon.GetClusterNodes has not yet been implemented") 88 }) 89 } 90 if api.DaemonGetConfigHandler == nil { 91 api.DaemonGetConfigHandler = daemon.GetConfigHandlerFunc(func(params daemon.GetConfigParams) middleware.Responder { 92 return middleware.NotImplemented("operation daemon.GetConfig has not yet been implemented") 93 }) 94 } 95 if api.DaemonGetDebuginfoHandler == nil { 96 api.DaemonGetDebuginfoHandler = daemon.GetDebuginfoHandlerFunc(func(params daemon.GetDebuginfoParams) middleware.Responder { 97 return middleware.NotImplemented("operation daemon.GetDebuginfo has not yet been implemented") 98 }) 99 } 100 if api.EndpointGetEndpointHandler == nil { 101 api.EndpointGetEndpointHandler = endpoint.GetEndpointHandlerFunc(func(params endpoint.GetEndpointParams) middleware.Responder { 102 return middleware.NotImplemented("operation endpoint.GetEndpoint has not yet been implemented") 103 }) 104 } 105 if api.EndpointGetEndpointIDHandler == nil { 106 api.EndpointGetEndpointIDHandler = endpoint.GetEndpointIDHandlerFunc(func(params endpoint.GetEndpointIDParams) middleware.Responder { 107 return middleware.NotImplemented("operation endpoint.GetEndpointID has not yet been implemented") 108 }) 109 } 110 if api.EndpointGetEndpointIDConfigHandler == nil { 111 api.EndpointGetEndpointIDConfigHandler = endpoint.GetEndpointIDConfigHandlerFunc(func(params endpoint.GetEndpointIDConfigParams) middleware.Responder { 112 return middleware.NotImplemented("operation endpoint.GetEndpointIDConfig has not yet been implemented") 113 }) 114 } 115 if api.EndpointGetEndpointIDHealthzHandler == nil { 116 api.EndpointGetEndpointIDHealthzHandler = endpoint.GetEndpointIDHealthzHandlerFunc(func(params endpoint.GetEndpointIDHealthzParams) middleware.Responder { 117 return middleware.NotImplemented("operation endpoint.GetEndpointIDHealthz has not yet been implemented") 118 }) 119 } 120 if api.EndpointGetEndpointIDLabelsHandler == nil { 121 api.EndpointGetEndpointIDLabelsHandler = endpoint.GetEndpointIDLabelsHandlerFunc(func(params endpoint.GetEndpointIDLabelsParams) middleware.Responder { 122 return middleware.NotImplemented("operation endpoint.GetEndpointIDLabels has not yet been implemented") 123 }) 124 } 125 if api.EndpointGetEndpointIDLogHandler == nil { 126 api.EndpointGetEndpointIDLogHandler = endpoint.GetEndpointIDLogHandlerFunc(func(params endpoint.GetEndpointIDLogParams) middleware.Responder { 127 return middleware.NotImplemented("operation endpoint.GetEndpointIDLog has not yet been implemented") 128 }) 129 } 130 if api.PolicyGetFqdnCacheHandler == nil { 131 api.PolicyGetFqdnCacheHandler = policy.GetFqdnCacheHandlerFunc(func(params policy.GetFqdnCacheParams) middleware.Responder { 132 return middleware.NotImplemented("operation policy.GetFqdnCache has not yet been implemented") 133 }) 134 } 135 if api.PolicyGetFqdnCacheIDHandler == nil { 136 api.PolicyGetFqdnCacheIDHandler = policy.GetFqdnCacheIDHandlerFunc(func(params policy.GetFqdnCacheIDParams) middleware.Responder { 137 return middleware.NotImplemented("operation policy.GetFqdnCacheID has not yet been implemented") 138 }) 139 } 140 if api.PolicyGetFqdnNamesHandler == nil { 141 api.PolicyGetFqdnNamesHandler = policy.GetFqdnNamesHandlerFunc(func(params policy.GetFqdnNamesParams) middleware.Responder { 142 return middleware.NotImplemented("operation policy.GetFqdnNames has not yet been implemented") 143 }) 144 } 145 if api.DaemonGetHealthzHandler == nil { 146 api.DaemonGetHealthzHandler = daemon.GetHealthzHandlerFunc(func(params daemon.GetHealthzParams) middleware.Responder { 147 return middleware.NotImplemented("operation daemon.GetHealthz has not yet been implemented") 148 }) 149 } 150 if api.PolicyGetIPHandler == nil { 151 api.PolicyGetIPHandler = policy.GetIPHandlerFunc(func(params policy.GetIPParams) middleware.Responder { 152 return middleware.NotImplemented("operation policy.GetIP has not yet been implemented") 153 }) 154 } 155 if api.PolicyGetIdentityHandler == nil { 156 api.PolicyGetIdentityHandler = policy.GetIdentityHandlerFunc(func(params policy.GetIdentityParams) middleware.Responder { 157 return middleware.NotImplemented("operation policy.GetIdentity has not yet been implemented") 158 }) 159 } 160 if api.PolicyGetIdentityEndpointsHandler == nil { 161 api.PolicyGetIdentityEndpointsHandler = policy.GetIdentityEndpointsHandlerFunc(func(params policy.GetIdentityEndpointsParams) middleware.Responder { 162 return middleware.NotImplemented("operation policy.GetIdentityEndpoints has not yet been implemented") 163 }) 164 } 165 if api.PolicyGetIdentityIDHandler == nil { 166 api.PolicyGetIdentityIDHandler = policy.GetIdentityIDHandlerFunc(func(params policy.GetIdentityIDParams) middleware.Responder { 167 return middleware.NotImplemented("operation policy.GetIdentityID has not yet been implemented") 168 }) 169 } 170 if api.DaemonGetMapHandler == nil { 171 api.DaemonGetMapHandler = daemon.GetMapHandlerFunc(func(params daemon.GetMapParams) middleware.Responder { 172 return middleware.NotImplemented("operation daemon.GetMap has not yet been implemented") 173 }) 174 } 175 if api.DaemonGetMapNameHandler == nil { 176 api.DaemonGetMapNameHandler = daemon.GetMapNameHandlerFunc(func(params daemon.GetMapNameParams) middleware.Responder { 177 return middleware.NotImplemented("operation daemon.GetMapName has not yet been implemented") 178 }) 179 } 180 if api.MetricsGetMetricsHandler == nil { 181 api.MetricsGetMetricsHandler = metrics.GetMetricsHandlerFunc(func(params metrics.GetMetricsParams) middleware.Responder { 182 return middleware.NotImplemented("operation metrics.GetMetrics has not yet been implemented") 183 }) 184 } 185 if api.PolicyGetPolicyHandler == nil { 186 api.PolicyGetPolicyHandler = policy.GetPolicyHandlerFunc(func(params policy.GetPolicyParams) middleware.Responder { 187 return middleware.NotImplemented("operation policy.GetPolicy has not yet been implemented") 188 }) 189 } 190 if api.PolicyGetPolicySelectorsHandler == nil { 191 api.PolicyGetPolicySelectorsHandler = policy.GetPolicySelectorsHandlerFunc(func(params policy.GetPolicySelectorsParams) middleware.Responder { 192 return middleware.NotImplemented("operation policy.GetPolicySelectors has not yet been implemented") 193 }) 194 } 195 if api.PrefilterGetPrefilterHandler == nil { 196 api.PrefilterGetPrefilterHandler = prefilter.GetPrefilterHandlerFunc(func(params prefilter.GetPrefilterParams) middleware.Responder { 197 return middleware.NotImplemented("operation prefilter.GetPrefilter has not yet been implemented") 198 }) 199 } 200 if api.ServiceGetServiceHandler == nil { 201 api.ServiceGetServiceHandler = service.GetServiceHandlerFunc(func(params service.GetServiceParams) middleware.Responder { 202 return middleware.NotImplemented("operation service.GetService has not yet been implemented") 203 }) 204 } 205 if api.ServiceGetServiceIDHandler == nil { 206 api.ServiceGetServiceIDHandler = service.GetServiceIDHandlerFunc(func(params service.GetServiceIDParams) middleware.Responder { 207 return middleware.NotImplemented("operation service.GetServiceID has not yet been implemented") 208 }) 209 } 210 if api.DaemonPatchConfigHandler == nil { 211 api.DaemonPatchConfigHandler = daemon.PatchConfigHandlerFunc(func(params daemon.PatchConfigParams) middleware.Responder { 212 return middleware.NotImplemented("operation daemon.PatchConfig has not yet been implemented") 213 }) 214 } 215 if api.EndpointPatchEndpointIDHandler == nil { 216 api.EndpointPatchEndpointIDHandler = endpoint.PatchEndpointIDHandlerFunc(func(params endpoint.PatchEndpointIDParams) middleware.Responder { 217 return middleware.NotImplemented("operation endpoint.PatchEndpointID has not yet been implemented") 218 }) 219 } 220 if api.EndpointPatchEndpointIDConfigHandler == nil { 221 api.EndpointPatchEndpointIDConfigHandler = endpoint.PatchEndpointIDConfigHandlerFunc(func(params endpoint.PatchEndpointIDConfigParams) middleware.Responder { 222 return middleware.NotImplemented("operation endpoint.PatchEndpointIDConfig has not yet been implemented") 223 }) 224 } 225 if api.EndpointPatchEndpointIDLabelsHandler == nil { 226 api.EndpointPatchEndpointIDLabelsHandler = endpoint.PatchEndpointIDLabelsHandlerFunc(func(params endpoint.PatchEndpointIDLabelsParams) middleware.Responder { 227 return middleware.NotImplemented("operation endpoint.PatchEndpointIDLabels has not yet been implemented") 228 }) 229 } 230 if api.PrefilterPatchPrefilterHandler == nil { 231 api.PrefilterPatchPrefilterHandler = prefilter.PatchPrefilterHandlerFunc(func(params prefilter.PatchPrefilterParams) middleware.Responder { 232 return middleware.NotImplemented("operation prefilter.PatchPrefilter has not yet been implemented") 233 }) 234 } 235 if api.IpamPostIpamHandler == nil { 236 api.IpamPostIpamHandler = ipam.PostIpamHandlerFunc(func(params ipam.PostIpamParams) middleware.Responder { 237 return middleware.NotImplemented("operation ipam.PostIpam has not yet been implemented") 238 }) 239 } 240 if api.IpamPostIpamIPHandler == nil { 241 api.IpamPostIpamIPHandler = ipam.PostIpamIPHandlerFunc(func(params ipam.PostIpamIPParams) middleware.Responder { 242 return middleware.NotImplemented("operation ipam.PostIpamIP has not yet been implemented") 243 }) 244 } 245 if api.EndpointPutEndpointIDHandler == nil { 246 api.EndpointPutEndpointIDHandler = endpoint.PutEndpointIDHandlerFunc(func(params endpoint.PutEndpointIDParams) middleware.Responder { 247 return middleware.NotImplemented("operation endpoint.PutEndpointID has not yet been implemented") 248 }) 249 } 250 if api.PolicyPutPolicyHandler == nil { 251 api.PolicyPutPolicyHandler = policy.PutPolicyHandlerFunc(func(params policy.PutPolicyParams) middleware.Responder { 252 return middleware.NotImplemented("operation policy.PutPolicy has not yet been implemented") 253 }) 254 } 255 if api.ServicePutServiceIDHandler == nil { 256 api.ServicePutServiceIDHandler = service.PutServiceIDHandlerFunc(func(params service.PutServiceIDParams) middleware.Responder { 257 return middleware.NotImplemented("operation service.PutServiceID has not yet been implemented") 258 }) 259 } 260 261 api.PreServerShutdown = func() {} 262 263 api.ServerShutdown = func() { 264 logging.DefaultLogger.Debug("canceling server context") 265 serverCancel() 266 } 267 268 return setupGlobalMiddleware(api.Serve(setupMiddlewares)) 269 } 270 271 // The TLS configuration before HTTPS server starts. 272 func configureTLS(tlsConfig *tls.Config) { 273 // Make all necessary changes to the TLS configuration here. 274 } 275 276 var ( 277 // ServerCtx and ServerCancel 278 ServerCtx, serverCancel = context.WithCancel(context.Background()) 279 ) 280 281 // As soon as server is initialized but not run yet, this function will be called. 282 // If you need to modify a config, store server instance to stop it individually later, this is the place. 283 // This function can be called multiple times, depending on the number of serving schemes. 284 // scheme value will be set accordingly: "http", "https" or "unix" 285 func configureServer(s *http.Server, scheme, addr string) { 286 s.BaseContext = func(_ net.Listener) context.Context { 287 return ServerCtx 288 } 289 } 290 291 // The middleware configuration is for the handler executors. These do not apply to the swagger.json document. 292 // The middleware executes after routing but before authentication, binding and validation 293 func setupMiddlewares(handler http.Handler) http.Handler { 294 return handler 295 } 296 297 // The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. 298 // So this is a good place to plug in a panic handling middleware, logging and metrics 299 func setupGlobalMiddleware(handler http.Handler) http.Handler { 300 eventsHelper := &ciliumMetrics.APIEventTSHelper{ 301 Next: handler, 302 TSGauge: ciliumMetrics.EventTS, 303 Histogram: ciliumMetrics.APIInteractions, 304 } 305 306 return &api.APIPanicHandler{ 307 Next: eventsHelper, 308 } 309 }