# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -20,9 +20,9 @@ metadata: ...@@ -20,9 +20,9 @@ metadata:
labels: labels:
app: contextservice app: contextservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -32,14 +32,14 @@ spec: ...@@ -32,14 +32,14 @@ spec:
app: contextservice # same as above app: contextservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -49,9 +49,9 @@ metadata: ...@@ -49,9 +49,9 @@ metadata:
labels: labels:
app: deviceservice app: deviceservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -61,14 +61,14 @@ spec: ...@@ -61,14 +61,14 @@ spec:
app: deviceservice # same as above app: deviceservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -78,9 +78,9 @@ metadata: ...@@ -78,9 +78,9 @@ metadata:
labels: labels:
app: serviceservice app: serviceservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -90,14 +90,14 @@ spec: ...@@ -90,14 +90,14 @@ spec:
app: serviceservice # same as above app: serviceservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -107,9 +107,9 @@ metadata: ...@@ -107,9 +107,9 @@ metadata:
labels: labels:
app: sliceservice app: sliceservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -119,14 +119,14 @@ spec: ...@@ -119,14 +119,14 @@ spec:
app: sliceservice # same as above app: sliceservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -136,9 +136,9 @@ metadata: ...@@ -136,9 +136,9 @@ metadata:
labels: labels:
app: pathcompservice app: pathcompservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -148,14 +148,14 @@ spec: ...@@ -148,14 +148,14 @@ spec:
app: pathcompservice # same as above app: pathcompservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -165,9 +165,9 @@ metadata: ...@@ -165,9 +165,9 @@ metadata:
labels: labels:
app: monitoringservice app: monitoringservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -177,14 +177,14 @@ spec: ...@@ -177,14 +177,14 @@ spec:
app: monitoringservice # same as above app: monitoringservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -194,9 +194,9 @@ metadata: ...@@ -194,9 +194,9 @@ metadata:
labels: labels:
app: dltservice app: dltservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -206,14 +206,14 @@ spec: ...@@ -206,14 +206,14 @@ spec:
app: dltservice # same as above app: dltservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -223,9 +223,9 @@ metadata: ...@@ -223,9 +223,9 @@ metadata:
labels: labels:
app: interdomainservice app: interdomainservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -235,14 +235,14 @@ spec: ...@@ -235,14 +235,14 @@ spec:
app: interdomainservice # same as above app: interdomainservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -252,9 +252,9 @@ metadata: ...@@ -252,9 +252,9 @@ metadata:
labels: labels:
app: policyservice app: policyservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -264,72 +264,72 @@ spec: ...@@ -264,72 +264,72 @@ spec:
app: policyservice # same as above app: policyservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /q/metrics # path to scrape path: /q/metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
metadata: metadata:
namespace: monitoring # namespace where prometheus is running namespace: monitoring # namespace where prometheus is running
name: tfs-automationservice-metric name: tfs-ztpservice-metric
labels: labels:
app: automationservice app: ztpservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
matchLabels: matchLabels:
# Target app service # Target app service
#namespace: tfs #namespace: tfs
app: automationservice # same as above app: ztpservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /q/metrics # path to scrape path: /q/metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
metadata: metadata:
namespace: monitoring # namespace where prometheus is running namespace: monitoring # namespace where prometheus is running
name: tfs-computeservice-metric name: tfs-nbiservice-metric
labels: labels:
app: computeservice app: nbiservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
matchLabels: matchLabels:
# Target app service # Target app service
#namespace: tfs #namespace: tfs
app: computeservice # same as above app: nbiservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -339,9 +339,9 @@ metadata: ...@@ -339,9 +339,9 @@ metadata:
labels: labels:
app: load-generatorservice app: load-generatorservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -351,14 +351,14 @@ spec: ...@@ -351,14 +351,14 @@ spec:
app: load-generatorservice # same as above app: load-generatorservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -368,9 +368,9 @@ metadata: ...@@ -368,9 +368,9 @@ metadata:
labels: labels:
app: dbscanservingservice app: dbscanservingservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -380,14 +380,14 @@ spec: ...@@ -380,14 +380,14 @@ spec:
app: dbscanservingservice # same as above app: dbscanservingservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -397,9 +397,9 @@ metadata: ...@@ -397,9 +397,9 @@ metadata:
labels: labels:
app: opticalattackmitigatorservice app: opticalattackmitigatorservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -409,14 +409,14 @@ spec: ...@@ -409,14 +409,14 @@ spec:
app: opticalattackmitigatorservice # same as above app: opticalattackmitigatorservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -426,9 +426,9 @@ metadata: ...@@ -426,9 +426,9 @@ metadata:
labels: labels:
app: opticalattackdetectorservice app: opticalattackdetectorservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -438,14 +438,14 @@ spec: ...@@ -438,14 +438,14 @@ spec:
app: opticalattackdetectorservice # same as above app: opticalattackdetectorservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
--- ---
apiVersion: monitoring.coreos.com/v1 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
...@@ -455,9 +455,9 @@ metadata: ...@@ -455,9 +455,9 @@ metadata:
labels: labels:
app: opticalattackmanagerservice app: opticalattackmanagerservice
#release: prometheus #release: prometheus
#release: prom # name of the release #release: prom # name of the release
# ( VERY IMPORTANT: You need to know the correct release name by viewing # ( VERY IMPORTANT: You need to know the correct release name by viewing
# the servicemonitor of Prometheus itself: Without the correct name, # the servicemonitor of Prometheus itself: Without the correct name,
# Prometheus cannot identify the metrics of the Flask app as the target.) # Prometheus cannot identify the metrics of the Flask app as the target.)
spec: spec:
selector: selector:
...@@ -467,11 +467,11 @@ spec: ...@@ -467,11 +467,11 @@ spec:
app: opticalattackmanagerservice # same as above app: opticalattackmanagerservice # same as above
#release: prometheus # same as above #release: prometheus # same as above
endpoints: endpoints:
- port: metrics # named port in target app - port: metrics # named port in target app
scheme: http scheme: http
path: /metrics # path to scrape path: /metrics # path to scrape
interval: 5s # scrape interval interval: 5s # scrape interval
namespaceSelector: namespaceSelector:
any: false any: false
matchNames: matchNames:
- tfs # namespace where the app is running - tfs # namespace where the app is running
\ No newline at end of file
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -28,28 +28,28 @@ spec: ...@@ -28,28 +28,28 @@ spec:
spec: spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: labs.etsi.org:5050/tfs/controller/service:latest image: labs.etsi.org:5050/tfs/controller/service:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 3030 - containerPort: 3030
- containerPort: 9192 - containerPort: 9192
env: env:
- name: LOG_LEVEL - name: LOG_LEVEL
value: "INFO" value: "INFO"
readinessProbe: readinessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:3030"] command: ["/bin/grpc_health_probe", "-addr=:3030"]
livenessProbe: livenessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:3030"] command: ["/bin/grpc_health_probe", "-addr=:3030"]
resources: resources:
requests: requests:
cpu: 250m cpu: 250m
memory: 128Mi memory: 128Mi
limits: limits:
cpu: 1000m cpu: 1000m
memory: 1024Mi memory: 1024Mi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
...@@ -62,14 +62,14 @@ spec: ...@@ -62,14 +62,14 @@ spec:
selector: selector:
app: serviceservice app: serviceservice
ports: ports:
- name: grpc - name: grpc
protocol: TCP protocol: TCP
port: 3030 port: 3030
targetPort: 3030 targetPort: 3030
- name: metrics - name: metrics
protocol: TCP protocol: TCP
port: 9192 port: 9192
targetPort: 9192 targetPort: 9192
--- ---
apiVersion: autoscaling/v2 apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler kind: HorizontalPodAutoscaler
...@@ -83,12 +83,12 @@ spec: ...@@ -83,12 +83,12 @@ spec:
minReplicas: 1 minReplicas: 1
maxReplicas: 20 maxReplicas: 20
metrics: metrics:
- type: Resource - type: Resource
resource: resource:
name: cpu name: cpu
target: target:
type: Utilization type: Utilization
averageUtilization: 80 averageUtilization: 80
#behavior: #behavior:
# scaleDown: # scaleDown:
# stabilizationWindowSeconds: 30 # stabilizationWindowSeconds: 30
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -28,33 +28,33 @@ spec: ...@@ -28,33 +28,33 @@ spec:
spec: spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: labs.etsi.org:5050/tfs/controller/slice:latest image: labs.etsi.org:5050/tfs/controller/slice:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 4040 - containerPort: 4040
- containerPort: 9192 - containerPort: 9192
env: env:
- name: LOG_LEVEL - name: LOG_LEVEL
value: "INFO" value: "INFO"
- name: SLICE_GROUPING - name: SLICE_GROUPING
value: "DISABLE" value: "DISABLE"
envFrom: envFrom:
- secretRef: - secretRef:
name: qdb-data name: qdb-data
readinessProbe: readinessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:4040"] command: ["/bin/grpc_health_probe", "-addr=:4040"]
livenessProbe: livenessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:4040"] command: ["/bin/grpc_health_probe", "-addr=:4040"]
resources: resources:
requests: requests:
cpu: 250m cpu: 250m
memory: 128Mi memory: 128Mi
limits: limits:
cpu: 1000m cpu: 1000m
memory: 1024Mi memory: 1024Mi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
...@@ -67,14 +67,14 @@ spec: ...@@ -67,14 +67,14 @@ spec:
selector: selector:
app: sliceservice app: sliceservice
ports: ports:
- name: grpc - name: grpc
protocol: TCP protocol: TCP
port: 4040 port: 4040
targetPort: 4040 targetPort: 4040
- name: metrics - name: metrics
protocol: TCP protocol: TCP
port: 9192 port: 9192
targetPort: 9192 targetPort: 9192
--- ---
apiVersion: autoscaling/v2 apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler kind: HorizontalPodAutoscaler
...@@ -88,12 +88,12 @@ spec: ...@@ -88,12 +88,12 @@ spec:
minReplicas: 1 minReplicas: 1
maxReplicas: 20 maxReplicas: 20
metrics: metrics:
- type: Resource - type: Resource
resource: resource:
name: cpu name: cpu
target: target:
type: Utilization type: Utilization
averageUtilization: 80 averageUtilization: 80
#behavior: #behavior:
# scaleDown: # scaleDown:
# stabilizationWindowSeconds: 30 # stabilizationWindowSeconds: 30
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -30,37 +30,37 @@ spec: ...@@ -30,37 +30,37 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
shareProcessNamespace: true shareProcessNamespace: true
containers: containers:
- name: server - name: server
image: labs.etsi.org:5050/tfs/controller/te:latest image: labs.etsi.org:5050/tfs/controller/te:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 10030 - containerPort: 10030
env: env:
- name: ERLANG_LOGGER_LEVEL - name: ERLANG_LOGGER_LEVEL
value: "debug" value: "debug"
- name: ERLANG_COOKIE - name: ERLANG_COOKIE
value: "tfte-unsafe-cookie" value: "tfte-unsafe-cookie"
- name: ERLANG_NODE_NAME - name: ERLANG_NODE_NAME
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.name fieldPath: metadata.name
- name: ERLANG_NODE_IP - name: ERLANG_NODE_IP
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: status.podIP fieldPath: status.podIP
readinessProbe: readinessProbe:
exec: exec:
command: ["/tfte/bin/tfte", "status"] command: ["/tfte/bin/tfte", "status"]
livenessProbe: livenessProbe:
exec: exec:
command: ["/tfte/bin/tfte", "status"] command: ["/tfte/bin/tfte", "status"]
resources: resources:
requests: requests:
cpu: 250m cpu: 250m
memory: 512Mi memory: 512Mi
limits: limits:
cpu: 700m cpu: 700m
memory: 1024Mi memory: 1024Mi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
...@@ -71,11 +71,11 @@ spec: ...@@ -71,11 +71,11 @@ spec:
selector: selector:
app: teservice app: teservice
ports: ports:
- name: grpc - name: grpc
protocol: TCP protocol: TCP
port: 10030 port: 10030
targetPort: 10030 targetPort: 10030
- name: pcep - name: pcep
protocol: TCP protocol: TCP
port: 4189 port: 4189
targetPort: 4189 targetPort: 4189
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -32,72 +32,73 @@ spec: ...@@ -32,72 +32,73 @@ spec:
supplementalGroups: supplementalGroups:
- 0 - 0
containers: containers:
- name: server - name: server
image: labs.etsi.org:5050/tfs/controller/webui:latest image: labs.etsi.org:5050/tfs/controller/webui:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8004 - containerPort: 8004
env: env:
- name: LOG_LEVEL - name: LOG_LEVEL
value: "INFO" value: "INFO"
- name: WEBUISERVICE_SERVICE_BASEURL_HTTP - name: WEBUISERVICE_SERVICE_BASEURL_HTTP
value: "/webui/" value: "/webui/"
readinessProbe: readinessProbe:
httpGet: httpGet:
path: /healthz/ready path: /healthz/ready
port: 8004 port: 8004
initialDelaySeconds: 5 initialDelaySeconds: 5
timeoutSeconds: 1 timeoutSeconds: 1
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /healthz/live path: /healthz/live
port: 8004 port: 8004
initialDelaySeconds: 5 initialDelaySeconds: 5
timeoutSeconds: 1 timeoutSeconds: 1
resources: resources:
requests: requests:
cpu: 50m cpu: 50m
memory: 128Mi memory: 128Mi
limits: limits:
cpu: 1000m cpu: 1000m
memory: 1024Mi memory: 1024Mi
- name: grafana - name: grafana
image: grafana/grafana:8.5.22 image: grafana/grafana:8.5.22
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
ports: ports:
- containerPort: 3000 - containerPort: 3000
name: http-grafana name: http-grafana
protocol: TCP protocol: TCP
env: env:
- name: GF_SERVER_ROOT_URL - name: GF_SERVER_ROOT_URL
value: "http://0.0.0.0:3000/grafana/" value: "http://0.0.0.0:3000/grafana/"
- name: GF_SERVER_SERVE_FROM_SUB_PATH - name: GF_SERVER_SERVE_FROM_SUB_PATH
value: "true" value: "true"
readinessProbe: readinessProbe:
failureThreshold: 3 failureThreshold: 60
httpGet: httpGet:
path: /robots.txt #path: /robots.txt
port: 3000 path: /login
scheme: HTTP port: 3000
initialDelaySeconds: 10 scheme: HTTP
periodSeconds: 30 initialDelaySeconds: 1
successThreshold: 1 periodSeconds: 1
timeoutSeconds: 2 successThreshold: 1
livenessProbe: timeoutSeconds: 2
failureThreshold: 3 livenessProbe:
initialDelaySeconds: 30 failureThreshold: 60
periodSeconds: 10 initialDelaySeconds: 1
successThreshold: 1 periodSeconds: 1
tcpSocket: successThreshold: 1
port: 3000 tcpSocket:
timeoutSeconds: 1 port: 3000
resources: timeoutSeconds: 1
requests: resources:
cpu: 150m requests:
memory: 512Mi cpu: 250m
limits: memory: 512Mi
cpu: 500m limits:
memory: 1024Mi cpu: 500m
memory: 1024Mi
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
...@@ -110,9 +111,9 @@ spec: ...@@ -110,9 +111,9 @@ spec:
selector: selector:
app: webuiservice app: webuiservice
ports: ports:
- name: webui - name: webui
port: 8004 port: 8004
targetPort: 8004 targetPort: 8004
- name: grafana - name: grafana
port: 3000 port: 3000
targetPort: 3000 targetPort: 3000
# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
apiVersion: v1
kind: Service
metadata:
annotations:
app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
labels:
app.kubernetes.io/name: ztpservice
app: ztpservice
name: ztpservice
spec:
ports:
- name: grpc
port: 5050
targetPort: 5050
- name: metrics
protocol: TCP
port: 9192
targetPort: 8080
selector:
app.kubernetes.io/name: ztpservice
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
labels:
app: ztpservice
app.kubernetes.io/name: ztpservice
name: ztpservice
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: ztpservice
template:
metadata:
annotations:
app.quarkus.io/build-timestamp: 2022-09-19 - 10:48:18 +0000
labels:
app: ztpservice
app.kubernetes.io/name: ztpservice
spec:
containers:
- env:
- name: KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: CONTEXT_SERVICE_HOST
value: contextservice
- name: DEVICE_SERVICE_HOST
value: deviceservice
image: labs.etsi.org:5050/tfs/controller/ztp:0.2.0
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /q/health/live
port: 8080
scheme: HTTP
initialDelaySeconds: 2
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
name: ztpservice
ports:
- containerPort: 5050
name: grpc
protocol: TCP
- containerPort: 8080
name: metrics
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /q/health/ready
port: 8080
scheme: HTTP
initialDelaySeconds: 2
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
resources:
requests:
cpu: 50m
memory: 512Mi
limits:
cpu: 2000m
memory: 2048Mi
#---
#apiVersion: autoscaling/v2
#kind: HorizontalPodAutoscaler
#metadata:
# name: ztpservice-hpa
#spec:
# scaleTargetRef:
# apiVersion: apps/v1
# kind: Deployment
# name: ztpservice
# minReplicas: 1
# maxReplicas: 10
# metrics:
# - type: Resource
# resource:
# name: cpu
# target:
# type: Utilization
# averageUtilization: 80
#!/bin/bash #!/bin/bash
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -20,13 +20,29 @@ ...@@ -20,13 +20,29 @@
export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/" export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
# Set the list of components, separated by spaces, you want to build images for, and deploy. # Set the list of components, separated by spaces, you want to build images for, and deploy.
export TFS_COMPONENTS="context device pathcomp service slice compute webui load_generator" export TFS_COMPONENTS="context device pathcomp service slice nbi webui load_generator"
# Uncomment to activate Monitoring # Uncomment to activate Monitoring
#export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring" #export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring"
# Uncomment to activate Automation and Policy Manager # Uncomment to activate BGP-LS Speaker
#export TFS_COMPONENTS="${TFS_COMPONENTS} automation policy" #export TFS_COMPONENTS="${TFS_COMPONENTS} bgpls_speaker"
# Uncomment to activate Optical Controller
# To manage optical connections, "service" requires "opticalcontroller" to be deployed
# before "service", thus we "hack" the TFS_COMPONENTS environment variable prepending the
# "opticalcontroller" only if "service" is already in TFS_COMPONENTS, and re-export it.
#if [[ "$TFS_COMPONENTS" == *"service"* ]]; then
# BEFORE="${TFS_COMPONENTS% service*}"
# AFTER="${TFS_COMPONENTS#* service}"
# export TFS_COMPONENTS="${BEFORE} opticalcontroller service ${AFTER}"
#fi
# Uncomment to activate ZTP
#export TFS_COMPONENTS="${TFS_COMPONENTS} ztp"
# Uncomment to activate Policy Manager
#export TFS_COMPONENTS="${TFS_COMPONENTS} policy"
# Uncomment to activate Optical CyberSecurity # Uncomment to activate Optical CyberSecurity
#export TFS_COMPONENTS="${TFS_COMPONENTS} dbscanserving opticalattackmitigator opticalattackdetector opticalattackmanager" #export TFS_COMPONENTS="${TFS_COMPONENTS} dbscanserving opticalattackmitigator opticalattackdetector opticalattackmanager"
...@@ -37,6 +53,12 @@ export TFS_COMPONENTS="context device pathcomp service slice compute webui load_ ...@@ -37,6 +53,12 @@ export TFS_COMPONENTS="context device pathcomp service slice compute webui load_
# Uncomment to activate TE # Uncomment to activate TE
#export TFS_COMPONENTS="${TFS_COMPONENTS} te" #export TFS_COMPONENTS="${TFS_COMPONENTS} te"
# Uncomment to activate Forecaster
#export TFS_COMPONENTS="${TFS_COMPONENTS} forecaster"
# Uncomment to activate E2E Orchestrator
#export TFS_COMPONENTS="${TFS_COMPONENTS} e2e_orchestrator"
# Set the tag you want to use for your images. # Set the tag you want to use for your images.
export TFS_IMAGE_TAG="dev" export TFS_IMAGE_TAG="dev"
......
src/tests/ofc24/
\ No newline at end of file
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package automation;
import "context.proto";
service AutomationService {
rpc ZtpGetDeviceRole(DeviceRoleId) returns (DeviceRole) {}
rpc ZtpGetDeviceRolesByDeviceId(context.DeviceId) returns (DeviceRoleList) {}
rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {}
rpc ZtpUpdate(DeviceRoleConfig) returns (DeviceRoleState) {}
rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {}
rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {}
}
enum DeviceRoleType {
NONE = 0;
DEV_OPS = 1;
DEV_CONF = 2;
PIPELINE_CONF = 3;
}
message DeviceRoleId {
context.Uuid devRoleId = 1;
context.DeviceId devId = 2;
}
message DeviceRole {
DeviceRoleId devRoleId = 1;
DeviceRoleType devRoleType = 2;
}
message DeviceRoleConfig {
DeviceRole devRole = 1;
context.DeviceConfig devConfig = 2;
}
message DeviceRoleList {
repeated DeviceRole devRole = 1;
}
message DeviceRoleState {
DeviceRoleId devRoleId = 1;
ZtpDeviceState devRoleState = 2;
}
message DeviceDeletionResult {
repeated string deleted = 1;
}
enum ZtpDeviceState {
ZTP_DEV_STATE_UNDEFINED = 0;
ZTP_DEV_STATE_CREATED = 1;
ZTP_DEV_STATE_UPDATED = 2;
ZTP_DEV_STATE_DELETED = 3;
}
// Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package bgpls;
import "context.proto";
service BgplsService {
rpc ListDiscoveredDevices (context.Empty ) returns (DiscoveredDeviceList) {}
rpc ListDiscoveredLinks (context.Empty ) returns (DiscoveredLinkList ) {}
rpc AddBgplsSpeaker (BgplsSpeaker ) returns (BgplsSpeakerId ) {}
rpc ListBgplsSpeakers (context.Empty ) returns (BgplsSpeakerList ) {}
rpc DisconnectFromSpeaker (BgplsSpeaker ) returns (context.Empty ) {}
rpc GetSpeakerInfoFromId (BgplsSpeakerId ) returns (BgplsSpeaker ) {}
rpc NotifyAddNodeToContext(NodeDescriptors) returns (context.Empty ) {}
}
message DiscoveredDevice {
string nodeName = 1;
string ip = 2;
string igpID = 3;
string learntFrom = 4;
}
message DiscoveredDeviceList {
repeated DiscoveredDevice discovereddevices = 1;
}
message DiscoveredLinkList{
repeated DiscoveredLink discoveredlinks = 1;
}
message DiscoveredLink{
NodeDescriptors local = 1;
NodeDescriptors remote = 2;
string learntFrom = 3;
string local_ipv4 = 4;
string remote_ipv4 = 5;
}
message NodeDescriptors{
string asNumber = 1;
string igp_id = 2;
string nodeName = 3;
}
message BgplsSpeaker{
string address = 1;
string port = 2;
string asNumber = 3;
}
message BgplsSpeakerId{
uint32 id = 1;
}
message BgplsSpeakerList{
repeated BgplsSpeakerId speakers = 1;
}
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package compute;
import "context.proto";
service ComputeService {
rpc CheckCredentials (context.TeraFlowController) returns (context.AuthenticationResult) {}
rpc GetConnectivityServiceStatus (context.ServiceId ) returns (context.ServiceStatus ) {}
rpc CreateConnectivityService (context.Service ) returns (context.ServiceId ) {}
rpc EditConnectivityService (context.Service ) returns (context.ServiceId ) {}
rpc DeleteConnectivityService (context.Service ) returns (context.Empty ) {}
rpc GetAllActiveConnectivityServices (context.Empty ) returns (context.ServiceIdList ) {}
rpc ClearAllConnectivityServices (context.Empty ) returns (context.Empty ) {}
}
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
...@@ -74,6 +74,16 @@ service ContextService { ...@@ -74,6 +74,16 @@ service ContextService {
rpc SetConnection (Connection ) returns ( ConnectionId ) {} rpc SetConnection (Connection ) returns ( ConnectionId ) {}
rpc RemoveConnection (ConnectionId ) returns ( Empty ) {} rpc RemoveConnection (ConnectionId ) returns ( Empty ) {}
rpc GetConnectionEvents(Empty ) returns (stream ConnectionEvent ) {} rpc GetConnectionEvents(Empty ) returns (stream ConnectionEvent ) {}
// ------------------------------ Experimental -----------------------------
rpc GetOpticalConfig (Empty ) returns (OpticalConfigList ) {}
rpc SetOpticalConfig (OpticalConfig ) returns (OpticalConfigId ) {}
rpc SelectOpticalConfig(OpticalConfigId) returns (OpticalConfig ) {}
rpc SetOpticalLink (OpticalLink ) returns (Empty ) {}
rpc GetOpticalLink (OpticalLinkId ) returns (OpticalLink ) {}
rpc GetFiber (FiberId ) returns (Fiber ) {}
} }
// ----- Generic ------------------------------------------------------------------------------------------------------- // ----- Generic -------------------------------------------------------------------------------------------------------
...@@ -174,12 +184,17 @@ message Device { ...@@ -174,12 +184,17 @@ message Device {
DeviceOperationalStatusEnum device_operational_status = 5; DeviceOperationalStatusEnum device_operational_status = 5;
repeated DeviceDriverEnum device_drivers = 6; repeated DeviceDriverEnum device_drivers = 6;
repeated EndPoint device_endpoints = 7; repeated EndPoint device_endpoints = 7;
repeated Component component = 8; // Used for inventory repeated Component components = 8; // Used for inventory
DeviceId controller_id = 9; // Identifier of node controlling the actual device DeviceId controller_id = 9; // Identifier of node controlling the actual device
} }
message Component { message Component { //Defined previously to this section - Tested OK
repeated string comp_string = 1; Uuid component_uuid = 1;
string name = 2;
string type = 3;
map<string, string> attributes = 4; // dict[attr.name => json.dumps(attr.value)]
string parent = 5;
} }
message DeviceConfig { message DeviceConfig {
...@@ -192,10 +207,13 @@ enum DeviceDriverEnum { ...@@ -192,10 +207,13 @@ enum DeviceDriverEnum {
DEVICEDRIVER_TRANSPORT_API = 2; DEVICEDRIVER_TRANSPORT_API = 2;
DEVICEDRIVER_P4 = 3; DEVICEDRIVER_P4 = 3;
DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4; DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;
DEVICEDRIVER_ONF_TR_352 = 5; DEVICEDRIVER_ONF_TR_532 = 5;
DEVICEDRIVER_XR = 6; DEVICEDRIVER_XR = 6;
DEVICEDRIVER_IETF_L2VPN = 7; DEVICEDRIVER_IETF_L2VPN = 7;
DEVICEDRIVER_GNMI_OPENCONFIG = 8; DEVICEDRIVER_GNMI_OPENCONFIG = 8;
DEVICEDRIVER_OPTICAL_TFS = 9;
DEVICEDRIVER_IETF_ACTN = 10;
DEVICEDRIVER_OC = 11;
} }
enum DeviceOperationalStatusEnum { enum DeviceOperationalStatusEnum {
...@@ -231,10 +249,16 @@ message LinkId { ...@@ -231,10 +249,16 @@ message LinkId {
Uuid link_uuid = 1; Uuid link_uuid = 1;
} }
message LinkAttributes {
float total_capacity_gbps = 1;
float used_capacity_gbps = 2;
}
message Link { message Link {
LinkId link_id = 1; LinkId link_id = 1;
string name = 2; string name = 2;
repeated EndPointId link_endpoint_ids = 3; repeated EndPointId link_endpoint_ids = 3;
LinkAttributes attributes = 4;
} }
message LinkIdList { message LinkIdList {
...@@ -274,6 +298,8 @@ enum ServiceTypeEnum { ...@@ -274,6 +298,8 @@ enum ServiceTypeEnum {
SERVICETYPE_L2NM = 2; SERVICETYPE_L2NM = 2;
SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3; SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3;
SERVICETYPE_TE = 4; SERVICETYPE_TE = 4;
SERVICETYPE_E2E = 5;
SERVICETYPE_OPTICAL_CONNECTIVITY = 6;
} }
enum ServiceStatusEnum { enum ServiceStatusEnum {
...@@ -598,3 +624,53 @@ message AuthenticationResult { ...@@ -598,3 +624,53 @@ message AuthenticationResult {
ContextId context_id = 1; ContextId context_id = 1;
bool authenticated = 2; bool authenticated = 2;
} }
// ---------------- Experimental ------------------------
message OpticalConfigId {
string opticalconfig_uuid = 1;
}
message OpticalConfig {
OpticalConfigId opticalconfig_id = 1;
string config = 2;
}
message OpticalConfigList {
repeated OpticalConfig opticalconfigs = 1;
}
// ---- Optical Link ----
message OpticalLinkId {
Uuid optical_link_uuid = 1;
}
message FiberId {
Uuid fiber_uuid = 1;
}
message Fiber {
string ID = 10;
string src_port = 1;
string dst_port = 2;
string local_peer_port = 3;
string remote_peer_port = 4;
repeated int32 c_slots = 5;
repeated int32 l_slots = 6;
repeated int32 s_slots = 7;
float length = 8;
bool used = 9;
FiberId fiber_uuid = 11;
}
message OpticalLinkDetails {
float length = 1;
string source = 2;
string target = 3;
repeated Fiber fibers = 4;
}
message OpticalLink {
string name = 1;
OpticalLinkDetails details = 2;
OpticalLinkId optical_link_uuid = 3;
}
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......
// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) // Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
......