github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.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 (d *dns) GetBulkZoneCreateStatus(ctx context.Context, requestID string) (*BulkStatusResponse, error) {
    51  	logger := d.Log(ctx)
    52  	logger.Debug("GetBulkZoneCreateStatus")
    53  
    54  	bulkZonesURL := fmt.Sprintf("/config-dns/v2/zones/create-requests/%s", requestID)
    55  
    56  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkZonesURL, nil)
    57  	if err != nil {
    58  		return nil, fmt.Errorf("failed to create GetBulkZoneCreateStatus request: %w", err)
    59  	}
    60  
    61  	var result BulkStatusResponse
    62  	resp, err := d.Exec(req, &result)
    63  	if err != nil {
    64  		return nil, fmt.Errorf("GetBulkZoneCreateStatus request failed: %w", err)
    65  	}
    66  
    67  	if resp.StatusCode != http.StatusOK {
    68  		return nil, d.Error(resp)
    69  	}
    70  
    71  	return &result, nil
    72  }
    73  
    74  func (d *dns) GetBulkZoneDeleteStatus(ctx context.Context, requestID string) (*BulkStatusResponse, error) {
    75  	logger := d.Log(ctx)
    76  	logger.Debug("GetBulkZoneDeleteStatus")
    77  
    78  	bulkZonesURL := fmt.Sprintf("/config-dns/v2/zones/delete-requests/%s", requestID)
    79  
    80  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkZonesURL, nil)
    81  	if err != nil {
    82  		return nil, fmt.Errorf("failed to create GetBulkZoneDeleteStatus request: %w", err)
    83  	}
    84  
    85  	var result BulkStatusResponse
    86  	resp, err := d.Exec(req, &result)
    87  	if err != nil {
    88  		return nil, fmt.Errorf("GetBulkZoneDeleteStatus request failed: %w", err)
    89  	}
    90  
    91  	if resp.StatusCode != http.StatusOK {
    92  		return nil, d.Error(resp)
    93  	}
    94  
    95  	return &result, nil
    96  }
    97  
    98  func (d *dns) GetBulkZoneCreateResult(ctx context.Context, requestID string) (*BulkCreateResultResponse, error) {
    99  	logger := d.Log(ctx)
   100  	logger.Debug("GetBulkZoneCreateResult")
   101  
   102  	bulkZonesURL := fmt.Sprintf("/config-dns/v2/zones/create-requests/%s/result", requestID)
   103  	var status BulkCreateResultResponse
   104  
   105  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkZonesURL, nil)
   106  	if err != nil {
   107  		return nil, fmt.Errorf("failed to create GetBulkZoneCreateResult request: %w", err)
   108  	}
   109  
   110  	resp, err := d.Exec(req, &status)
   111  	if err != nil {
   112  		return nil, fmt.Errorf("GetBulkZoneCreateResult request failed: %w", err)
   113  	}
   114  
   115  	if resp.StatusCode != http.StatusOK {
   116  		return nil, d.Error(resp)
   117  	}
   118  
   119  	return &status, nil
   120  }
   121  
   122  func (d *dns) GetBulkZoneDeleteResult(ctx context.Context, requestID string) (*BulkDeleteResultResponse, error) {
   123  	logger := d.Log(ctx)
   124  	logger.Debug("GetBulkZoneDeleteResult")
   125  
   126  	bulkZonesURL := fmt.Sprintf("/config-dns/v2/zones/delete-requests/%s/result", requestID)
   127  
   128  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, bulkZonesURL, nil)
   129  	if err != nil {
   130  		return nil, fmt.Errorf("failed to create GetBulkZoneDeleteResult request: %w", err)
   131  	}
   132  
   133  	var result BulkDeleteResultResponse
   134  	resp, err := d.Exec(req, &result)
   135  	if err != nil {
   136  		return nil, fmt.Errorf("GetBulkZoneDeleteResult request failed: %w", err)
   137  	}
   138  
   139  	if resp.StatusCode != http.StatusOK {
   140  		return nil, d.Error(resp)
   141  	}
   142  
   143  	return &result, nil
   144  }
   145  
   146  func (d *dns) CreateBulkZones(ctx context.Context, bulkZones *BulkZonesCreate, zoneQueryString ZoneQueryString) (*BulkZonesResponse, error) {
   147  	logger := d.Log(ctx)
   148  	logger.Debug("CreateBulkZones")
   149  
   150  	bulkZonesURL := "/config-dns/v2/zones/create-requests?contractId=" + zoneQueryString.Contract
   151  	if len(zoneQueryString.Group) > 0 {
   152  		bulkZonesURL += "&gid=" + zoneQueryString.Group
   153  	}
   154  
   155  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, bulkZonesURL, nil)
   156  	if err != nil {
   157  		return nil, fmt.Errorf("failed to create CreateBulkZones request: %w", err)
   158  	}
   159  
   160  	var result BulkZonesResponse
   161  	resp, err := d.Exec(req, &result, bulkZones)
   162  	if err != nil {
   163  		return nil, fmt.Errorf("CreateBulkZones request failed: %w", err)
   164  	}
   165  
   166  	if resp.StatusCode != http.StatusCreated {
   167  		return nil, d.Error(resp)
   168  	}
   169  
   170  	return &result, nil
   171  }
   172  
   173  func (d *dns) DeleteBulkZones(ctx context.Context, zonesList *ZoneNameListResponse, bypassSafetyChecks ...bool) (*BulkZonesResponse, error) {
   174  	logger := d.Log(ctx)
   175  	logger.Debug("DeleteBulkZones")
   176  
   177  	bulkZonesURL := "/config-dns/v2/zones/delete-requests"
   178  	if len(bypassSafetyChecks) > 0 {
   179  		bulkZonesURL += fmt.Sprintf("?bypassSafetyChecks=%t", bypassSafetyChecks[0])
   180  	}
   181  
   182  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, bulkZonesURL, nil)
   183  	if err != nil {
   184  		return nil, fmt.Errorf("failed to create DeleteBulkZones request: %w", err)
   185  	}
   186  
   187  	var result BulkZonesResponse
   188  	resp, err := d.Exec(req, &result, zonesList)
   189  	if err != nil {
   190  		return nil, fmt.Errorf("DeleteBulkZones request failed: %w", err)
   191  	}
   192  
   193  	if resp.StatusCode != http.StatusCreated {
   194  		return nil, d.Error(resp)
   195  	}
   196  
   197  	return &result, nil
   198  }