Files
cloudpods/pkg/apis/compute/dnsrecord.go
T

106 lines
3.0 KiB
Go

// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package compute
import (
"yunion.io/x/cloudmux/pkg/apis/compute"
"yunion.io/x/cloudmux/pkg/cloudprovider"
"yunion.io/x/pkg/util/regutils"
"yunion.io/x/onecloud/pkg/apis"
"yunion.io/x/onecloud/pkg/httperrors"
)
const (
DNS_RECORDSET_STATUS_AVAILABLE = compute.DNS_RECORDSET_STATUS_AVAILABLE
DNS_RECORDSET_STATUS_CREATING = apis.STATUS_CREATING
)
type DnsRecordCreateInput struct {
apis.EnabledStatusStandaloneResourceCreateInput
DnsZoneId string `json:"dns_zone_id"`
DnsType string `json:"dns_type"`
DnsValue string `json:"dns_value"`
TTL int64 `json:"ttl"`
MxPriority int64 `json:"mx_priority"`
Proxied *bool `json:"proxied"`
PolicyType string `json:"policy_type"`
PolicyValue string `json:"policy_value"`
}
type DnsRecordUpdateInput struct {
apis.EnabledStatusStandaloneResourceBaseUpdateInput
DnsType string `json:"dns_type"`
DnsValue string `json:"dns_value"`
TTL *int64 `json:"ttl"`
MxPriority *int64 `json:"mx_priority"`
Proxied *bool `json:"proxied"`
}
type DnsRecordDetails struct {
apis.EnabledStatusStandaloneResourceDetails
SDnsRecord
DnsZone string `json:"dns_zone"`
}
type DnsRecordListInput struct {
apis.EnabledStatusStandaloneResourceListInput
DnsZoneFilterListBase
}
type DnsRecordEnableInput struct {
apis.PerformEnableInput
}
type DnsRecordDisableInput struct {
apis.PerformDisableInput
}
func (record *SDnsRecord) ValidateDnsrecordValue() error {
switch cloudprovider.TDnsType(record.DnsType) {
case cloudprovider.DnsTypeMX:
if record.MxPriority < 1 || record.MxPriority > 50 {
return httperrors.NewOutOfRangeError("mx_priority range limited to [1,50]")
}
if !regutils.MatchDomainName(record.DnsValue) {
return httperrors.NewInputParameterError("invalid domain %s for MX record", record.DnsValue)
}
case cloudprovider.DnsTypeA:
if !regutils.MatchIP4Addr(record.DnsValue) {
return httperrors.NewInputParameterError("invalid ipv4 %s for A record", record.DnsValue)
}
case cloudprovider.DnsTypeAAAA:
if !regutils.MatchIP6Addr(record.DnsValue) {
return httperrors.NewInputParameterError("invalid ipv6 %s for AAAA record", record.DnsValue)
}
case cloudprovider.DnsTypeCNAME:
if !regutils.MatchDomainName(record.DnsValue) {
return httperrors.NewInputParameterError("invalid domain %s for CNAME record", record.DnsValue)
}
}
return nil
}
type SDnsResolveResult struct {
DnsValue string `json:"dns_value"`
TTL int64 `json:"ttl"`
DnsName string `json:"dns_name"`
}