mirror of
https://github.com/rancher/steve.git
synced 2025-06-05 13:12:29 +00:00
96 lines
2.2 KiB
Go
96 lines
2.2 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/rancher/norman/pkg/store/proxy"
|
||
|
|
||
|
"github.com/rancher/naok/pkg/accesscontrol"
|
||
|
"github.com/rancher/naok/pkg/client"
|
||
|
"github.com/rancher/naok/pkg/schemas"
|
||
|
"github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io"
|
||
|
"github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io"
|
||
|
rbaccontroller "github.com/rancher/wrangler-api/pkg/generated/controllers/rbac"
|
||
|
"github.com/rancher/wrangler/pkg/kubeconfig"
|
||
|
"github.com/rancher/wrangler/pkg/start"
|
||
|
"github.com/sirupsen/logrus"
|
||
|
"k8s.io/client-go/kubernetes"
|
||
|
"k8s.io/client-go/rest"
|
||
|
)
|
||
|
|
||
|
type Config struct {
|
||
|
Kubeconfig string
|
||
|
Namespace string
|
||
|
}
|
||
|
|
||
|
func Run(ctx context.Context, cfg Config) error {
|
||
|
restConfig, err := kubeconfig.GetNonInteractiveClientConfig(cfg.Kubeconfig).ClientConfig()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
rbac, err := rbaccontroller.NewFactoryFromConfig(restConfig)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
k8s, err := kubernetes.NewForConfig(restConfig)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
api, err := apiregistration.NewFactoryFromConfig(restConfig)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
crd, err := apiextensions.NewFactoryFromConfig(restConfig)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
starter, err := startAPI(ctx, restConfig, k8s, crd, api, rbac)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if err := start.All(ctx, 5, api, crd, rbac); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if err := starter(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
<-ctx.Done()
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func startAPI(ctx context.Context, restConfig *rest.Config, k8s *kubernetes.Clientset, crd *apiextensions.Factory,
|
||
|
api *apiregistration.Factory, rbac *rbaccontroller.Factory) (func() error, error) {
|
||
|
|
||
|
cf, err := client.NewFactory(restConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
sf := schemas.Register(ctx,
|
||
|
cf,
|
||
|
k8s.Discovery(),
|
||
|
crd.Apiextensions().V1beta1().CustomResourceDefinition(),
|
||
|
api.Apiregistration().V1().APIService(),
|
||
|
)
|
||
|
|
||
|
accessStore := accesscontrol.NewAccessStore(rbac.Rbac().V1())
|
||
|
|
||
|
return func() error {
|
||
|
return serve(cf, accessStore, sf)
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func serve(cf proxy.ClientGetter, as *accesscontrol.AccessStore, sf schemas.SchemaFactory) error {
|
||
|
logrus.Infof("listening on :8989")
|
||
|
return http.ListenAndServe(":8989", newAPIServer(cf, as, sf))
|
||
|
}
|