github.com/akamai/AkamaiOPEN-edgegrid-golang/v4@v4.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 (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 }