package installer import ( "context" "github.com/samber/lo" ) type K0sOpt func(*k0sOpt) type k0sOpt struct { Type string // controller, worker DisableWorker bool WorkerTokenFile string } func WithK0sType(t string) K0sOpt { types := []string{"controller", "worker"} return func(o *k0sOpt) { if lo.Contains(types, t) { o.Type = t } } } func WithoutK0sWorker() K0sOpt { return func(o *k0sOpt) { o.DisableWorker = true } } func WithK0sWorkerTokenFile(filename string) K0sOpt { return func(o *k0sOpt) { if filename != "" { o.WorkerTokenFile = filename } } } func (i *installer) K0s(ctx context.Context, opts ...K0sOpt) error { var ( err error o = &k0sOpt{ Type: "controller", DisableWorker: false, WorkerTokenFile: "/etc/k0s/worker.token", } ) if err = i.targetOK(ctx); err != nil { return err } for _, fn := range opts { fn(o) } return nil }