From 8554c93b0fdb3957b823636d1c799e76de85fe4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Tue, 16 Dec 2025 20:40:55 +0800 Subject: [PATCH] fix(region): disable sync schedtags (#23942) --- pkg/compute/guestdrivers/managedvirtual.go | 10 +++++++++- pkg/compute/models/hosts.go | 8 +++++--- pkg/compute/options/options.go | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index 5dbe42f6a7..3c31723809 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -491,7 +491,7 @@ func (drv *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Contex result := jsonutils.NewDict() if ivm.GetStatus() != api.VM_RUNNING { - if guest.BillingType == billing_api.BILLING_TYPE_POSTPAID && jsonutils.QueryBoolean(task.GetParams(), "auto_prepaid", false) { + if guest.BillingType == billing_api.BILLING_TYPE_POSTPAID && guest.ShutdownMode != api.VM_SHUTDOWN_MODE_STOP_CHARGING && jsonutils.QueryBoolean(task.GetParams(), "auto_prepaid", false) { err = ivm.ChangeBillingType(billing_api.BILLING_TYPE_PREPAID) if err != nil && errors.Cause(err) != cloudprovider.ErrNotImplemented { logclient.AddSimpleActionLog(guest, logclient.ACT_CHANGE_BILLING_TYPE, errors.Wrapf(err, billing_api.BILLING_TYPE_PREPAID), userCred, false) @@ -506,6 +506,14 @@ func (drv *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Contex if err != nil { return errors.Wrapf(err, "Wait vm running") } + + if guest.BillingType == billing_api.BILLING_TYPE_POSTPAID && guest.ShutdownMode == api.VM_SHUTDOWN_MODE_STOP_CHARGING && jsonutils.QueryBoolean(task.GetParams(), "auto_prepaid", false) { + err := ivm.ChangeBillingType(billing_api.BILLING_TYPE_PREPAID) + if err != nil && errors.Cause(err) != cloudprovider.ErrNotImplemented { + logclient.AddSimpleActionLog(guest, logclient.ACT_CHANGE_BILLING_TYPE, errors.Wrapf(err, billing_api.BILLING_TYPE_PREPAID), userCred, false) + } + } + // 虚拟机开机,公网ip自动生成 guest.SyncAllWithCloudVM(ctx, userCred, host, ivm, true) return task.ScheduleRun(result) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 1b11eabe35..c9a437fac7 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -2390,9 +2390,11 @@ func (hh *SHost) SyncWithCloudHost(ctx context.Context, userCred mcclient.TokenC syncMetadata(ctx, userCred, hh, extHost, account.ReadOnly) } - err = hh.syncSchedtags(ctx, userCred, extHost) - if err != nil && errors.Cause(err) != cloudprovider.ErrNotFound && errors.Cause(err) != errors.ErrNotImplemented { - log.Errorf("syncSchedtags for %s fail: %v", hh.Name, err) + if !options.Options.DisableSyncSchedtags { + err = hh.syncSchedtags(ctx, userCred, extHost) + if err != nil && errors.Cause(err) != cloudprovider.ErrNotFound && errors.Cause(err) != errors.ErrNotImplemented { + log.Errorf("syncSchedtags for %s fail: %v", hh.Name, err) + } } if len(diff) > 0 { diff --git a/pkg/compute/options/options.go b/pkg/compute/options/options.go index 004ba90965..96b82261dd 100644 --- a/pkg/compute/options/options.go +++ b/pkg/compute/options/options.go @@ -177,6 +177,8 @@ type ComputeOptions struct { AutoReconcileBackupServers bool `help:"auto reconcile backup servers" default:"false"` SetKVMServerAsDaemonOnCreate bool `help:"set kvm guest as daemon server on create" default:"false"` + DisableSyncSchedtags bool `help:"disable sync schedtags" default:"false"` + SCapabilityOptions SASControllerOptions common_options.CommonOptions