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