github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/gtm/cidrmap.go (about) 1 package gtm 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 ) 8 9 // CIDRMaps contains operations available on a CIDR map resource. 10 type CIDRMaps interface { 11 // ListCIDRMaps retrieves all CIDRMaps. 12 // 13 // See: https://techdocs.akamai.com/gtm/reference/get-cidr-maps 14 ListCIDRMaps(context.Context, string) ([]*CIDRMap, error) 15 // GetCIDRMap retrieves a CIDRMap with the given name. 16 // 17 // See: https://techdocs.akamai.com/gtm/reference/get-cidr-map 18 GetCIDRMap(context.Context, string, string) (*CIDRMap, error) 19 // CreateCIDRMap creates the datacenter identified by the receiver argument in the specified domain. 20 // 21 // See: https://techdocs.akamai.com/gtm/reference/put-cidr-map 22 CreateCIDRMap(context.Context, *CIDRMap, string) (*CIDRMapResponse, error) 23 // DeleteCIDRMap deletes the datacenter identified by the receiver argument from the domain specified. 24 // 25 // See: https://techdocs.akamai.com/gtm/reference/delete-cidr-maps 26 DeleteCIDRMap(context.Context, *CIDRMap, string) (*ResponseStatus, error) 27 // UpdateCIDRMap updates the datacenter identified in the receiver argument in the provided domain. 28 // 29 // See: https://techdocs.akamai.com/gtm/reference/put-cidr-map 30 UpdateCIDRMap(context.Context, *CIDRMap, string) (*ResponseStatus, error) 31 } 32 33 // CIDRAssignment represents a GTM CIDR assignment element 34 type CIDRAssignment struct { 35 DatacenterBase 36 Blocks []string `json:"blocks"` 37 } 38 39 // CIDRMap represents a GTM CIDRMap element 40 type CIDRMap struct { 41 DefaultDatacenter *DatacenterBase `json:"defaultDatacenter"` 42 Assignments []*CIDRAssignment `json:"assignments,omitempty"` 43 Name string `json:"name"` 44 Links []*Link `json:"links,omitempty"` 45 } 46 47 // CIDRMapList represents a GTM returned CIDRMap list body 48 type CIDRMapList struct { 49 CIDRMapItems []*CIDRMap `json:"items"` 50 } 51 52 // Validate validates CIDRMap 53 func (c *CIDRMap) Validate() error { 54 if len(c.Name) < 1 { 55 return fmt.Errorf("CIDRMap is missing Name") 56 } 57 if c.DefaultDatacenter == nil { 58 return fmt.Errorf("CIDRMap is missing DefaultDatacenter") 59 } 60 61 return nil 62 } 63 64 func (g *gtm) ListCIDRMaps(ctx context.Context, domainName string) ([]*CIDRMap, error) { 65 logger := g.Log(ctx) 66 logger.Debug("ListCIDRMaps") 67 68 getURL := fmt.Sprintf("/config-gtm/v1/domains/%s/cidr-maps", domainName) 69 req, err := http.NewRequestWithContext(ctx, http.MethodGet, getURL, nil) 70 if err != nil { 71 return nil, fmt.Errorf("failed to create ListCIDRMaps request: %w", err) 72 } 73 setVersionHeader(req, schemaVersion) 74 75 var result CIDRMapList 76 resp, err := g.Exec(req, &result) 77 if err != nil { 78 return nil, fmt.Errorf("ListCIDRMaps request failed: %w", err) 79 } 80 81 if resp.StatusCode != http.StatusOK { 82 return nil, g.Error(resp) 83 } 84 85 return result.CIDRMapItems, nil 86 } 87 88 func (g *gtm) GetCIDRMap(ctx context.Context, mapName, domainName string) (*CIDRMap, error) { 89 logger := g.Log(ctx) 90 logger.Debug("GetCIDRMap") 91 92 getURL := fmt.Sprintf("/config-gtm/v1/domains/%s/cidr-maps/%s", domainName, mapName) 93 req, err := http.NewRequestWithContext(ctx, http.MethodGet, getURL, nil) 94 if err != nil { 95 return nil, fmt.Errorf("failed to create GetCIDRMap request: %w", err) 96 } 97 setVersionHeader(req, schemaVersion) 98 99 var result CIDRMap 100 resp, err := g.Exec(req, &result) 101 if err != nil { 102 return nil, fmt.Errorf("GetCIDRMap request failed: %w", err) 103 } 104 105 if resp.StatusCode != http.StatusOK { 106 return nil, g.Error(resp) 107 } 108 109 return &result, nil 110 } 111 112 func (g *gtm) CreateCIDRMap(ctx context.Context, cidr *CIDRMap, domainName string) (*CIDRMapResponse, error) { 113 logger := g.Log(ctx) 114 logger.Debug("CreateCIDRMap") 115 116 return cidr.save(ctx, g, domainName) 117 } 118 119 func (g *gtm) UpdateCIDRMap(ctx context.Context, cidr *CIDRMap, domainName string) (*ResponseStatus, error) { 120 logger := g.Log(ctx) 121 logger.Debug("UpdateCIDRMap") 122 123 stat, err := cidr.save(ctx, g, domainName) 124 if err != nil { 125 return nil, err 126 } 127 return stat.Status, err 128 } 129 130 // Save CIDRMap in given domain. Common path for Create and Update. 131 func (c *CIDRMap) save(ctx context.Context, g *gtm, domainName string) (*CIDRMapResponse, error) { 132 133 if err := c.Validate(); err != nil { 134 return nil, fmt.Errorf("CIDRMap validation failed. %w", err) 135 } 136 137 putURL := fmt.Sprintf("/config-gtm/v1/domains/%s/cidr-maps/%s", domainName, c.Name) 138 req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil) 139 if err != nil { 140 return nil, fmt.Errorf("failed to create CIDRMap request: %w", err) 141 } 142 setVersionHeader(req, schemaVersion) 143 144 var result CIDRMapResponse 145 resp, err := g.Exec(req, &result, c) 146 if err != nil { 147 return nil, fmt.Errorf("CIDRMap request failed: %w", err) 148 } 149 150 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 151 return nil, g.Error(resp) 152 } 153 154 return &result, nil 155 } 156 157 func (g *gtm) DeleteCIDRMap(ctx context.Context, cidr *CIDRMap, domainName string) (*ResponseStatus, error) { 158 logger := g.Log(ctx) 159 logger.Debug("DeleteCIDRMap") 160 161 if err := cidr.Validate(); err != nil { 162 return nil, fmt.Errorf("CIDRMap validation failed. %w", err) 163 } 164 165 delURL := fmt.Sprintf("/config-gtm/v1/domains/%s/cidr-maps/%s", domainName, cidr.Name) 166 req, err := http.NewRequestWithContext(ctx, http.MethodDelete, delURL, nil) 167 if err != nil { 168 return nil, fmt.Errorf("failed to create Delete request: %w", err) 169 } 170 setVersionHeader(req, schemaVersion) 171 172 var result ResponseBody 173 resp, err := g.Exec(req, &result) 174 if err != nil { 175 return nil, fmt.Errorf("CIDRMap request failed: %w", err) 176 } 177 178 if resp.StatusCode != http.StatusOK { 179 return nil, g.Error(resp) 180 } 181 182 return result.Status, nil 183 }