github.com/IBM-Cloud/bluemix-go@v0.0.0-20240314082800-4e02a69b84b2/api/cis/cisv1/dns.go (about) 1 package cisv1 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/IBM-Cloud/bluemix-go/client" 8 ) 9 10 type DnsRecord struct { 11 Id string `json:"id"` 12 Name string `json:"name,omitempty"` 13 DnsType string `json:"type"` 14 Content string `json:"content"` 15 ZoneId string `json:"zone_id"` 16 ZoneName string `json:"zone_name"` 17 CreatedOn *time.Time `json:"created_on,omitempty"` 18 ModifiedOn *time.Time `json:"modified_on,omitempty"` 19 Proxiable bool `json:"proxiable"` 20 Proxied bool `json:"proxied"` 21 Ttl int `json:"ttl"` 22 Priority int `json:"priority,omitempty"` 23 Data interface{} `json:"data,omitempty"` 24 } 25 26 type DnsResults struct { 27 DnsList []DnsRecord `json:"result"` 28 ResultsInfo ResultsCount `json:"result_info"` 29 Success bool `json:"success"` 30 Errors []Error `json:"errors"` 31 } 32 33 type DnsResult struct { 34 Dns DnsRecord `json:"result"` 35 Success bool `json:"success"` 36 Errors []Error `json:"errors"` 37 Messages []string `json:"messages"` 38 } 39 40 type DnsBody struct { 41 Name string `json:"name,omitempty"` 42 DnsType string `json:"type"` 43 Content string `json:"content,omitempty"` 44 Priority int `json:"priority,omitempty"` 45 Data interface{} `json:"data,omitempty"` 46 Proxied bool `json:"proxied,omitempty"` 47 Ttl int `json:"ttl,omitempty"` 48 } 49 50 type Dns interface { 51 ListDns(cisId string, zoneId string) ([]DnsRecord, error) 52 GetDns(cisId string, zoneId string, dnsId string) (*DnsRecord, error) 53 CreateDns(cisId string, zoneId string, dnsBody DnsBody) (*DnsRecord, error) 54 DeleteDns(cisId string, zoneId string, dnsId string) error 55 UpdateDns(cisId string, zoneId string, dnsId string, dnsBody DnsBody) (*DnsRecord, error) 56 } 57 58 type dns struct { 59 client *client.Client 60 } 61 62 func newDnsAPI(c *client.Client) Dns { 63 return &dns{ 64 client: c, 65 } 66 } 67 68 func (r *dns) ListDns(cisId string, zoneId string) ([]DnsRecord, error) { 69 var records []DnsRecord 70 rawURL := fmt.Sprintf("/v1/%s/zones/%s/dns_records?page=1", cisId, zoneId) 71 if _, err := r.client.GetPaginated(rawURL, NewDNSPaginatedResources(DnsRecord{}), func(resource interface{}) bool { 72 if dns, ok := resource.(DnsRecord); ok { 73 records = append(records, dns) 74 return true 75 } 76 return false 77 }); err != nil { 78 return nil, fmt.Errorf("failed to list paginated dns records: %s", err) 79 } 80 return records, nil 81 } 82 83 func (r *dns) GetDns(cisId string, zoneId string, dnsId string) (*DnsRecord, error) { 84 dnsResult := DnsResult{} 85 rawURL := fmt.Sprintf("/v1/%s/zones/%s/dns_records/%s", cisId, zoneId, dnsId) 86 _, err := r.client.Get(rawURL, &dnsResult, nil) 87 if err != nil { 88 return nil, err 89 } 90 return &dnsResult.Dns, nil 91 } 92 93 func (r *dns) DeleteDns(cisId string, zoneId string, dnsId string) error { 94 rawURL := fmt.Sprintf("/v1/%s/zones/%s/dns_records/%s", cisId, zoneId, dnsId) 95 _, err := r.client.Delete(rawURL) 96 if err != nil { 97 return err 98 } 99 return nil 100 } 101 102 func (r *dns) CreateDns(cisId string, zoneId string, dnsBody DnsBody) (*DnsRecord, error) { 103 dnsResult := DnsResult{} 104 rawURL := fmt.Sprintf("/v1/%s/zones/%s/dns_records", cisId, zoneId) 105 _, err := r.client.Post(rawURL, &dnsBody, &dnsResult) 106 if err != nil { 107 return nil, err 108 } 109 return &dnsResult.Dns, nil 110 } 111 112 func (r *dns) UpdateDns(cisId string, zoneId string, dnsId string, dnsBody DnsBody) (*DnsRecord, error) { 113 dnsResult := DnsResult{} 114 rawURL := fmt.Sprintf("/v1/%s/zones/%s/dns_records/%s", cisId, zoneId, dnsId) 115 _, err := r.client.Put(rawURL, &dnsBody, &dnsResult) 116 if err != nil { 117 return nil, err 118 } 119 return &dnsResult.Dns, nil 120 }