github.com/akamai/AkamaiOPEN-edgegrid-golang/v5@v5.0.0/pkg/dns/zonebulk.go (about)

     1  package dns
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  )
     8  
     9  // BulkZonesCreate contains a list of one or more new Zones to create
    10  type BulkZonesCreate struct {
    11  	Zones []*ZoneCreate `json:"zones"`
    12  }
    13  
    14  // BulkZonesResponse contains response from bulk-create request
    15  type BulkZonesResponse struct {
    16  	RequestId      string `json:"requestId"`
    17  	ExpirationDate string `json:"expirationDate"`
    18  }
    19  
    20  // BulkStatusResponse contains current status of a running or completed bulk-create request
    21  type BulkStatusResponse struct {
    22  	RequestId      string `json:"requestId"`
    23  	ZonesSubmitted int    `json:"zonesSubmitted"`
    24  	SuccessCount   int    `json:"successCount"`
    25  	FailureCount   int    `json:"failureCount"`
    26  	IsComplete     bool   `json:"isComplete"`
    27  	ExpirationDate string `json:"expirationDate"`
    28  }
    29  
    30  // BulkFailedZone contains information about failed zone
    31  type BulkFailedZone struct {
    32  	Zone          string `json:"zone"`
    33  	FailureReason string `json:"failureReason"`
    34  }
    35  
    36  // BulkCreateResultResponse contains the response from a completed bulk-create request
    37  type BulkCreateResultResponse struct {
    38  	RequestId                string            `json:"requestId"`
    39  	SuccessfullyCreatedZones []string          `json:"successfullyCreatedZones"`
    40  	FailedZones              []*BulkFailedZone `json:"failedZones"`
    41  }
    42  
    43  // BulkDeleteResultResponse contains the response from a completed bulk-delete request
    44  type BulkDeleteResultResponse struct {
    45  	RequestId                string            `json:"requestId"`
    46  	SuccessfullyDeletedZones []string          `json:"successfullyDeletedZones"`
    47  	FailedZones              []*BulkFailedZone `json:"failedZones"`
    48  }
    49  
    50  func (p *dns) GetBulkZoneCreateStatus(ctx context.Context, requestid string) (*BulkStatusResponse, error) {
    51  
    52  	logger := p.Log(ctx)
    53  	logger.Debug("GetBulkZoneCreateStatus")
    54  
    55  	bulkzonesURL := fmt.Sprintf("/config-dns/v2/zones/create-requests/%s", requestid)
    56  	var status BulkStatusResponse
    57  
    58  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkzonesURL, nil)
    59  	if err != nil {
    60  		return nil, fmt.Errorf("failed to create GetBulkZoneCreateStatus request: %w", err)
    61  	}
    62  
    63  	resp, err := p.Exec(req, &status)
    64  	if err != nil {
    65  		return nil, fmt.Errorf("GetBulkZoneCreateStatus request failed: %w", err)
    66  	}
    67  
    68  	if resp.StatusCode != http.StatusOK {
    69  		return nil, p.Error(resp)
    70  	}
    71  
    72  	return &status, nil
    73  }
    74  
    75  func (p *dns) GetBulkZoneDeleteStatus(ctx context.Context, requestid string) (*BulkStatusResponse, error) {
    76  
    77  	logger := p.Log(ctx)
    78  	logger.Debug("GetBulkZoneDeleteStatus")
    79  
    80  	bulkzonesURL := fmt.Sprintf("/config-dns/v2/zones/delete-requests/%s", requestid)
    81  	var status BulkStatusResponse
    82  
    83  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkzonesURL, nil)
    84  	if err != nil {
    85  		return nil, fmt.Errorf("failed to create GetBulkZoneDeleteStatus request: %w", err)
    86  	}
    87  
    88  	resp, err := p.Exec(req, &status)
    89  	if err != nil {
    90  		return nil, fmt.Errorf("GetBulkZoneDeleteStatus request failed: %w", err)
    91  	}
    92  
    93  	if resp.StatusCode != http.StatusOK {
    94  		return nil, p.Error(resp)
    95  	}
    96  
    97  	return &status, nil
    98  }
    99  
   100  func (p *dns) GetBulkZoneCreateResult(ctx context.Context, requestid string) (*BulkCreateResultResponse, error) {
   101  
   102  	logger := p.Log(ctx)
   103  	logger.Debug("GetBulkZoneCreateResult")
   104  
   105  	bulkzonesURL := fmt.Sprintf("/config-dns/v2/zones/create-requests/%s/result", requestid)
   106  	var status BulkCreateResultResponse
   107  
   108  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkzonesURL, nil)
   109  	if err != nil {
   110  		return nil, fmt.Errorf("failed to create GetBulkZoneCreateResult request: %w", err)
   111  	}
   112  
   113  	resp, err := p.Exec(req, &status)
   114  	if err != nil {
   115  		return nil, fmt.Errorf("GetBulkZoneCreateResult request failed: %w", err)
   116  	}
   117  
   118  	if resp.StatusCode != http.StatusOK {
   119  		return nil, p.Error(resp)
   120  	}
   121  
   122  	return &status, nil
   123  }
   124  
   125  func (p *dns) GetBulkZoneDeleteResult(ctx context.Context, requestid string) (*BulkDeleteResultResponse, error) {
   126  
   127  	logger := p.Log(ctx)
   128  	logger.Debug("GetBulkZoneDeleteResult")
   129  
   130  	bulkzonesURL := fmt.Sprintf("/config-dns/v2/zones/delete-requests/%s/result", requestid)
   131  	var status BulkDeleteResultResponse
   132  
   133  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkzonesURL, nil)
   134  	if err != nil {
   135  		return nil, fmt.Errorf("failed to create GetBulkZoneDeleteResult request: %w", err)
   136  	}
   137  
   138  	resp, err := p.Exec(req, &status)
   139  	if err != nil {
   140  		return nil, fmt.Errorf("GetBulkZoneDeleteResult request failed: %w", err)
   141  	}
   142  
   143  	if resp.StatusCode != http.StatusOK {
   144  		return nil, p.Error(resp)
   145  	}
   146  
   147  	return &status, nil
   148  }
   149  
   150  func (p *dns) CreateBulkZones(ctx context.Context, bulkzones *BulkZonesCreate, zonequerystring ZoneQueryString) (*BulkZonesResponse, error) {
   151  
   152  	logger := p.Log(ctx)
   153  	logger.Debug("CreateBulkZones")
   154  
   155  	bulkzonesURL := "/config-dns/v2/zones/create-requests?contractId=" + zonequerystring.Contract
   156  	if len(zonequerystring.Group) > 0 {
   157  		bulkzonesURL += "&gid=" + zonequerystring.Group
   158  	}
   159  
   160  	var status BulkZonesResponse
   161  
   162  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, bulkzonesURL, nil)
   163  	if err != nil {
   164  		return nil, fmt.Errorf("failed to create CreateBulkZones request: %w", err)
   165  	}
   166  
   167  	resp, err := p.Exec(req, &status, bulkzones)
   168  	if err != nil {
   169  		return nil, fmt.Errorf("CreateBulkZones request failed: %w", err)
   170  	}
   171  
   172  	if resp.StatusCode != http.StatusCreated {
   173  		return nil, p.Error(resp)
   174  	}
   175  
   176  	return &status, nil
   177  }
   178  
   179  func (p *dns) DeleteBulkZones(ctx context.Context, zoneslist *ZoneNameListResponse, bypassSafetyChecks ...bool) (*BulkZonesResponse, error) {
   180  
   181  	logger := p.Log(ctx)
   182  	logger.Debug("DeleteBulkZones")
   183  
   184  	bulkzonesURL := "/config-dns/v2/zones/delete-requests"
   185  	if len(bypassSafetyChecks) > 0 {
   186  		bulkzonesURL += fmt.Sprintf("?bypassSafetyChecks=%t", bypassSafetyChecks[0])
   187  	}
   188  
   189  	var status BulkZonesResponse
   190  
   191  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, bulkzonesURL, nil)
   192  	if err != nil {
   193  		return nil, fmt.Errorf("failed to create DeleteBulkZones request: %w", err)
   194  	}
   195  
   196  	resp, err := p.Exec(req, &status, zoneslist)
   197  	if err != nil {
   198  		return nil, fmt.Errorf("DeleteBulkZones request failed: %w", err)
   199  	}
   200  
   201  	if resp.StatusCode != http.StatusCreated {
   202  		return nil, p.Error(resp)
   203  	}
   204  
   205  	return &status, nil
   206  }