mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): 简化清理未使用的安全组 (#20724)
This commit is contained in:
@@ -34,4 +34,5 @@ func init() {
|
||||
cmd.Perform("add-rule", &options.SecgroupsAddRuleOptions{})
|
||||
cmd.Perform("change-owner", &options.SecgroupChangeOwnerOptions{})
|
||||
cmd.Perform("import-rules", &options.SecgroupImportRulesOptions{})
|
||||
cmd.PerformClass("clean", &options.SecgroupCleanOptions{})
|
||||
}
|
||||
|
||||
@@ -839,7 +839,7 @@ func (manager *SSecurityGroupManager) InitializeData() error {
|
||||
}
|
||||
}
|
||||
guests := make([]SGuest, 0)
|
||||
q := GuestManager.Query().Equals("hypervisor", api.HYPERVISOR_KVM).IsNullOrEmpty("secgrp_id")
|
||||
q := GuestManager.Query().Equals("hypervisor", api.HYPERVISOR_KVM).IsNotEmpty("external_id").IsNullOrEmpty("secgrp_id")
|
||||
err = db.FetchModelObjects(GuestManager, q, &guests)
|
||||
if err != nil {
|
||||
log.Errorf("fetch guests without secgroup fail %s", err)
|
||||
@@ -851,36 +851,36 @@ func (manager *SSecurityGroupManager) InitializeData() error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
if options.Options.CleanUselessKvmSecurityGroup {
|
||||
q := SecurityGroupManager.Query()
|
||||
q = q.Filter(
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(q.Field("cloudregion_id"), api.DEFAULT_REGION_ID),
|
||||
sqlchemy.NotEquals(q.Field("id"), api.SECGROUP_DEFAULT_ID),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestManager.Query("secgrp_id").IsNotNull("secgrp_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestManager.Query("admin_secgrp_id").IsNotNull("admin_secgrp_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestsecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestsecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), DBInstanceSecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), ElasticcachesecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
),
|
||||
)
|
||||
secgroups := []SSecurityGroup{}
|
||||
err := db.FetchModelObjects(SecurityGroupManager, q, &secgroups)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SSecurityGroupManager) PerformClean(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
|
||||
q := SecurityGroupManager.Query()
|
||||
q = q.Filter(
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(q.Field("cloudregion_id"), api.DEFAULT_REGION_ID),
|
||||
sqlchemy.NotEquals(q.Field("id"), api.SECGROUP_DEFAULT_ID),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestManager.Query("secgrp_id").IsNotNull("secgrp_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestManager.Query("admin_secgrp_id").IsNotNull("admin_secgrp_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestsecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), GuestsecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), DBInstanceSecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), ElasticcachesecgroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
sqlchemy.NotIn(q.Field("id"), LoadbalancerSecurityGroupManager.Query("secgroup_id").IsNotNull("secgroup_id").SubQuery()),
|
||||
),
|
||||
)
|
||||
secgroups := []SSecurityGroup{}
|
||||
err := db.FetchModelObjects(SecurityGroupManager, q, &secgroups)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "FetchModelObjects")
|
||||
}
|
||||
for i := range secgroups {
|
||||
err = secgroups[i].RealDelete(ctx, userCred)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctx := context.Background()
|
||||
ctx = context.WithValue(ctx, "clean", "kvm security groups")
|
||||
userCred := auth.GetAdminSession(ctx, options.Options.Region).GetToken()
|
||||
for i := range secgroups {
|
||||
err = secgroups[i].RealDelete(ctx, userCred)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil, errors.Wrapf(err, "delete %s", secgroups[i].Name)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (self *SSecurityGroup) GetRegionDriver() (IRegionDriver, error) {
|
||||
|
||||
@@ -34,9 +34,8 @@ type ComputeOptions struct {
|
||||
DefaultMemoryOvercommitBound float32 `default:"1.0" help:"Default memory overcommit bound for host, default to 1"`
|
||||
DefaultStorageOvercommitBound float32 `default:"1.0" help:"Default storage overcommit bound for storage, default to 1"`
|
||||
|
||||
DefaultSecurityGroupId string `help:"Default security rules" default:"default"`
|
||||
DefaultAdminSecurityGroupId string `help:"Default admin security rules" default:""`
|
||||
CleanUselessKvmSecurityGroup bool `help:"Clean useless kvm security groups when service start"`
|
||||
DefaultSecurityGroupId string `help:"Default security rules" default:"default"`
|
||||
DefaultAdminSecurityGroupId string `help:"Default admin security rules" default:""`
|
||||
|
||||
DefaultDiskSizeMB int `default:"10240" help:"Default disk size in MB if not specified, default to 10GiB" json:"default_disk_size"`
|
||||
|
||||
|
||||
@@ -180,3 +180,10 @@ func (opts *SecgroupImportRulesOptions) Params() (jsonutils.JSONObject, error) {
|
||||
}
|
||||
return jsonutils.Marshal(map[string]*jsonutils.JSONArray{"rules": rules}), nil
|
||||
}
|
||||
|
||||
type SecgroupCleanOptions struct {
|
||||
}
|
||||
|
||||
func (opts *SecgroupCleanOptions) Params() (jsonutils.JSONObject, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user