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  }