github.com/kubewharf/katalyst-core@v0.5.3/cmd/katalyst-agent/app/options/options.go (about) 1 /* 2 Copyright 2022 The Katalyst Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package options 18 19 import ( 20 "k8s.io/apimachinery/pkg/util/errors" 21 cliflag "k8s.io/component-base/cli/flag" 22 23 "github.com/kubewharf/katalyst-core/cmd/base/options" 24 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/dynamic" 25 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/eviction" 26 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/global" 27 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/metaserver" 28 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/orm" 29 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/qrm" 30 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/reporter" 31 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/sysadvisor" 32 "github.com/kubewharf/katalyst-core/pkg/config" 33 ) 34 35 // Options holds the configurations for collector agent. 36 type Options struct { 37 // those are options used by all the katalyst components 38 *options.GenericOptions 39 *dynamic.DynamicOptions 40 41 // those are options used by all the katalyst agents 42 *global.BaseOptions 43 *global.PluginManagerOptions 44 *metaserver.MetaServerOptions 45 *global.QRMAdvisorOptions 46 47 // the below are options used by all each individual katalyst module/plugin 48 genericEvictionOptions *eviction.GenericEvictionOptions 49 evictionOptions *eviction.EvictionOptions 50 51 genericReporterOptions *reporter.GenericReporterOptions 52 reporterPluginsOptions *reporter.ReporterPluginsOptions 53 54 genericSysAdvisorOptions *sysadvisor.GenericSysAdvisorOptions 55 sysadvisorPluginsOptions *sysadvisor.SysAdvisorPluginsOptions 56 57 genericQRMPluginOptions *qrm.GenericQRMPluginOptions 58 qrmPluginsOptions *qrm.QRMPluginsOptions 59 60 ormOptions *orm.GenericORMPluginOptions 61 } 62 63 // NewOptions creates a new Options with a default config. 64 func NewOptions() *Options { 65 return &Options{ 66 GenericOptions: options.NewGenericOptions(), 67 DynamicOptions: dynamic.NewDynamicOptions(), 68 BaseOptions: global.NewBaseOptions(), 69 MetaServerOptions: metaserver.NewMetaServerOptions(), 70 PluginManagerOptions: global.NewPluginManagerOptions(), 71 QRMAdvisorOptions: global.NewQRMAdvisorOptions(), 72 73 genericEvictionOptions: eviction.NewGenericEvictionOptions(), 74 evictionOptions: eviction.NewEvictionOptions(), 75 genericReporterOptions: reporter.NewGenericReporterOptions(), 76 reporterPluginsOptions: reporter.NewReporterPluginsOptions(), 77 genericSysAdvisorOptions: sysadvisor.NewGenericSysAdvisorOptions(), 78 sysadvisorPluginsOptions: sysadvisor.NewSysAdvisorPluginsOptions(), 79 genericQRMPluginOptions: qrm.NewGenericQRMPluginOptions(), 80 qrmPluginsOptions: qrm.NewQRMPluginsOptions(), 81 ormOptions: orm.NewGenericORMPluginOptions(), 82 } 83 } 84 85 // AddFlags adds flags to the specified FlagSet. 86 func (o *Options) AddFlags(fss *cliflag.NamedFlagSets) { 87 o.GenericOptions.AddFlags(fss) 88 o.DynamicOptions.AddFlags(fss) 89 o.MetaServerOptions.AddFlags(fss) 90 o.PluginManagerOptions.AddFlags(fss) 91 o.BaseOptions.AddFlags(fss) 92 o.QRMAdvisorOptions.AddFlags(fss) 93 o.genericEvictionOptions.AddFlags(fss) 94 o.evictionOptions.AddFlags(fss) 95 o.genericReporterOptions.AddFlags(fss) 96 o.reporterPluginsOptions.AddFlags(fss) 97 o.genericSysAdvisorOptions.AddFlags(fss) 98 o.sysadvisorPluginsOptions.AddFlags(fss) 99 o.genericQRMPluginOptions.AddFlags(fss) 100 o.qrmPluginsOptions.AddFlags(fss) 101 o.ormOptions.AddFlags(fss) 102 } 103 104 // ApplyTo fills up config with options 105 func (o *Options) ApplyTo(c *config.Configuration) error { 106 var errList []error 107 108 errList = append(errList, o.GenericOptions.ApplyTo(c.GenericConfiguration)) 109 errList = append(errList, o.DynamicOptions.ApplyTo(c.GetDynamicConfiguration())) 110 errList = append(errList, o.BaseOptions.ApplyTo(c.BaseConfiguration)) 111 errList = append(errList, o.PluginManagerOptions.ApplyTo(c.PluginManagerConfiguration)) 112 errList = append(errList, o.MetaServerOptions.ApplyTo(c.MetaServerConfiguration)) 113 errList = append(errList, o.QRMAdvisorOptions.ApplyTo(c.QRMAdvisorConfiguration)) 114 errList = append(errList, o.genericEvictionOptions.ApplyTo(c.GenericEvictionConfiguration)) 115 errList = append(errList, o.evictionOptions.ApplyTo(c.EvictionConfiguration)) 116 errList = append(errList, o.genericReporterOptions.ApplyTo(c.GenericReporterConfiguration)) 117 errList = append(errList, o.reporterPluginsOptions.ApplyTo(c.ReporterPluginsConfiguration)) 118 errList = append(errList, o.genericSysAdvisorOptions.ApplyTo(c.GenericSysAdvisorConfiguration)) 119 errList = append(errList, o.sysadvisorPluginsOptions.ApplyTo(c.SysAdvisorPluginsConfiguration)) 120 errList = append(errList, o.genericQRMPluginOptions.ApplyTo(c.GenericQRMPluginConfiguration)) 121 errList = append(errList, o.qrmPluginsOptions.ApplyTo(c.QRMPluginsConfiguration)) 122 errList = append(errList, o.ormOptions.ApplyTo(c.GenericORMConfiguration)) 123 124 return errors.NewAggregate(errList) 125 } 126 127 // Config returns a new configuration instance. 128 func (o *Options) Config() (*config.Configuration, error) { 129 c := config.NewConfiguration() 130 if err := o.ApplyTo(c); err != nil { 131 return nil, err 132 } 133 return c, nil 134 }