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 }