Merge pull request #7739 from ioito/hotfix/qx-resource-update

fix: valid update name and update dns recordset
This commit is contained in:
yunion-ci-robot
2020-09-04 20:11:38 +08:00
committed by GitHub
9 changed files with 97 additions and 0 deletions
+10
View File
@@ -25,6 +25,7 @@ const (
)
type DnsRecordPolicy struct {
// 平台
Provider string `json:"provider"`
PolicyType string `json:"policy_type"`
PolicyValue string `json:"policy_value"`
@@ -42,9 +43,18 @@ type DnsRecordSetCreateInput struct {
TrafficPolicies []DnsRecordPolicy `json:"traffic_policies"`
}
type DnsRecordSetUpdateInput struct {
apis.EnabledStatusStandaloneResourceBaseUpdateInput
SDnsRecordSet
TrafficPolicies []DnsRecordPolicy
}
type DnsRecordSetDetails struct {
apis.EnabledStatusStandaloneResourceDetails
SDnsRecordSet
TrafficPolicies []DnsRecordPolicy
}
@@ -264,6 +264,10 @@ func (manager *SDBInstanceAccountManager) QueryDistinctExtraField(q *sqlchemy.SQ
return q, httperrors.ErrNotFound
}
func (self *SDBInstanceAccount) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"dbinstance_id": self.DBInstanceId})
}
func (manager *SDBInstanceAccountManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
dbinstanceId, _ := data.GetString("dbinstance_id")
return jsonutils.Marshal(map[string]string{"dbinstance_id": dbinstanceId})
+59
View File
@@ -256,6 +256,14 @@ type sRecordUniqValues struct {
DnsValue string
}
func (self *SDnsRecordSet) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(sRecordUniqValues{
DnsZoneId: self.DnsZoneId,
DnsType: self.DnsType,
DnsValue: self.DnsValue,
})
}
func (manager *SDnsRecordSetManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
values := &sRecordUniqValues{}
data.Unmarshal(values)
@@ -335,9 +343,60 @@ func (self *SDnsRecordSet) PreDelete(ctx context.Context, userCred mcclient.Toke
dnsZone.DoSyncRecords(ctx, userCred)
}
// 更新
func (self *SDnsRecordSet) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.DnsRecordSetUpdateInput) (api.DnsRecordSetUpdateInput, error) {
var err error
input.EnabledStatusStandaloneResourceBaseUpdateInput, err = self.SEnabledStatusStandaloneResourceBase.ValidateUpdateData(ctx, userCred, query, input.EnabledStatusStandaloneResourceBaseUpdateInput)
if err != nil {
return input, err
}
dnsZone, err := self.GetDnsZone()
if err != nil {
return input, httperrors.NewGeneralError(errors.Wrapf(err, "GetDnsZone"))
}
for _, policy := range input.TrafficPolicies {
if len(policy.Provider) == 0 {
return input, httperrors.NewGeneralError(fmt.Errorf("missing traffic policy provider"))
}
factory, err := cloudprovider.GetProviderFactory(policy.Provider)
if err != nil {
return input, httperrors.NewGeneralError(errors.Wrapf(err, "invalid provider %s for traffic policy", policy.Provider))
}
_dnsTypes := factory.GetSupportedDnsTypes()
dnsTypes, _ := _dnsTypes[cloudprovider.TDnsZoneType(dnsZone.ZoneType)]
if ok, _ := utils.InArray(cloudprovider.TDnsType(input.DnsType), dnsTypes); !ok {
return input, httperrors.NewNotSupportedError("%s %s not supported dns type %s", policy.Provider, dnsZone.ZoneType, input.DnsType)
}
_policyTypes := factory.GetSupportedDnsPolicyTypes()
policyTypes, _ := _policyTypes[cloudprovider.TDnsZoneType(dnsZone.ZoneType)]
if ok, _ := utils.InArray(cloudprovider.TDnsPolicyType(policy.PolicyType), policyTypes); !ok {
return input, httperrors.NewNotSupportedError("%s %s not supported policy type %s", policy.Provider, dnsZone.ZoneType, policy.PolicyType)
}
_policyValues := factory.GetSupportedDnsPolicyValues()
policyValues, _ := _policyValues[cloudprovider.TDnsPolicyType(policy.PolicyType)]
if len(policyValues) > 0 {
if len(policy.PolicyValue) == 0 {
return input, httperrors.NewMissingParameterError(fmt.Sprintf("missing %s policy value", policy.Provider))
}
if isIn, _ := utils.InArray(cloudprovider.TDnsPolicyValue(policy.PolicyValue), policyValues); !isIn {
return input, httperrors.NewNotSupportedError("%s %s %s not support %s", policy.Provider, dnsZone.ZoneType, policy.PolicyType, policy.PolicyValue)
}
}
}
return input, nil
}
func (self *SDnsRecordSet) PostUpdate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) {
self.SEnabledStatusStandaloneResourceBase.PostUpdate(ctx, userCred, query, data)
input := &api.DnsRecordSetUpdateInput{}
data.Unmarshal(input)
for _, policy := range input.TrafficPolicies {
self.setTrafficPolicy(ctx, userCred, policy.Provider, cloudprovider.TDnsPolicyType(policy.PolicyType), cloudprovider.TDnsPolicyValue(policy.PolicyValue), policy.PolicyOptions)
}
dnsZone, err := self.GetDnsZone()
if err != nil {
return
@@ -187,6 +187,10 @@ func (manager *SElasticcacheAccountManager) newFromCloudElasticcacheAccount(ctx
return &account, nil
}
func (self *SElasticcacheAccount) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"elasticcache_id": self.ElasticcacheId})
}
func (manager *SElasticcacheAccountManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
cacheId := jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
return jsonutils.Marshal(map[string]string{"elasticcache_id": cacheId})
+4
View File
@@ -167,6 +167,10 @@ func (manager *SElasticcacheAclManager) newFromCloudElasticcacheAcl(ctx context.
return &acl, nil
}
func (self *SElasticcacheAcl) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"elasticcache_id": self.ElasticcacheId})
}
func (manager *SElasticcacheAclManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
elasticcacheId := jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
return jsonutils.Marshal(map[string]string{"elasticcache_id": elasticcacheId})
@@ -195,6 +195,10 @@ func (manager *SElasticcacheBackupManager) newFromCloudElasticcacheBackup(ctx co
return &backup, nil
}
func (self *SElasticcacheBackup) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"elasticcache_id": self.ElasticcacheId})
}
func (manager *SElasticcacheBackupManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
cacheId := jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
return jsonutils.Marshal(map[string]string{"elasticcache_id": cacheId})
+4
View File
@@ -780,6 +780,10 @@ func (manager *SIsolatedDeviceManager) GetDevsOnHost(hostId string, model string
return devs, nil
}
func (self *SIsolatedDevice) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"host_id": self.HostId})
}
func (manager *SIsolatedDeviceManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
hostId, _ := data.GetString("host_id")
return jsonutils.Marshal(map[string]string{"host_id": hostId})
+4
View File
@@ -319,6 +319,10 @@ func (rip *SReservedip) IsExpired() bool {
return false
}
func (self *SReservedip) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"network_id": self.NetworkId})
}
func (manager *SReservedipManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
networkId, _ := data.GetString("network_id")
return jsonutils.Marshal(map[string]string{"network_id": networkId})
+4
View File
@@ -116,6 +116,10 @@ func (spm *SScalingPolicyManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fi
return spm.SScalingGroupResourceBaseManager.QueryDistinctExtraField(q, field)
}
func (sgm *SScalingPolicy) GetUniqValues() jsonutils.JSONObject {
return jsonutils.Marshal(map[string]string{"scaling_group_id": sgm.ScalingGroupId})
}
func (spm *SScalingPolicyManager) FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject {
return spm.SScalingGroupResourceBaseManager.FetchUniqValues(ctx, data)
}