github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/cse/csev2/serviceendpoints.go (about)

     1  package csev2
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/IBM-Cloud/bluemix-go/client"
     8  )
     9  
    10  type SeCreateData struct {
    11  	ServiceName      string   `json:"service"`
    12  	CustomerName     string   `json:"customer"`
    13  	ServiceAddresses []string `json:"serviceAddresses"`
    14  	EstadoProto      string   `json:"estadoProto,omitempty"`
    15  	EstadoPort       int      `json:"estadoPort,omitempty"`
    16  	EstadoPath       string   `json:"estadoPath,omitempty"`
    17  	TCPPorts         []int    `json:"tcpports"`
    18  	UDPPorts         []int    `json:"udpports,omitempty"`
    19  	TCPRange         string   `json:"tcpportrange,omitempty"`
    20  	UDPRange         string   `json:"udpportrange,omitempty"`
    21  	Region           string   `json:"region"`
    22  	DataCenters      []string `json:"dataCenters"`
    23  	ACL              []string `json:"acl,omitempty"`
    24  	MaxSpeed         string   `json:"maxSpeed"`
    25  	Dedicated        int      `json:"dedicated,omitempty"`
    26  	MultiTenant      int      `json:"multitenant,omitempty"`
    27  }
    28  
    29  type SeUpdateData struct {
    30  	ServiceAddresses []string `json:"serviceAddresses"`
    31  	EstadoProto      string   `json:"estadoProto"`
    32  	EstadoPort       int      `json:"estadoPort"`
    33  	EstadoPath       string   `json:"estadoPath"`
    34  	TCPPorts         []int    `json:"tcpports"`
    35  	UDPPorts         []int    `json:"udpports"`
    36  	TCPRange         string   `json:"tcpportrange"`
    37  	UDPRange         string   `json:"udpportrange"`
    38  	DataCenters      []string `json:"dataCenters"`
    39  	ACL              []string `json:"acl"`
    40  }
    41  
    42  type SePatchData struct {
    43  	SeUpdateData
    44  	Action string `json:"action"`
    45  }
    46  
    47  type ServiceCSE struct {
    48  	SeCreateData
    49  	Srvid string `json:"srvid"`
    50  	URL   string `json:"url"`
    51  }
    52  
    53  type ServiceEndpoint struct {
    54  	Seid          string `json:"seid"`
    55  	StaticAddress string `json:"staticAddress"`
    56  	Netmask       string `json:"netmask"`
    57  	DNSStatus     string `json:"dnsStatus"`
    58  	DataCenter    string `json:"dataCenter"`
    59  	Status        string `json:"status"`
    60  }
    61  
    62  type ServiceObject struct {
    63  	Service   ServiceCSE        `json:"service"`
    64  	Endpoints []ServiceEndpoint `json:"endpoints"`
    65  }
    66  
    67  type ServiceEndpoints interface {
    68  	GetServiceEndpoint(srvID string) (*ServiceObject, error)
    69  	GetServiceEndpoints() (*[]ServiceObject, error)
    70  	CreateServiceEndpoint(payload SeCreateData) (string, error)
    71  	UpdateServiceEndpoint(srvID string, payload SeUpdateData) error
    72  	PatchServiceEndpoint(srvID string, payload SePatchData) error
    73  	DeleteServiceEndpoint(srvID string) error
    74  }
    75  
    76  type serviceendpoints struct {
    77  	client *client.Client
    78  }
    79  
    80  func newServiceEndpointsAPI(c *client.Client) ServiceEndpoints {
    81  	return &serviceendpoints{
    82  		client: c,
    83  	}
    84  }
    85  
    86  func (r *serviceendpoints) GetServiceEndpoint(srvID string) (*ServiceObject, error) {
    87  	if len(srvID) == 0 {
    88  		return nil, errors.New("empty srvID")
    89  	}
    90  
    91  	srvObj := ServiceObject{}
    92  	rawURL := fmt.Sprintf("/v2/serviceendpoint/%s", srvID)
    93  	_, err := r.client.Get(rawURL, &srvObj, nil)
    94  	if err != nil {
    95  		return nil, err
    96  	}
    97  
    98  	return &srvObj, nil
    99  }
   100  
   101  func (r *serviceendpoints) GetServiceEndpoints() (*[]ServiceObject, error) {
   102  	srvObj := []ServiceObject{}
   103  	rawURL := "/v2/serviceendpoints"
   104  	_, err := r.client.Get(rawURL, &srvObj, nil)
   105  	if err != nil {
   106  		return nil, err
   107  	}
   108  
   109  	return &srvObj, nil
   110  }
   111  
   112  func (r *serviceendpoints) DeleteServiceEndpoint(srvID string) error {
   113  	if len(srvID) == 0 {
   114  		return errors.New("empty srvID")
   115  	}
   116  
   117  	rawURL := fmt.Sprintf("/v2/serviceendpoint/%s", srvID)
   118  	_, err := r.client.Delete(rawURL)
   119  	if err != nil {
   120  		return err
   121  	}
   122  
   123  	return nil
   124  }
   125  
   126  func (r *serviceendpoints) CreateServiceEndpoint(payload SeCreateData) (string, error) {
   127  	rawURL := "/v2/serviceendpoint"
   128  	result := make(map[string]interface{})
   129  	_, err := r.client.Post(rawURL, &payload, &result)
   130  	if err != nil {
   131  		return "", err
   132  	}
   133  
   134  	return result["serviceid"].(string), nil
   135  }
   136  
   137  // The data of servcieendpoint will be replace with that in SeUpdata
   138  func (r *serviceendpoints) UpdateServiceEndpoint(srvID string, payload SeUpdateData) error {
   139  	if len(srvID) == 0 {
   140  		return errors.New("empty srvID")
   141  	}
   142  
   143  	rawURL := fmt.Sprintf("/v2/serviceendpointtf/%s", srvID)
   144  	result := make(map[string]interface{})
   145  	_, err := r.client.Put(rawURL, &payload, &result)
   146  	if err != nil {
   147  		return err
   148  	}
   149  
   150  	return nil
   151  }
   152  
   153  // The data of servcieendpoint will be patched with that in SePatchdata
   154  func (r *serviceendpoints) PatchServiceEndpoint(srvID string, payload SePatchData) error {
   155  	if len(srvID) == 0 {
   156  		return errors.New("empty srvID")
   157  	}
   158  
   159  	rawURL := fmt.Sprintf("/v2/serviceendpoint/%s", srvID)
   160  	result := make(map[string]interface{})
   161  	_, err := r.client.Patch(rawURL, &payload, &result)
   162  	if err != nil {
   163  		return err
   164  	}
   165  
   166  	return nil
   167  }