From 48f63c3da0bc285d417470a26feeade25747ba96 Mon Sep 17 00:00:00 2001 From: zhu733756 Date: Mon, 13 Sep 2021 16:16:32 +0800 Subject: [PATCH] feat: integrate API GPU kinds to group config.kubesphere.io Signed-off-by: zhu733756 --- pkg/apiserver/config/config.go | 3 +++ pkg/apiserver/config/config_test.go | 4 ++++ pkg/kapis/config/v1alpha2/register.go | 6 +++++ pkg/simple/client/gpu/options.go | 34 +++++++++++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 pkg/simple/client/gpu/options.go diff --git a/pkg/apiserver/config/config.go b/pkg/apiserver/config/config.go index 833ecd51d..7c583a84a 100644 --- a/pkg/apiserver/config/config.go +++ b/pkg/apiserver/config/config.go @@ -33,6 +33,7 @@ import ( "kubesphere.io/kubesphere/pkg/simple/client/devops/jenkins" "kubesphere.io/kubesphere/pkg/simple/client/events" "kubesphere.io/kubesphere/pkg/simple/client/gateway" + "kubesphere.io/kubesphere/pkg/simple/client/gpu" "kubesphere.io/kubesphere/pkg/simple/client/k8s" "kubesphere.io/kubesphere/pkg/simple/client/kubeedge" "kubesphere.io/kubesphere/pkg/simple/client/ldap" @@ -106,6 +107,7 @@ type Config struct { KubeEdgeOptions *kubeedge.Options `json:"kubeedge,omitempty" yaml:"kubeedge,omitempty" mapstructure:"kubeedge"` MeteringOptions *metering.Options `json:"metering,omitempty" yaml:"metering,omitempty" mapstructure:"metering"` GatewayOptions *gateway.Options `json:"gateway,omitempty" yaml:"gateway,omitempty" mapstructure:"gateway"` + GPUOptions *gpu.Options `json:"gpu,omitempty" yaml:"gpu,omitempty" mapstructure:"gpu"` } // newConfig creates a default non-empty Config @@ -132,6 +134,7 @@ func New() *Config { KubeEdgeOptions: kubeedge.NewKubeEdgeOptions(), MeteringOptions: metering.NewMeteringOptions(), GatewayOptions: gateway.NewGatewayOptions(), + GPUOptions: gpu.NewGPUOptions(), } } diff --git a/pkg/apiserver/config/config_test.go b/pkg/apiserver/config/config_test.go index 650628783..492d1b15a 100644 --- a/pkg/apiserver/config/config_test.go +++ b/pkg/apiserver/config/config_test.go @@ -37,6 +37,7 @@ import ( "kubesphere.io/kubesphere/pkg/simple/client/devops/jenkins" "kubesphere.io/kubesphere/pkg/simple/client/events" "kubesphere.io/kubesphere/pkg/simple/client/gateway" + "kubesphere.io/kubesphere/pkg/simple/client/gpu" "kubesphere.io/kubesphere/pkg/simple/client/k8s" "kubesphere.io/kubesphere/pkg/simple/client/kubeedge" "kubesphere.io/kubesphere/pkg/simple/client/ldap" @@ -184,6 +185,9 @@ func newTestConfig() (*Config, error) { WatchesPath: "/etc/kubesphere/watches.yaml", Namespace: "kubesphere-controls-system", }, + GPUOptions: &gpu.Options{ + Kinds: []gpu.GPUKind{}, + }, } return conf, nil } diff --git a/pkg/kapis/config/v1alpha2/register.go b/pkg/kapis/config/v1alpha2/register.go index f941beeae..c9f7671e1 100644 --- a/pkg/kapis/config/v1alpha2/register.go +++ b/pkg/kapis/config/v1alpha2/register.go @@ -45,6 +45,12 @@ func AddToContainer(c *restful.Container, config *kubesphereconfig.Config) error response.WriteAsJson(config.ToMap()) })) + webservice.Route(webservice.GET("/configs/gpu/kinds"). + Doc("Get all supported GPU kinds."). + To(func(request *restful.Request, response *restful.Response) { + response.WriteAsJson(config.GPUOptions.Kinds) + })) + c.Add(webservice) return nil } diff --git a/pkg/simple/client/gpu/options.go b/pkg/simple/client/gpu/options.go new file mode 100644 index 000000000..472d0351a --- /dev/null +++ b/pkg/simple/client/gpu/options.go @@ -0,0 +1,34 @@ +package gpu + +import "github.com/spf13/pflag" + +type GPUKind struct { + ResourceName string `json:"resourceName,omitempty" yaml:"resourceName"` + ResourceType string `json:"resourceType,omitempty" yaml:"resourceType"` + Default bool `json:"default,omitempty" yaml:"default"` +} + +type Options struct { + Kinds []GPUKind `json:"kinds,omitempty" yaml:"kinds"` +} + +func NewGPUOptions() *Options { + return &Options{ + Kinds: []GPUKind{}, + } +} + +func (s *Options) Validate() []error { + var errs []error + return errs +} + +func (s *Options) ApplyTo(options *Options) { + if len(s.Kinds) > 0 { + options.Kinds = s.Kinds + } +} + +func (s *Options) AddFlags(fs *pflag.FlagSet, c *Options) { + +}