github.com/sacloud/iaas-api-go@v1.12.0/naked/dns.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 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 15 package naked 16 17 import ( 18 "encoding/json" 19 "time" 20 21 "github.com/sacloud/iaas-api-go/types" 22 ) 23 24 // DNS DNSゾーン 25 type DNS struct { 26 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 27 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"` 28 Description string `yaml:"description"` 29 Tags types.Tags `yaml:"tags"` 30 Icon *Icon `json:",omitempty" yaml:"icon,omitempty" structs:",omitempty"` 31 CreatedAt *time.Time `json:",omitempty" yaml:"created_at,omitempty" structs:",omitempty"` 32 ModifiedAt *time.Time `json:",omitempty" yaml:"modified_at,omitempty" structs:",omitempty"` 33 Availability types.EAvailability `json:",omitempty" yaml:"availability,omitempty" structs:",omitempty"` 34 ServiceClass string `json:",omitempty" yaml:"service_class,omitempty" structs:",omitempty"` 35 Provider *Provider `json:",omitempty" yaml:"provider,omitempty" structs:",omitempty"` 36 Settings *DNSSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 37 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 38 Status *DNSStatus `json:",omitempty" yaml:"status,omitempty" structs:",omitempty"` 39 } 40 41 // DNSSettingsUpdate DNSゾーン 42 type DNSSettingsUpdate struct { 43 Settings *DNSSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 44 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 45 } 46 47 // DNSStatus DNSステータス 48 type DNSStatus struct { 49 Zone string `json:",omitempty" yaml:"zone,omitempty" structs:",omitempty"` 50 NS []string `json:",omitempty" yaml:"ns,omitempty" structs:",omitempty"` 51 } 52 53 // DNSSettings DNSセッティング 54 type DNSSettings struct { 55 DNS *DNSSetting `json:",omitempty" yaml:"dns,omitempty" structs:",omitempty"` 56 } 57 58 // DNSSetting DNSセッティング 59 type DNSSetting struct { 60 ResourceRecordSets []*DNSRecord `yaml:"resource_record_sets"` 61 } 62 63 // MarshalJSON nullの場合に空配列を出力するための実装 64 func (ds DNSSetting) MarshalJSON() ([]byte, error) { 65 if ds.ResourceRecordSets == nil { 66 ds.ResourceRecordSets = make([]*DNSRecord, 0) 67 } 68 type alias DNSSetting 69 tmp := alias(ds) 70 return json.Marshal(&tmp) 71 } 72 73 // DNSRecord DNSレコード 74 type DNSRecord struct { 75 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"` // ホスト名 76 Type types.EDNSRecordType `json:",omitempty" yaml:"type,omitempty" structs:",omitempty"` // レコードタイプ 77 RData string `json:",omitempty" yaml:"rdata,omitempty" structs:",omitempty"` // レコードデータ 78 TTL int `json:",omitempty" yaml:"ttl,omitempty" structs:",omitempty"` // TTL 79 }