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 }