diff --git a/pkg/compute/guestdrivers/openstack.go b/pkg/compute/guestdrivers/openstack.go index 9a295fd0da..f79f9dc12e 100644 --- a/pkg/compute/guestdrivers/openstack.go +++ b/pkg/compute/guestdrivers/openstack.go @@ -35,6 +35,7 @@ import ( "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" + scheduler "yunion.io/x/onecloud/pkg/scheduler/options" "yunion.io/x/onecloud/pkg/util/billing" "yunion.io/x/onecloud/pkg/util/rbacutils" ) @@ -49,19 +50,19 @@ func init() { } func (self *SOpenStackGuestDriver) DoScheduleCPUFilter() bool { - return options.Options.SchedulerOptions.OpenStackSchedulerCPUFilter + return scheduler.GetOptions().OpenstackSchedulerCPUFilter } func (self *SOpenStackGuestDriver) DoScheduleMemoryFilter() bool { - return options.Options.SchedulerOptions.OpenStackSchedulerMemoryFilter + return scheduler.GetOptions().OpenstackSchedulerMemoryFilter } func (self *SOpenStackGuestDriver) DoScheduleSKUFilter() bool { - return options.Options.SchedulerOptions.OpenStackSchedulerSKUFilter + return scheduler.GetOptions().OpenstackSchedulerSKUFilter } func (self *SOpenStackGuestDriver) DoScheduleStorageFilter() bool { - return options.Options.SchedulerOptions.OpenStackSchedulerStorageFilter + return scheduler.GetOptions().OpenstackSchedulerStorageFilter } func (self *SOpenStackGuestDriver) GetHypervisor() string { diff --git a/pkg/compute/options/options.go b/pkg/compute/options/options.go index 6b6b5f835f..d3fe5df910 100644 --- a/pkg/compute/options/options.go +++ b/pkg/compute/options/options.go @@ -176,15 +176,6 @@ type ComputeOptions struct { ProhibitRefreshingCloudImage bool `help:"Prohibit refreshing cloud image"` esxi.EsxiOptions - - SchedulerOptions -} - -type SchedulerOptions struct { - OpenStackSchedulerCPUFilter bool `help:"Scheduler OpenStack usable host by cpu" default:"true"` - OpenStackSchedulerMemoryFilter bool `help:"Scheduler OpenStack usable host by memory" default:"true"` - OpenStackSchedulerStorageFilter bool `help:"Scheduler OpenStack usable host by storage" default:"true"` - OpenStackSchedulerSKUFilter bool `help:"Scheduler OpenStack usable host by sku" default:"false"` } type SCapabilityOptions struct { diff --git a/pkg/scheduler/options/options.go b/pkg/scheduler/options/options.go index 71c4ab2712..c0d9d15282 100644 --- a/pkg/scheduler/options/options.go +++ b/pkg/scheduler/options/options.go @@ -18,7 +18,7 @@ import ( "os" api "yunion.io/x/onecloud/pkg/apis/scheduler" - common_optoins "yunion.io/x/onecloud/pkg/cloudcommon/options" + common_options "yunion.io/x/onecloud/pkg/cloudcommon/options" "yunion.io/x/onecloud/pkg/compute/options" ) @@ -89,6 +89,34 @@ type SchedOptions struct { WireDBCachePeriod string `help:"Wire database cache period" default:"5m"` SkuRefreshInterval string `help:"Server SKU refresh interval" default:"12h"` + + OpenstackOptions +} + +type OpenstackOptions struct { + OpenstackSchedulerCPUFilter bool `help:"Scheduler OpenStack usable host by cpu" default:"true"` + OpenstackSchedulerMemoryFilter bool `help:"Scheduler OpenStack usable host by memory" default:"true"` + OpenstackSchedulerStorageFilter bool `help:"Scheduler OpenStack usable host by storage" default:"true"` + OpenstackSchedulerSKUFilter bool `help:"Scheduler OpenStack usable host by sku" default:"false"` +} + +func OnOpenstackOptionsChange(oOpts, nOpts interface{}) bool { + oldOpts := oOpts.(*OpenstackOptions) + newOpts := nOpts.(*OpenstackOptions) + + if oldOpts.OpenstackSchedulerCPUFilter != newOpts.OpenstackSchedulerCPUFilter { + return true + } + if oldOpts.OpenstackSchedulerMemoryFilter != newOpts.OpenstackSchedulerMemoryFilter { + return true + } + if oldOpts.OpenstackSchedulerStorageFilter != newOpts.OpenstackSchedulerStorageFilter { + return true + } + if oldOpts.OpenstackSchedulerSKUFilter != newOpts.OpenstackSchedulerSKUFilter { + return true + } + return false } var ( @@ -100,6 +128,25 @@ func GetOptions() *SchedulerOptions { } func Init() { - common_optoins.ParseOptions(&opt, os.Args, "region.conf", api.SERVICE_TYPE) + common_options.ParseOptions(&opt, os.Args, "region.conf", api.SERVICE_TYPE) options.Options = opt.ComputeOptions } + +func OnOptionsChange(oldO, newO interface{}) bool { + oldOpts := oldO.(*SchedulerOptions) + newOpts := newO.(*SchedulerOptions) + + changed := false + if common_options.OnCommonOptionsChange(&oldOpts.CommonOptions, &newOpts.CommonOptions) { + changed = true + } + if common_options.OnDBOptionsChange(&oldOpts.DBOptions, &newOpts.DBOptions) { + changed = true + } + + if OnOptionsChange(&oldOpts.OpenstackOptions, &newOpts.OpenstackOptions) { + changed = true + } + + return changed +} diff --git a/pkg/scheduler/service/service.go b/pkg/scheduler/service/service.go index ddb1358668..f9e7ce127b 100644 --- a/pkg/scheduler/service/service.go +++ b/pkg/scheduler/service/service.go @@ -36,7 +36,6 @@ import ( _ "yunion.io/x/onecloud/pkg/compute/guestdrivers" _ "yunion.io/x/onecloud/pkg/compute/hostdrivers" computemodels "yunion.io/x/onecloud/pkg/compute/models" - compute_options "yunion.io/x/onecloud/pkg/compute/options" _ "yunion.io/x/onecloud/pkg/scheduler/algorithmprovider" skuman "yunion.io/x/onecloud/pkg/scheduler/data_manager/sku" schedhandler "yunion.io/x/onecloud/pkg/scheduler/handler" @@ -91,7 +90,7 @@ func StartService() error { startSched() }) - common_options.StartOptionManager(&opts.ComputeOptions, opts.ConfigSyncPeriodSeconds, compute_api.SERVICE_TYPE, compute_api.SERVICE_VERSION, compute_options.OnOptionsChange) + common_options.StartOptionManager(&opts, opts.ConfigSyncPeriodSeconds, compute_api.SERVICE_TYPE, compute_api.SERVICE_VERSION, o.OnOptionsChange) app := app_common.InitApp(&opts.BaseOptions, true) cloudcommon.AppDBInit(app)