github.com/akamai/AkamaiOPEN-edgegrid-golang@v1.2.2/configgtm-v1_5/asmap.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 asmaps 11 // Based on 1.5 schema 12 // 13 14 // AsAssignment represents a GTM asmap assignment structure 15 type AsAssignment struct { 16 DatacenterBase 17 AsNumbers []int64 `json:"asNumbers"` 18 } 19 20 // AsMap represents a GTM AsMap 21 type AsMap struct { 22 DefaultDatacenter *DatacenterBase `json:"defaultDatacenter"` 23 Assignments []*AsAssignment `json:"assignments,omitempty"` 24 Name string `json:"name"` 25 Links []*Link `json:"links,omitempty"` 26 } 27 28 // NewAsMap creates a new asMap 29 func NewAsMap(name string) *AsMap { 30 asmap := &AsMap{Name: name} 31 return asmap 32 } 33 34 // GetAsMap retrieves a asMap with the given name. 35 func GetAsMap(name, domainName string) (*AsMap, error) { 36 as := NewAsMap(name) 37 req, err := client.NewRequest( 38 Config, 39 "GET", 40 fmt.Sprintf("/config-gtm/v1/domains/%s/as-maps/%s", domainName, name), 41 nil, 42 ) 43 if err != nil { 44 return nil, err 45 } 46 47 setVersionHeader(req, schemaVersion) 48 49 printHttpRequest(req, true) 50 51 res, err := client.Do(Config, req) 52 if err != nil { 53 return nil, err 54 } 55 56 printHttpResponse(res, true) 57 58 if client.IsError(res) && res.StatusCode != 404 { 59 return nil, client.NewAPIError(res) 60 } else if res.StatusCode == 404 { 61 return nil, CommonError{entityName: "asMap", name: name} 62 } else { 63 err = client.BodyJSON(res, as) 64 if err != nil { 65 return nil, err 66 } 67 68 return as, nil 69 } 70 } 71 72 // Instantiate new Assignment struct 73 func (as *AsMap) NewAssignment(dcID int, nickname string) *AsAssignment { 74 asAssign := &AsAssignment{} 75 asAssign.DatacenterId = dcID 76 asAssign.Nickname = nickname 77 78 return asAssign 79 80 } 81 82 // Instantiate new Default Datacenter Struct 83 func (as *AsMap) NewDefaultDatacenter(dcID int) *DatacenterBase { 84 return &DatacenterBase{DatacenterId: dcID} 85 } 86 87 // Create asMap in provided domain 88 func (as *AsMap) Create(domainName string) (*AsMapResponse, error) { 89 90 // Use common code. Any specific validation needed? 91 92 return as.save(domainName) 93 94 } 95 96 // Update AsMap in given domain 97 func (as *AsMap) Update(domainName string) (*ResponseStatus, error) { 98 99 // common code 100 101 stat, err := as.save(domainName) 102 if err != nil { 103 return nil, err 104 } 105 return stat.Status, err 106 107 } 108 109 // Save AsMap in given domain. Common path for Create and Update. 110 func (as *AsMap) save(domainName string) (*AsMapResponse, error) { 111 112 req, err := client.NewJSONRequest( 113 Config, 114 "PUT", 115 fmt.Sprintf("/config-gtm/v1/domains/%s/as-maps/%s", domainName, as.Name), 116 as, 117 ) 118 if err != nil { 119 return nil, err 120 } 121 122 setVersionHeader(req, schemaVersion) 123 124 printHttpRequest(req, true) 125 126 res, err := client.Do(Config, req) 127 128 // Network error 129 if err != nil { 130 return nil, CommonError{ 131 entityName: "asMap", 132 name: as.Name, 133 httpErrorMessage: err.Error(), 134 err: err, 135 } 136 } 137 138 printHttpResponse(res, true) 139 140 // API error 141 if client.IsError(res) { 142 err := client.NewAPIError(res) 143 return nil, CommonError{entityName: "asMap", name: as.Name, apiErrorMessage: err.Detail, err: err} 144 } 145 146 responseBody := &AsMapResponse{} 147 // Unmarshall whole response body for updated entity and in case want status 148 err = client.BodyJSON(res, responseBody) 149 if err != nil { 150 return nil, err 151 } 152 153 return responseBody, nil 154 } 155 156 // Delete AsMap method 157 func (as *AsMap) Delete(domainName string) (*ResponseStatus, error) { 158 159 req, err := client.NewRequest( 160 Config, 161 "DELETE", 162 fmt.Sprintf("/config-gtm/v1/domains/%s/as-maps/%s", domainName, as.Name), 163 nil, 164 ) 165 if err != nil { 166 return nil, err 167 } 168 169 setVersionHeader(req, schemaVersion) 170 171 printHttpRequest(req, true) 172 173 res, err := client.Do(Config, req) 174 if err != nil { 175 return nil, err 176 } 177 178 // Network error 179 if err != nil { 180 return nil, CommonError{ 181 entityName: "asMap", 182 name: as.Name, 183 httpErrorMessage: err.Error(), 184 err: err, 185 } 186 } 187 188 printHttpResponse(res, true) 189 190 // API error 191 if client.IsError(res) { 192 err := client.NewAPIError(res) 193 return nil, CommonError{entityName: "asMap", name: as.Name, apiErrorMessage: err.Detail, err: err} 194 } 195 196 responseBody := &ResponseBody{} 197 // Unmarshall whole response body in case want status 198 err = client.BodyJSON(res, responseBody) 199 if err != nil { 200 return nil, err 201 } 202 203 return responseBody.Status, nil 204 }