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  }