Commit e801b4d0 authored by Muhammad Umair Khan's avatar Muhammad Umair Khan
Browse files

meep-app-enablement: add EDGE-1/EDGE-4 and EDGE-3 interfaces and unified registry

Introduce the 3GPP EDGEAPP interfaces on every MEP next to Mp1, as separate
APIs of meep-app-enablement, and a registry facade shared by the MEC 011 and
EDGE services. All EDGE operations are routed and answer 501 ProblemDetails;
their logic follows in the next steps.

Introduced
- server/edge-1: EDGE-1 (EEC to EES) and EDGE-4 (EEC to ECS) per 3GPP
  TS 24.558 V19.5.0: Eecs_ServiceProvisioning, Eees_EECRegistration,
  Eees_EASDiscovery (shared with EDGE-3), plus a GET on an individual EEC
  registration as sandbox extension. 15 routes.
- server/edge-3: EDGE-3 (EAS to EES) per 3GPP TS 29.558 V19.7.0:
  Eees_EASRegistration. 5 routes.
- Hand-written models for the polymorphic 3GPP types GeographicArea,
  LocalArea and VelocityEstimate; optional scalars of generated models are
  pointers so explicit 0/false survive re-encoding.
- server/registry: unified registry facade over app instances
  (app:<id>:info), MEC 011 registrations (appInfo:<id>) and a dedicated
  EDGE namespace (edge:<kind>:<id>); app instance create/delete through the
  application store and MQ, as done by meep-sandbox-ctrl.
- api/edge-1, api/edge-3: service-served OpenAPI specifications.
- go-packages/meep-edge1-client, meep-edge3-client: generated Go clients.
- tools/3gpp-specs/REL-19: pinned 3GPP Rel-19 OpenAPI files (5G_APIs
  REL-19 @ e4979d6e) with SHA256SUMS and provenance README.
- tools/edgeapp-specs: reproducible spec and stub generation
  (build_specs.py, generate_stubs.py), 3GPP traceability check,
  codegen verification, lint configuration, CHANGES.md, TRACEABILITY.md.
- Unit tests: EDGE routes, model round-trips, registry facade.

Changed
- app-support, service-mgmt, capif-mgmt: duplicated app instance and
  registration helpers now delegate to the registry facade; error texts and
  ProblemDetails responses are unchanged.
- routers.go, app-enablement.go: register EDGE routes and start the EDGE
  services. The EDGE-1 handlers take over POST
  /eecs-serviceprovisioning/v1/request and POST
  /eees-easdiscovery/v1/eas-profiles/request-discovery; the legacy
  /eees-eecregistration/v1/registration routes are kept for now.
- meep-app-enablement chart: ingress path and rewrite for
  /eees-easregistration.
- permissions-secure.yaml: permission blocks for the four EDGE APIs.

Other
- meepctl deploy: pass MEEP_AUTH_ENABLED unquoted; meep-virt-engine failed
  to parse the quoted value, so sandbox ingresses never got auth-url.
- meepctl deploy: point nginx auth_request at the auth-svc in-cluster DNS
  name instead of resolving its ClusterIP.
- meepctl pull progress: a pull that succeeds after a kubelet retry is no
  longer reported as failed.
- meep-tilt: multi-stage image with pinned, SHA256-verified kubectl, helm
  and tilt and the Docker CLI with buildx.
parent 436f150d
Loading
Loading
Loading
Loading
+4 −0
Changes for charts/mec-services/meep-app-enablement/values-template.yaml: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ ingress:
        - /{{.SandboxName}}/{{.LocationName}}/eecs-serviceprovisioning
        - /{{.SandboxName}}/{{.LocationName}}/eees-eecregistration
        - /{{.SandboxName}}/{{.LocationName}}/eees-easdiscovery
        - /{{.SandboxName}}/{{.LocationName}}/eees-easregistration
        
        {{- else }}
        - /{{.SandboxName}}/mec_app_support
@@ -62,6 +63,7 @@ ingress:
        - /{{.SandboxName}}/eecs-serviceprovisioning
        - /{{.SandboxName}}/eees-eecregistration
        - /{{.SandboxName}}/eees-easdiscovery
        - /{{.SandboxName}}/eees-easregistration
        {{- end }}
  annotations:
    kubernetes.io/ingress.class: nginx
