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