sd.ApiId = &apiName
}
-func (sd *ServiceAPIDescription) RegisterKong(kongDomain string, kongProtocol string, kongIPv4 common29122.Ipv4Addr, kongDataPlanePort common29122.Port, kongControlPlanePort common29122.Port) (int, error) {
+func (sd *ServiceAPIDescription) RegisterKong(kongDomain string,
+ kongProtocol string,
+ kongIPv4 common29122.Ipv4Addr,
+ kongDataPlanePort common29122.Port,
+ kongControlPlanePort common29122.Port,
+ apfId string) (int, error) {
+
log.Trace("entering RegisterKong")
var (
statusCode int
)
kongControlPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongIPv4, kongControlPlanePort)
- statusCode, err = sd.createKongRoutes(kongControlPlaneURL)
+ statusCode, err = sd.createKongRoutes(kongControlPlaneURL, apfId)
if (err != nil) || (statusCode != http.StatusCreated) {
return statusCode, err
}
return statusCode, nil
}
-func (sd *ServiceAPIDescription) createKongRoutes(kongControlPlaneURL string) (int, error) {
+func (sd *ServiceAPIDescription) createKongRoutes(kongControlPlaneURL string, apfId string) (int, error) {
log.Trace("entering createKongRoutes")
var (
statusCode int
for _, version := range profile.Versions {
log.Debugf("createKongRoutes, apiVersion \"%s\"", version.ApiVersion)
for _, resource := range *version.Resources {
- statusCode, err = sd.createKongRoute(kongControlPlaneURL, client, resource, profile.AefId, version.ApiVersion)
+ statusCode, err = sd.createKongRoute(kongControlPlaneURL, client, resource, apfId, profile.AefId, version.ApiVersion)
if (err != nil) || (statusCode != http.StatusCreated) {
return statusCode, err
}
return statusCode, nil
}
-func (sd *ServiceAPIDescription) createKongRoute(kongControlPlaneURL string, client *resty.Client, resource Resource, aefId string, apiVersion string) (int, error) {
+func (sd *ServiceAPIDescription) createKongRoute(
+ kongControlPlaneURL string,
+ client *resty.Client,
+ resource Resource,
+ apfId string,
+ aefId string,
+ apiVersion string ) (int, error) {
log.Trace("entering createKongRoute")
- uri := resource.Uri
- if apiVersion != "" {
- if apiVersion[0] != '/' {
- apiVersion = "/" + apiVersion
- }
- if apiVersion[len(apiVersion)-1] != '/' && resource.Uri[0] != '/' {
- apiVersion = apiVersion + "/"
- }
- uri = apiVersion + resource.Uri
- }
+ resourceName := resource.ResourceName
+ apiId := *sd.ApiId
- log.Debugf("createKongRoute, uri %s", uri)
+ tags := buildTags(apfId, aefId, apiId, apiVersion, resourceName)
+ log.Debugf("createKongRoute, tags %s", tags)
+
+ serviceName := apiId + "_" + resourceName
+ routeName := serviceName
- serviceName := *sd.ApiId + "_" + resource.ResourceName
log.Debugf("createKongRoute, serviceName %s", serviceName)
+ log.Debugf("createKongRoute, routeName %s", routeName)
log.Debugf("createKongRoute, aefId %s", aefId)
- statusCode, err := sd.createKongService(kongControlPlaneURL, serviceName, uri, aefId)
+ uri := buildUriWithVersion(apiVersion, resource.Uri)
+ log.Debugf("createKongRoute, uri %s", uri)
+
+ statusCode, err := sd.createKongService(kongControlPlaneURL, serviceName, uri, tags)
if (err != nil) || (statusCode != http.StatusCreated) {
return statusCode, err
}
- routeName := serviceName
kongRoutesURL := kongControlPlaneURL + "/services/" + serviceName + "/routes"
// Define the route information for Kong
"name": routeName,
"paths": []string{uri},
"methods": resource.Operations,
- "tags": []string{aefId},
+ "tags": tags,
"strip_path": true,
}
return resp.StatusCode(), nil
}
-func (sd *ServiceAPIDescription) createKongService(kongControlPlaneURL string, kongServiceName string, kongServiceUri string, aefId string) (int, error) {
+func buildUriWithVersion(apiVersion string, uri string) string {
+ if apiVersion != "" {
+ if apiVersion[0] != '/' {
+ apiVersion = "/" + apiVersion
+ }
+ if apiVersion[len(apiVersion)-1] != '/' && uri[0] != '/' {
+ apiVersion = apiVersion + "/"
+ }
+ uri = apiVersion + uri
+ }
+ return uri
+}
+
+func buildTags(apfId string, aefId string, apiId string, apiVersion string, resourceName string) []string {
+ tagsMap := map[string]string{
+ "apfId": apfId,
+ "aefId": aefId,
+ "apiId": apiId,
+ "apiVersion": apiVersion,
+ "resourceName": resourceName,
+ }
+
+ // Convert the map to a slice of strings
+ var tagsSlice []string
+ for key, value := range tagsMap {
+ str := fmt.Sprintf("%s: %s", key, value)
+ tagsSlice = append(tagsSlice, str)
+ }
+
+ return tagsSlice
+}
+
+func (sd *ServiceAPIDescription) createKongService(kongControlPlaneURL string, kongServiceName string, kongServiceUri string, tags []string) (int, error) {
log.Tracef("entering createKongService")
log.Tracef("createKongService, kongServiceName %s", kongServiceName)
"port": firstAEFProfilePort,
"protocol": kongControlPlaneURLParsed.Scheme,
"path": kongServiceUri,
- "tags": []string{aefId},
+ "tags": tags,
}
// Kong admin API endpoint for creating a service