/* * Copyright 2024 the KubeSphere Authors. * Please refer to the LICENSE file in the root directory of the project. * https://github.com/kubesphere/kubesphere/blob/master/LICENSE */ package options import ( "fmt" "os" "github.com/spf13/pflag" "kubesphere.io/kubesphere/pkg/utils/net" ) type ServerRunOptions struct { // server bind address BindAddress string // insecure port number InsecurePort int // secure port number SecurePort int // tls cert file TlsCertFile string // tls private key file TlsPrivateKey string } func NewServerRunOptions() *ServerRunOptions { // create default server run options s := ServerRunOptions{ BindAddress: "0.0.0.0", InsecurePort: 9090, SecurePort: 0, TlsCertFile: "", TlsPrivateKey: "", } return &s } func (s *ServerRunOptions) Validate() []error { var errs []error if s.SecurePort == 0 && s.InsecurePort == 0 { errs = append(errs, fmt.Errorf("insecure and secure port can not be disabled at the same time")) } if net.IsValidPort(s.SecurePort) { if s.TlsCertFile == "" { errs = append(errs, fmt.Errorf("tls cert file is empty while secure serving")) } else { if _, err := os.Stat(s.TlsCertFile); err != nil { errs = append(errs, err) } } if s.TlsPrivateKey == "" { errs = append(errs, fmt.Errorf("tls private key file is empty while secure serving")) } else { if _, err := os.Stat(s.TlsPrivateKey); err != nil { errs = append(errs, err) } } } return errs } func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet, c *ServerRunOptions) { fs.StringVar(&s.BindAddress, "bind-address", c.BindAddress, "server bind address") fs.IntVar(&s.InsecurePort, "insecure-port", c.InsecurePort, "insecure port number") fs.IntVar(&s.SecurePort, "secure-port", s.SecurePort, "secure port number") fs.StringVar(&s.TlsCertFile, "tls-cert-file", c.TlsCertFile, "tls cert file") fs.StringVar(&s.TlsPrivateKey, "tls-private-key", c.TlsPrivateKey, "tls private key") }