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 }