From 251765d4b614d185122e3bea7b44a5100d8601e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 15 Dec 2018 13:26:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9C=AA=E5=85=B3=E8=81=94=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=E7=9A=84=E5=AE=89=E5=85=A8=E7=BB=84=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/secgroups.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index e17f5502e7..f88125f0bf 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -220,8 +220,11 @@ func (self *SSecurityGroup) SyncWithCloudSecurityGroup(userCred mcclient.TokenCr func (manager *SSecurityGroupManager) newFromCloudVpc(userCred mcclient.TokenCredential, extSec cloudprovider.ICloudSecurityGroup, vpc *SVpc) (*SSecurityGroup, bool, error) { if secgroup, exist := SecurityGroupCacheManager.CheckExist(context.Background(), userCred, extSec.GetGlobalId(), extSec.GetVpcId(), vpc.CloudregionId, vpc.ManagerId); exist { + if secgroup.GetGuestsCount() == 0 { + return secgroup, true, nil + } //避免重复同步 - return secgroup, true, nil + return secgroup, false, nil } secgroup := SSecurityGroup{} @@ -232,7 +235,7 @@ func (manager *SSecurityGroupManager) newFromCloudVpc(userCred mcclient.TokenCre secgroup.ProjectId = userCred.GetProjectId() if err := manager.TableSpec().Insert(&secgroup); err != nil { - return nil, false, err + return nil, true, err } if secgroupcache := SecurityGroupCacheManager.Register(context.Background(), userCred, secgroup.Id, extSec.GetVpcId(), vpc.CloudregionId, vpc.ManagerId); secgroupcache != nil { @@ -241,7 +244,7 @@ func (manager *SSecurityGroupManager) newFromCloudVpc(userCred mcclient.TokenCre } } - return &secgroup, false, nil + return &secgroup, true, nil } func (manager *SSecurityGroupManager) SyncSecgroups(ctx context.Context, userCred mcclient.TokenCredential, secgroups []cloudprovider.ICloudSecurityGroup, vpc *SVpc) ([]SSecurityGroup, []cloudprovider.ICloudSecurityGroup, compare.SyncResult) { @@ -285,18 +288,17 @@ func (manager *SSecurityGroupManager) SyncSecgroups(ctx context.Context, userCre syncResult.AddError(err) continue } - new, exist, err := manager.newFromCloudVpc(userCred, added[i], vpc) + new, ruleSync, err := manager.newFromCloudVpc(userCred, added[i], vpc) if err != nil { syncResult.AddError(err) continue } - if exist { - continue - } localSecgroups = append(localSecgroups, *new) remoteSecgroups = append(remoteSecgroups, added[i]) - SecurityGroupRuleManager.SyncRules(ctx, userCred, new, rules) syncResult.Add() + if ruleSync { + SecurityGroupRuleManager.SyncRules(ctx, userCred, new, rules) + } } return localSecgroups, remoteSecgroups, syncResult } From 9e4fbfa943f886d12460dc7dcc7e3e0ed2df38b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 15 Dec 2018 13:41:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BB=A3=E7=A0=81,?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/guest_actions.go | 57 +++++++++++------------------ pkg/util/logclient/logclient.go | 1 + 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index e1585d8980..c213e28ad8 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -13,6 +13,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" + "yunion.io/x/onecloud/pkg/cloudcommon/validators" "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" @@ -503,48 +504,34 @@ func (self *SGuest) AllowPerformRevokeSecgroup(ctx context.Context, userCred mcc func (self *SGuest) PerformRevokeSecgroup(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { if !utils.IsInStringArray(self.Status, []string{VM_READY, VM_RUNNING, VM_SUSPEND}) { return nil, httperrors.NewInputParameterError("Cannot revoke security rules in status %s", self.Status) - } else { - if _, err := self.GetModelManager().TableSpec().Update(self, func() error { - self.SecgrpId = "default" - return nil - }); err != nil { - return nil, err - } - if err := self.StartSyncTask(ctx, userCred, true, ""); err != nil { - return nil, err - } } - return nil, nil + if _, err := self.GetModelManager().TableSpec().Update(self, func() error { + self.SecgrpId = "default" + return nil + }); err != nil { + return nil, err + } + logclient.AddActionLog(self, logclient.ACT_VM_REVOKESECGROUP, nil, userCred, true) + return nil, self.StartSyncTask(ctx, userCred, true, "") } func (self *SGuest) PerformAssignSecgroup(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { if !utils.IsInStringArray(self.Status, []string{VM_READY, VM_RUNNING, VM_SUSPEND}) { - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, "Cannot assign security rules in status "+self.Status, userCred, false) return nil, httperrors.NewInputParameterError("Cannot assign security rules in status %s", self.Status) - } else { - if secgrp, err := data.GetString("secgrp"); err != nil { - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, err, userCred, false) - return nil, err - } else if sg, err := SecurityGroupManager.FetchByIdOrName(userCred.GetProjectId(), secgrp); err != nil { - msg := fmt.Sprintf("SecurityGroup %s not found", secgrp) - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, msg, userCred, false) - return nil, httperrors.NewNotFoundError("SecurityGroup %s not found", secgrp) - } else { - if _, err := self.GetModelManager().TableSpec().Update(self, func() error { - self.SecgrpId = sg.GetId() - return nil - }); err != nil { - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, err, userCred, false) - return nil, err - } - if err := self.StartSyncTask(ctx, userCred, true, ""); err != nil { - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, err, userCred, false) - return nil, err - } - } } - logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, nil, userCred, true) - return nil, nil + secgrpV := validators.NewModelIdOrNameValidator("secgrp", "secgroup", userCred.GetProjectId()) + if err := secgrpV.Validate(data.(*jsonutils.JSONDict)); err != nil { + return nil, err + } + + if _, err := self.GetModelManager().TableSpec().Update(self, func() error { + self.SecgrpId = secgrpV.Model.GetId() + return nil + }); err != nil { + return nil, err + } + logclient.AddActionLog(self, logclient.ACT_VM_ASSIGNSECGROUP, fmt.Sprintf("secgroup: %s", secgrpV.Model.GetName()), userCred, true) + return nil, self.StartSyncTask(ctx, userCred, true, "") } func (self *SGuest) AllowPerformPurge(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 6e15876f66..66c3b25155 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -56,6 +56,7 @@ const ( ACT_VM_SYNC_STATUS = "同步状态" ACT_VM_UNBIND_KEYPAIR = "解绑密钥" ACT_VM_ASSIGNSECGROUP = "关联安全组" + ACT_VM_REVOKESECGROUP = "取消关联安全组" ACT_RESET_DISK = "回滚磁盘" ) From e5416a27e0bd9d9e9c851c288a4f08b0e3f242d3 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 17 Dec 2018 12:25:30 +0800 Subject: [PATCH 3/3] fix Actionlog notes --- pkg/compute/models/guest_actions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index db510430bd..0193c38ead 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -744,7 +744,7 @@ func (self *SGuest) PerformRevokeSecgroup(ctx context.Context, userCred mcclient if err := self.revokeSecgroup(ctx, userCred, secgroup); err != nil { return nil, err } - logclient.AddActionLog(self, logclient.ACT_VM_REVOKESECGROUP, nil, userCred, true) + logclient.AddActionLog(self, logclient.ACT_VM_REVOKESECGROUP, fmt.Sprintf("secgroup: %s", secgrpV.Model.GetName()), userCred, true) return nil, self.StartSyncTask(ctx, userCred, true, "") }