package options
import (
"fmt"
"strings"
"gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/controller/certificates/issuing"
"github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/util/sets"
)
type ControllerOptions struct {
MetricsBindAddress string
HealthProbeBindAddress string
LeaderElection bool
Controllers []string
}
var (
allControllers = []string{
// certificate controllers
issuing.ControllerName,
}
defaultEnabledControllers = []string{
issuing.ControllerName,
}
)
func NewControllerOptions() *ControllerOptions {
return &ControllerOptions{
Controllers: defaultEnabledControllers,
}
}
func getStrSlice(s string) []string {
var arr = strings.Split(s, ",")
ret := make([]string, len(arr))
for _, str := range arr {
if v := strings.TrimSpace(str); v != "" {
ret = append(ret, v)
}
}
return ret
}
func (s *ControllerOptions) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&s.HealthProbeBindAddress, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
fs.StringVar(&s.HealthProbeBindAddress, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
fs.BoolVar(&s.LeaderElection, "leader-elect", false,
"Enable leader election for controller manager. "+
"Enabling this will ensure there is only one active controller manager.")
var controllerSet string
fs.StringVar(&controllerSet, "controllers", "*", fmt.Sprintf(""+
"A list of controllers to enable. '--controllers=*' enables all "+
"on-by-default controllers, '--controllers=foo' enables just the controller "+
"named 'foo', '--controllers=*,-foo' disables the controller named "+
"'foo'.\nAll controllers: %s",
strings.Join(allControllers, ", ")))
s.Controllers = getStrSlice(controllerSet)
}
func (o *ControllerOptions) EnabledControllers() sets.String {
enabled := sets.NewString()
for _, controller := range o.Controllers {
switch {
// Enable all controllers
case controller == "*":
enabled = enabled.Insert(defaultEnabledControllers...)
default:
enabled = enabled.Insert(controller)
}
}
return enabled
}
// TODO: Implement validation
func (o *ControllerOptions) Validate() error {
return nil
}