github.com/akamai/AkamaiOPEN-edgegrid-golang@v1.2.2/configgtm-v1_5/geomap.go (about) 1 package configgtm 2 3 import ( 4 "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" 5 6 "fmt" 7 ) 8 9 // 10 // Handle Operations on gtm geomaps 11 // Based on 1.5 schema 12 // 13 14 // GeoAssigment represents a GTM geo assignment element 15 type GeoAssignment struct { 16 DatacenterBase 17 Countries []string `json:"countries"` 18 } 19 20 // GeoMap represents a GTM GeoMap 21 type GeoMap struct { 22 DefaultDatacenter *DatacenterBase `json:"defaultDatacenter"` 23 Assignments []*GeoAssignment `json:"assignments,omitempty"` 24 Name string `json:"name"` 25 Links []*Link `json:"links,omitempty"` 26 } 27 28 // GeoMapList represents the returned GTM GeoMap List body 29 type GeoMapList struct { 30 GeoMapItems []*GeoMap `json:"items"` 31 } 32 33 // NewGeoMap creates a new GeoMap object 34 func NewGeoMap(name string) *GeoMap { 35 geomap := &GeoMap{Name: name} 36 return geomap 37 } 38 39 // ListGeoMap retreieves all GeoMaps 40 func ListGeoMaps(domainName string) ([]*GeoMap, error) { 41 geos := &GeoMapList{} 42 req, err := client.NewRequest( 43 Config, 44 "GET", 45 fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps", domainName), 46 nil, 47 ) 48 if err != nil { 49 return nil, err 50 } 51 52 setVersionHeader(req, schemaVersion) 53 54 printHttpRequest(req, true) 55 56 res, err := client.Do(Config, req) 57 if err != nil { 58 return nil, err 59 } 60 61 printHttpResponse(res, true) 62 63 if client.IsError(res) && res.StatusCode != 404 { 64 return nil, client.NewAPIError(res) 65 } else if res.StatusCode == 404 { 66 return nil, CommonError{entityName: "geoMap"} 67 } 68 err = client.BodyJSON(res, geos) 69 if err != nil { 70 return nil, err 71 } 72 73 return geos.GeoMapItems, nil 74 75 } 76 77 // GetGeoMap retrieves a GeoMap with the given name. 78 func GetGeoMap(name, domainName string) (*GeoMap, error) { 79 geo := NewGeoMap(name) 80 81 req, err := client.NewRequest( 82 Config, 83 "GET", 84 fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, name), 85 nil, 86 ) 87 if err != nil { 88 return nil, err 89 } 90 91 setVersionHeader(req, schemaVersion) 92 93 printHttpRequest(req, true) 94 95 res, err := client.Do(Config, req) 96 if err != nil { 97 return nil, err 98 } 99 100 printHttpResponse(res, true) 101 102 if client.IsError(res) && res.StatusCode != 404 { 103 return nil, client.NewAPIError(res) 104 } else if res.StatusCode == 404 { 105 return nil, CommonError{entityName: "GeographicMap", name: name} 106 } else { 107 err = client.BodyJSON(res, geo) 108 if err != nil { 109 return nil, err 110 } 111 112 return geo, nil 113 } 114 } 115 116 // Instantiate new Assignment struct 117 func (geo *GeoMap) NewAssignment(dcID int, nickname string) *GeoAssignment { 118 geoAssign := &GeoAssignment{} 119 geoAssign.DatacenterId = dcID 120 geoAssign.Nickname = nickname 121 122 return geoAssign 123 124 } 125 126 // Instantiate new Default Datacenter Struct 127 func (geo *GeoMap) NewDefaultDatacenter(dcID int) *DatacenterBase { 128 return &DatacenterBase{DatacenterId: dcID} 129 } 130 131 // Create GeoMap in provided domain 132 func (geo *GeoMap) Create(domainName string) (*GeoMapResponse, error) { 133 134 // Use common code. Any specific validation needed? 135 136 return geo.save(domainName) 137 138 } 139 140 // Update GeoMap in given domain 141 func (geo *GeoMap) Update(domainName string) (*ResponseStatus, error) { 142 143 // common code 144 145 stat, err := geo.save(domainName) 146 if err != nil { 147 return nil, err 148 } 149 return stat.Status, err 150 151 } 152 153 // Save GeoMap in given domain. Common path for Create and Update. 154 func (geo *GeoMap) save(domainName string) (*GeoMapResponse, error) { 155 156 req, err := client.NewJSONRequest( 157 Config, 158 "PUT", 159 fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, geo.Name), 160 geo, 161 ) 162 if err != nil { 163 return nil, err 164 } 165 166 setVersionHeader(req, schemaVersion) 167 168 printHttpRequest(req, true) 169 170 res, err := client.Do(Config, req) 171 172 // Network error 173 if err != nil { 174 return nil, CommonError{ 175 entityName: "geographicMap", 176 name: geo.Name, 177 httpErrorMessage: err.Error(), 178 err: err, 179 } 180 } 181 182 printHttpResponse(res, true) 183 184 // API error 185 if client.IsError(res) { 186 err := client.NewAPIError(res) 187 return nil, CommonError{entityName: "geographicMap", name: geo.Name, apiErrorMessage: err.Detail, err: err} 188 } 189 190 responseBody := &GeoMapResponse{} 191 // Unmarshall whole response body for updated entity and in case want status 192 err = client.BodyJSON(res, responseBody) 193 if err != nil { 194 return nil, err 195 } 196 197 return responseBody, nil 198 } 199 200 // Delete GeoMap method 201 func (geo *GeoMap) Delete(domainName string) (*ResponseStatus, error) { 202 203 req, err := client.NewRequest( 204 Config, 205 "DELETE", 206 fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, geo.Name), 207 nil, 208 ) 209 if err != nil { 210 return nil, err 211 } 212 213 setVersionHeader(req, schemaVersion) 214 215 printHttpRequest(req, true) 216 217 res, err := client.Do(Config, req) 218 if err != nil { 219 return nil, err 220 } 221 222 // Network error 223 if err != nil { 224 return nil, CommonError{ 225 entityName: "geographicMap", 226 name: geo.Name, 227 httpErrorMessage: err.Error(), 228 err: err, 229 } 230 } 231 232 printHttpResponse(res, true) 233 234 // API error 235 if client.IsError(res) { 236 err := client.NewAPIError(res) 237 return nil, CommonError{entityName: "geographicMap", name: geo.Name, apiErrorMessage: err.Detail, err: err} 238 } 239 240 responseBody := &ResponseBody{} 241 // Unmarshall whole response body in case want status 242 err = client.BodyJSON(res, responseBody) 243 if err != nil { 244 return nil, err 245 } 246 247 return responseBody.Status, nil 248 }