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  }