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  }