@@ -76,6 +78,7 @@ ingress:
      rewrite ^/{{ .SandboxName }}/{{.LocationName}}/eecs-serviceprovisioning(/|$)(.*)$ /eecs-serviceprovisioning/$2 break;
      rewrite ^/{{ .SandboxName }}/{{.LocationName}}/eees-eecregistration(/|$)(.*)$ /eees-eecregistration/$2 break;
      rewrite ^/{{ .SandboxName }}/{{.LocationName}}/eees-easdiscovery(/|$)(.*)$ /eees-easdiscovery/$2 break;
      rewrite ^/{{ .SandboxName }}/{{.LocationName}}/eees-easregistration(/|$)(.*)$ /eees-easregistration/$2 break;
    {{- else }}
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/{{ .SandboxName }}/mec_app_support(/|$)(.*)$ /mec_app_support/$2 break;
@@ -86,6 +89,7 @@ ingress:
      rewrite ^/{{ .SandboxName }}/eecs-serviceprovisioning(/|$)(.*)$ /eecs-serviceprovisioning/$2 break;
      rewrite ^/{{ .SandboxName }}/eees-eecregistration(/|$)(.*)$ /eees-eecregistration/$2 break;
      rewrite ^/{{ .SandboxName }}/eees-easdiscovery(/|$)(.*)$ /eees-easdiscovery/$2 break;
      rewrite ^/{{ .SandboxName }}/eees-easregistration(/|$)(.*)$ /eees-easregistration/$2 break;
    {{- end }}
    {{- if .AuthEnabled }}
    nginx.ingress.kubernetes.io/auth-url: {{ if .HttpsOnly }}https{{ else }}http{{ end }}://$http_host/auth/v1/authenticate?svc=meep-app-enablement&sbox={{.SandboxName}}&mep={{.LocationName}}
+48 −0
Changes for config/permissions-secure.yaml: 48 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -177,6 +177,54 @@ services:
        admin: 'allow'
        user: 'allow'
  #------------------------------
  #  EDGE-4 Service Provisioning (Sbox)
  #------------------------------
  - name: 'meep-app-enablement'
    api: 'eecs-serviceprovisioning'
    path: '/eecs-serviceprovisioning/v1'
    sbox: true
    default:
      mode: 'verify'
      roles:
        admin: 'allow'
        user: 'allow'
  #------------------------------
  #  EDGE-1 EEC Registration (Sbox)
  #------------------------------
  - name: 'meep-app-enablement'
    api: 'eees-eecregistration'
    path: '/eees-eecregistration/v1'
    sbox: true
    default:
      mode: 'verify'
      roles:
        admin: 'allow'
        user: 'allow'
  #------------------------------
  #  EDGE-1 / EDGE-3 EAS Discovery (Sbox)
  #------------------------------
  - name: 'meep-app-enablement'
    api: 'eees-easdiscovery'
    path: '/eees-easdiscovery/v1'
    sbox: true
    default:
      mode: 'verify'
      roles:
        admin: 'allow'
        user: 'allow'
  #------------------------------
  #  EDGE-3 EAS Registration (Sbox)
  #------------------------------
  - name: 'meep-app-enablement'
    api: 'eees-easregistration'
    path: '/eees-easregistration/v1'
    sbox: true
    default:
      mode: 'verify'
      roles:
        admin: 'allow'
        user: 'allow'
  #------------------------------
  #  GIS Engine (Sbox)
  #------------------------------
  - name: 'meep-gis-engine'
+3909 −0

File added.

Preview size limit exceeded, changes collapsed.

+3162 −0

File added.

Preview size limit exceeded, changes collapsed.

+28 −0
Changes for go-apps/meep-app-enablement/server/app-enablement.go: 28 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import (

	as "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-app-enablement/server/app-support"
	cm "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-app-enablement/server/capif-mgmt"
	edge1 "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-app-enablement/server/edge-1"
	edge3 "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-app-enablement/server/edge-3"
	sm "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-app-enablement/server/service-mgmt"
	httpLog "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-http-logger"
	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
@@ -139,6 +141,20 @@ func Init() (err error) {
	}
	log.Info("App Support created")

	// Initialize EDGE-1 / EDGE-4 (3GPP TS 24.558)
	err = edge1.Init(sandboxName, mepName, hostUrl, mqLocal, redisAddr, &mutex)
	if err != nil {
		return err
	}
	log.Info("EDGE-1 created")

	// Initialize EDGE-3 (3GPP TS 29.558)
	err = edge3.Init(sandboxName, mepName, hostUrl, mqLocal, redisAddr, &mutex)
	if err != nil {
		return err
	}
	log.Info("EDGE-3 created")

	return nil
}

@@ -161,6 +177,16 @@ func Run() (err error) {
		return err
	}

	err = edge1.Run()
	if err != nil {
		return err
	}

	err = edge3.Run()
	if err != nil {
		return err
	}

	// Start Swagger API Manager (provider)
	err = apiMgr.Start(true, false)
	if err != nil {
@@ -203,6 +229,8 @@ func Stop() {
	_ = sm.Stop()
	_ = cm.Stop()
	_ = as.Stop()
	_ = edge1.Stop()
	_ = edge3.Stop()

	// Remove APIs
	if apiMgr != nil {
Loading