elasticcache_secgroups.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package models
  15. import (
  16. "context"
  17. "yunion.io/x/jsonutils"
  18. "yunion.io/x/log"
  19. "yunion.io/x/pkg/errors"
  20. "yunion.io/x/sqlchemy"
  21. "yunion.io/x/onecloud/pkg/apis"
  22. api "yunion.io/x/onecloud/pkg/apis/compute"
  23. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  24. "yunion.io/x/onecloud/pkg/mcclient"
  25. "yunion.io/x/onecloud/pkg/util/stringutils2"
  26. )
  27. // +onecloud:swagger-gen-ignore
  28. type SElasticcachesecgroupManager struct {
  29. SElasticcacheJointsManager
  30. SSecurityGroupResourceBaseManager
  31. }
  32. var ElasticcachesecgroupManager *SElasticcachesecgroupManager
  33. func init() {
  34. db.InitManager(func() {
  35. ElasticcachesecgroupManager = &SElasticcachesecgroupManager{
  36. SElasticcacheJointsManager: NewElasticcacheJointsManager(
  37. SElasticcachesecgroup{},
  38. "elasticcachesecgroups_tbl",
  39. "elasticcachesecgroup",
  40. "elasticcachesecgroups",
  41. SecurityGroupManager,
  42. ),
  43. }
  44. ElasticcachesecgroupManager.SetVirtualObject(ElasticcachesecgroupManager)
  45. })
  46. }
  47. // +onecloud:model-api-gen
  48. type SElasticcachesecgroup struct {
  49. SElasticcacheJointsBase
  50. SSecurityGroupResourceBase `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"`
  51. }
  52. func (manager *SElasticcachesecgroupManager) GetSlaveFieldName() string {
  53. return "secgroup_id"
  54. }
  55. func (self *SElasticcachesecgroup) getSecgroup() *SSecurityGroup {
  56. secgrp, err := SecurityGroupManager.FetchById(self.SecgroupId)
  57. if err != nil {
  58. log.Errorf("failed to find secgroup %s", self.SecgroupId)
  59. return nil
  60. }
  61. secgroup := secgrp.(*SSecurityGroup)
  62. secgroup.SetModelManager(SecurityGroupManager, secgroup)
  63. return secgroup
  64. }
  65. func (self *SElasticcachesecgroup) Delete(ctx context.Context, userCred mcclient.TokenCredential) error {
  66. return db.DeleteModel(ctx, userCred, self)
  67. }
  68. func (manager *SElasticcachesecgroupManager) ListItemFilter(
  69. ctx context.Context,
  70. q *sqlchemy.SQuery,
  71. userCred mcclient.TokenCredential,
  72. query api.ElasticcachesecgroupListInput,
  73. ) (*sqlchemy.SQuery, error) {
  74. var err error
  75. q, err = manager.SElasticcacheJointsManager.ListItemFilter(ctx, q, userCred, query.ElasticcacheJointsListInput)
  76. if err != nil {
  77. return nil, errors.Wrap(err, "SElasticcacheJointsManager.ListItemFilter")
  78. }
  79. q, err = manager.SSecurityGroupResourceBaseManager.ListItemFilter(ctx, q, userCred, query.SecgroupFilterListInput)
  80. if err != nil {
  81. return nil, errors.Wrap(err, "SSecurityGroupResourceBaseManager.ListItemFilter")
  82. }
  83. return q, nil
  84. }
  85. func (manager *SElasticcachesecgroupManager) OrderByExtraFields(
  86. ctx context.Context,
  87. q *sqlchemy.SQuery,
  88. userCred mcclient.TokenCredential,
  89. query api.ElasticcachesecgroupListInput,
  90. ) (*sqlchemy.SQuery, error) {
  91. var err error
  92. q, err = manager.SElasticcacheJointsManager.OrderByExtraFields(ctx, q, userCred, query.ElasticcacheJointsListInput)
  93. if err != nil {
  94. return nil, errors.Wrap(err, "SElasticcacheJointsManager.OrderByExtraFields")
  95. }
  96. q, err = manager.SSecurityGroupResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.SecgroupFilterListInput)
  97. if err != nil {
  98. return nil, errors.Wrap(err, "SSecurityGroupResourceBaseManager.OrderByExtraFields")
  99. }
  100. return q, nil
  101. }
  102. func (manager *SElasticcachesecgroupManager) ListItemExportKeys(ctx context.Context,
  103. q *sqlchemy.SQuery,
  104. userCred mcclient.TokenCredential,
  105. keys stringutils2.SSortedStrings,
  106. ) (*sqlchemy.SQuery, error) {
  107. var err error
  108. q, err = manager.SElasticcacheJointsManager.ListItemExportKeys(ctx, q, userCred, keys)
  109. if err != nil {
  110. return nil, errors.Wrap(err, "SElasticcacheJointsManager.ListItemExportKeys")
  111. }
  112. if keys.ContainsAny(manager.SSecurityGroupResourceBaseManager.GetExportKeys()...) {
  113. q, err = manager.SSecurityGroupResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
  114. if err != nil {
  115. return nil, errors.Wrap(err, "SSecurityGroupResourceBaseManager.ListItemExportKeys")
  116. }
  117. }
  118. return q, nil
  119. }
  120. func (manager *SElasticcachesecgroupManager) FetchCustomizeColumns(
  121. ctx context.Context,
  122. userCred mcclient.TokenCredential,
  123. query jsonutils.JSONObject,
  124. objs []interface{},
  125. fields stringutils2.SSortedStrings,
  126. isList bool,
  127. ) []api.ElasticcachesecgroupDetails {
  128. rows := make([]api.ElasticcachesecgroupDetails, len(objs))
  129. ecRows := manager.SElasticcacheJointsManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
  130. secgroupIds := make([]string, len(rows))
  131. for i := range rows {
  132. rows[i].ElasticcacheJointResourceDetails = ecRows[i]
  133. secgroupIds[i] = objs[i].(*SElasticcachesecgroup).SecgroupId
  134. }
  135. secgroupIdMaps, err := db.FetchIdNameMap2(SecurityGroupManager, secgroupIds)
  136. if err != nil {
  137. log.Errorf("FetchIdNameMap2 fail %s", err)
  138. return rows
  139. }
  140. for i := range rows {
  141. if name, ok := secgroupIdMaps[secgroupIds[i]]; ok {
  142. rows[i].Secgroup = name
  143. }
  144. }
  145. return rows
  146. }
  147. func fetchElasticcacheSecgroups(cacheIds []string) map[string][]apis.StandaloneShortDesc {
  148. secgroups := SecurityGroupManager.Query().SubQuery()
  149. cachesecgroups := ElasticcachesecgroupManager.Query().SubQuery()
  150. q := cachesecgroups.Query(
  151. cachesecgroups.Field("elasticcache_id", "elasticcache_id"),
  152. cachesecgroups.Field("secgroup_id", "secgroup_id"),
  153. secgroups.Field("name", "secgroup_name"))
  154. q = q.Filter(sqlchemy.In(cachesecgroups.Field("elasticcache_id"), cacheIds))
  155. q = q.Join(secgroups, sqlchemy.Equals(q.Field("secgroup_id"), secgroups.Field("id")))
  156. type secgroupInfo struct {
  157. SecgroupId string
  158. SecgroupName string
  159. ElasticcacheId string
  160. }
  161. gsgs := make([]secgroupInfo, 0)
  162. err := q.All(&gsgs)
  163. if err != nil {
  164. log.Debugf("fetchElasticcacheSecgroups %s", err)
  165. return nil
  166. }
  167. ret := make(map[string][]apis.StandaloneShortDesc)
  168. for i := range gsgs {
  169. gsg, ok := ret[gsgs[i].ElasticcacheId]
  170. if !ok {
  171. gsg = make([]apis.StandaloneShortDesc, 0)
  172. }
  173. gsg = append(gsg, apis.StandaloneShortDesc{
  174. Id: gsgs[i].SecgroupId,
  175. Name: gsgs[i].SecgroupName,
  176. })
  177. ret[gsgs[i].ElasticcacheId] = gsg
  178. }
  179. return ret
  180. }