diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3787a3a10426e4b68004fc09bc4d40280e81c4f9..95f47740eba56a6bf83255e52883aaa01d477c1a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,11 +3,11 @@ include: - local: ci-templates/build.yml rules: - - if: '$CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_PROTECTED' + - if: '$CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_PROTECTED == "true"' - local: ci-templates/build_unprotected.yml rules: - - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop" && !$CI_COMMIT_REF_PROTECTED' + - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_PROTECTED != "true"' maven_build: diff --git a/ci-templates/build.yml b/ci-templates/build.yml index 9a9ba16bba19c339c8a271f13447422c2944d061..79ab2b823b21de625797217f814222b4f1d3f3d6 100644 --- a/ci-templates/build.yml +++ b/ci-templates/build.yml @@ -1,7 +1,7 @@ .maven_build: extends: .default stage: build - image: maven:3.9.5-ibm-semeru-17-focal + image: maven:3.9.9-ibm-semeru-17-focal script: - mvn deploy -s ci_settings.xml -Dversion=$APP_VERSION artifacts: @@ -26,7 +26,7 @@ .angular_build: extends: .default stage: build - image: trion/ng-cli:14.2.6 + image: trion/ng-cli:13.3.7 script: - | if [ ! -f "./src/assets/config/theming.scss" ]; then diff --git a/ci-templates/build_unprotected.yml b/ci-templates/build_unprotected.yml index a5c86697e727ef62c38b8c1801f0f23ec20c0b4e..bf2678b8b766c2301b1ba1e7905cd2f46f02f3f9 100644 --- a/ci-templates/build_unprotected.yml +++ b/ci-templates/build_unprotected.yml @@ -1,7 +1,7 @@ .maven_build: extends: .default stage: build - image: maven:3.9.5-ibm-semeru-17-focal + image: maven:3.9.9-ibm-semeru-17-focal script: - mvn install -s ci_settings.xml artifacts: @@ -20,7 +20,7 @@ .angular_build: extends: .default stage: build - image: trion/ng-cli:14.2.6 + image: trion/ng-cli:13.3.7 script: - | if [ ! -f "./src/assets/config/theming.scss" ]; then diff --git a/ci-templates/default.yml b/ci-templates/default.yml index e49b634243ca7c5870671034b0027e80ea233d53..54b1720fd9648e38529b7e55f86ae47540dc6b9a 100644 --- a/ci-templates/default.yml +++ b/ci-templates/default.yml @@ -7,11 +7,22 @@ stages: .default: before_script: + - set -e - | if [ "$CI_COMMIT_REF_PROTECTED" = true ] && [ -n "$CI_COMMIT_TAG" ]; then export APP_VERSION=$CI_COMMIT_TAG elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then export APP_VERSION="develop" else - export APP_VERSION=$CI_COMMIT_REF_NAME + # Replace '/' with '-' and check for any invalid characters + APP_VERSION=$(echo "$CI_COMMIT_REF_NAME" | sed 's|/|-|g') + + # Check for invalid characters (only allow lowercase and uppercase letters, digits, '_', '.', '-') + if echo "$APP_VERSION" | grep -q '[^a-zA-Z0-9._-]'; then + echo "Error: Branch name contains invalid characters for Docker tags. Only a-z, A-Z, 0-9, '_', '.', and '-' are allowed." + exit 1 + fi + + export APP_VERSION fi + - echo "APP_VERSION set to $APP_VERSION" diff --git a/compose/deploy.sh b/compose/deploy.sh index 94071cf2f48c5741be21fe658c795d238f8382db..d8ac5383db45435b482eb5355c904f8a5565059c 100644 --- a/compose/deploy.sh +++ b/compose/deploy.sh @@ -23,7 +23,7 @@ updaterepo(){ # Build maven project if .pom file is present if [ -f "./pom.xml" ]; then - docker run -it --rm -v "/home/ubuntu/.m2":/root/.m2 -v "$(pwd)":/opt/maven -w /opt/maven maven:3.9.5-ibm-semeru-17-focal mvn clean verify -DskipTests + docker run -it --rm -v "/home/ubuntu/.m2":/root/.m2 -v "$(pwd)":/opt/maven -w /opt/maven maven:3.9.9-ibm-semeru-17-focal mvn clean verify -DskipTests fi } diff --git a/compose/docker-compose.yaml.configure b/compose/docker-compose.yaml.configure index 088d9c846e9d854ef362779986d5f6f62ad3899c..ce1ebc0e978326442686c2a93bd11a61b33605ed 100644 --- a/compose/docker-compose.yaml.configure +++ b/compose/docker-compose.yaml.configure @@ -3,7 +3,7 @@ services: artemis: container_name: anartemis - image: apache/activemq-artemis:2.30.0 + image: apache/activemq-artemis:2.31.1 restart: always profiles: ["dev", "prod"] ports: @@ -206,7 +206,8 @@ services: "spring.activemq.user": "artemis", "spring.activemq.password": "artemis", "logging.level.org.springframework" : "INFO", - "logging.level.org.etsi.osl.tmf.api" : "INFO", + "logging.level.org.etsi.osl.tmf.api" : "INFO", + "logging.level.org.etsi.osl.tmf.*" : "INFO", "kroki.serverurl" : "http://localhost/kroki", "server.forward-headers-strategy":"FRAMEWORK" }' @@ -323,6 +324,36 @@ services: depends_on: - osscapi + metrico: + container_name: openslice-metrico + restart: always + profiles: [ "prod"] + build: + context: ../../org.etsi.osl.metrico/ + dockerfile: Dockerfile + image: labs.etsi.org:5050/osl/code/org.etsi.osl.metrico:latest + environment: + SPRING_APPLICATION_JSON: '{ + "spring.datasource.url": "jdbc:mysql://amysql/metricodb?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", + "spring.datasource.username":"root", + "spring.datasource.password":"letmein", + "spring.activemq.brokerUrl": "tcp://anartemis:61616?jms.watchTopicAdvisories=false", + "spring.activemq.user": "artemis", + "spring.activemq.password": "artemis", + "logging.level.org.springframework" : "DEBUG", + "logging.level.org.etsi.osl.metrico" : "DEBUG" + }' + logging: + driver: "json-file" + options: + max-size: "800m" + max-file: "3" + networks: + - front + - back + depends_on: + - osscapi + - mysql-portal portainer: diff --git a/kubernetes/helm/openslice/Chart.yaml b/kubernetes/helm/openslice/Chart.yaml index 18a24ba8dc405c6e9a6a28de01111afb5cea0697..8a0612ac2f0ea3b8c892ff22bfd446fba9221d44 100644 --- a/kubernetes/helm/openslice/Chart.yaml +++ b/kubernetes/helm/openslice/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.0.0 +version: 2.0.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 2024Q2 +appVersion: 2024Q4 diff --git a/kubernetes/helm/openslice/templates/cridge-config.yaml b/kubernetes/helm/openslice/templates/cridge-config.yaml deleted file mode 100644 index 2c62c9a4b728e1fbaef442af56fe08dd6a30d585..0000000000000000000000000000000000000000 --- a/kubernetes/helm/openslice/templates/cridge-config.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - namespace: {{ .Release.Namespace }} - labels: - app: {{ include "openslice.fullname" . }} - org.etsi.osl.service: cridge - chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" - {{- include "openslice.labels" . | nindent 4 }} - name: {{ include "openslice.fullname" . }}-cridge-kubeconfig -data: - config: |- - {{- .Files.Get "files/org.etsi.osl.cridge/config" | nindent 4 }} diff --git a/kubernetes/helm/openslice/templates/cridge-secret.yaml b/kubernetes/helm/openslice/templates/cridge-secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4a32bff5cab0c141bfb250f1d8e5f1c9dc802feb --- /dev/null +++ b/kubernetes/helm/openslice/templates/cridge-secret.yaml @@ -0,0 +1,32 @@ +{{ if .Values.cridge.enabled }} + +{{- $kubeconfigBase64 := .Values.cridge.kubeconfig.base64 | default "" -}} +{{- $kubeconfigFile := .Values.cridge.kubeconfig.raw | default (.Files.Get "files/org.etsi.osl.cridge/kubeconfig.yaml") -}} +{{- $kubeconfig := "" -}} + +{{- if $kubeconfigBase64 }} + {{- $kubeconfig = $kubeconfigBase64 | b64dec }} +{{- else if $kubeconfigFile }} + {{- $kubeconfig = $kubeconfigFile }} +{{- end }} + +apiVersion: v1 +kind: Secret +metadata: + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: cridge + chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + {{- include "openslice.labels" . | nindent 4 }} + name: {{ include "openslice.fullname" . }}-kubeconfig +type: Opaque +data: + config: |- + {{- if $kubeconfig }} + {{ $kubeconfig | b64enc | nindent 4 }} + {{- else }} + {{- required "A kubeconfig file is required." ($kubeconfig | b64enc) | nindent 4 }} + {{- end }} + +{{- end }} diff --git a/kubernetes/helm/openslice/templates/cridge.yaml b/kubernetes/helm/openslice/templates/cridge.yaml index 5e558467581532ef544ef89545b3216cc76f99bf..10656390c474046f1bee83e9531b0cf87da57272 100644 --- a/kubernetes/helm/openslice/templates/cridge.yaml +++ b/kubernetes/helm/openslice/templates/cridge.yaml @@ -1,3 +1,4 @@ +{{ if .Values.cridge.enabled }} apiVersion: apps/v1 kind: Deployment metadata: @@ -9,9 +10,7 @@ metadata: {{- include "openslice.labels" . | nindent 4 }} name: {{ include "openslice.fullname" . }}-cridge spec: - {{- if not .Values.autoscaling.enabled }} replicas: {{ .Values.replicaCount }} - {{- end }} selector: matchLabels: app: {{ include "openslice.fullname" . }} @@ -24,10 +23,6 @@ spec: org.etsi.osl.service: cridge {{- include "openslice.selectorLabels" . | nindent 8 }} spec: - initContainers: - - name: init-osscapi - image: busybox:1.28 - command: ['sh', '-c', "until nslookup {{ include "openslice.fullname" . }}-osscapi; do echo waiting for osscapi; sleep 2; done"] containers: - image: "{{ .Values.image.cridge.repository }}:{{ .Values.image.cridge.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.cridge.pullPolicy | default "Always" }} @@ -45,11 +40,12 @@ spec: resources: {{- toYaml .Values.resources | nindent 12 }} volumeMounts: - - name: cridge-kubeconfig + - name: kubeconfig readOnly: true mountPath: /root/.kube restartPolicy: Always volumes: - - name: cridge-kubeconfig - configMap: - name: {{ include "openslice.fullname" . }}-cridge-kubeconfig + - name: kubeconfig + secret: + secretName: {{ include "openslice.fullname" . }}-kubeconfig +{{- end }} diff --git a/kubernetes/helm/openslice/templates/metrico.yaml b/kubernetes/helm/openslice/templates/metrico.yaml new file mode 100644 index 0000000000000000000000000000000000000000..620ca0aa2146d38585535fbad658d42536ec7a53 --- /dev/null +++ b/kubernetes/helm/openslice/templates/metrico.yaml @@ -0,0 +1,46 @@ +{{ if .Values.metrico.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: metrico + chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + {{- include "openslice.labels" . | nindent 4 }} + name: {{ include "openslice.fullname" . }}-metrico +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: metrico + {{- include "openslice.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: metrico + {{- include "openslice.selectorLabels" . | nindent 8 }} + spec: + containers: + - image: "{{ .Values.image.metrico.repository }}:{{ .Values.image.metrico.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.metrico.pullPolicy | default "Always" }} + name: {{ include "openslice.fullname" . }}-metrico + env: + - name: SPRING_APPLICATION_JSON + value: >- + { + "spring.datasource.url": "jdbc:mysql://{{ include "openslice.fullname" . }}-mysql/metricodb?createDatabaseIfNotExist=true", + "spring.datasource.username": "{{ .Values.oscreds.mysql.username }}", + "spring.datasource.password": "{{ .Values.oscreds.mysql.password }}", + "spring.activemq.brokerUrl": "tcp://{{ include "openslice.fullname" . }}-artemis:61616?jms.watchTopicAdvisories=false", + "spring.activemq.user": "{{ .Values.oscreds.activemq.user }}", + "spring.activemq.password": "{{ .Values.oscreds.activemq.password }}", + "logging.level.org.springframework" : "{{ .Values.metrico.spring.logLevel | default "INFO" }}", + "logging.level.org.etsi.osl.cridge" : "{{ .Values.metrico.logLevel | default "INFO" }}" + } + restartPolicy: Always +{{- end }} diff --git a/kubernetes/helm/openslice/templates/oasapi.yaml b/kubernetes/helm/openslice/templates/oasapi.yaml index ea1ffac809c390158827a126f2b0773981ca252e..bf78b5dd478c19f009fddd599d6537fb7b667c66 100644 --- a/kubernetes/helm/openslice/templates/oasapi.yaml +++ b/kubernetes/helm/openslice/templates/oasapi.yaml @@ -39,7 +39,8 @@ spec: env: - name: SPRING_APPLICATION_JSON value: >- - { + { + "origins":"{{ .Values.rooturl }}", "spring.datasource.url": "jdbc:mysql://{{ include "openslice.fullname" . }}-mysql/ostmfdb?createDatabaseIfNotExist=true&useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "spring.datasource.username": "{{ .Values.oscreds.mysql.username }}", "spring.datasource.password": "{{ .Values.oscreds.mysql.password }}", @@ -55,7 +56,8 @@ spec: "spring.activemq.brokerUrl": "tcp://{{ include "openslice.fullname" . }}-artemis:61616?jms.watchTopicAdvisories=false", "spring.activemq.user": "{{ .Values.oscreds.activemq.user }}", "spring.activemq.password": "{{ .Values.oscreds.activemq.password }}", - "logging.level.org.springframework" : "{{ .Values.oasapi.spring.logLevel | default "INFO" }}" + "logging.level.org.springframework" : "{{ .Values.oasapi.spring.logLevel | default "INFO" }}", + "server.forward-headers-strategy":"FRAMEWORK" } resources: {{- toYaml .Values.resources | nindent 12 }} diff --git a/kubernetes/helm/openslice/templates/osportalapi.yaml b/kubernetes/helm/openslice/templates/osportalapi.yaml index 8c2927c3116af756659c34645cdcad957b7b0500..6df11d4899aec82bc2f40444c8721ee57e94edce 100644 --- a/kubernetes/helm/openslice/templates/osportalapi.yaml +++ b/kubernetes/helm/openslice/templates/osportalapi.yaml @@ -41,6 +41,7 @@ spec: - name: SPRING_APPLICATION_JSON value: >- { + "origins":"{{ .Values.rooturl }}", "spring.datasource.url": "jdbc:mysql://{{ include "openslice.fullname" . }}-mysql/osdb?createDatabaseIfNotExist=true", "spring.datasource.username": "{{ .Values.oscreds.mysql.username }}", "spring.datasource.password": "{{ .Values.oscreds.mysql.password }}", @@ -57,7 +58,8 @@ spec: "spring.activemq.user": "{{ .Values.oscreds.activemq.user }}", "spring.activemq.password": "{{ .Values.oscreds.activemq.password }}", "logging.level.org.springframework" : "{{ .Values.portalapi.spring.logLevel | default "INFO" }}", - "logging.level.org.etsi.osl.portal.api": "{{ .Values.portalapi.logLevel | default "INFO" }}" + "logging.level.org.etsi.osl.portal.api": "{{ .Values.portalapi.logLevel | default "INFO" }}", + "server.forward-headers-strategy":"FRAMEWORK" } resources: {{- toYaml .Values.resources | nindent 12 }} diff --git a/kubernetes/helm/openslice/templates/osscapi.yaml b/kubernetes/helm/openslice/templates/osscapi.yaml index cf96f7d26268efc80d2d38e727ce98290028802b..758d5194bba9efd07fe9e9b5dcdcb91a17611667 100644 --- a/kubernetes/helm/openslice/templates/osscapi.yaml +++ b/kubernetes/helm/openslice/templates/osscapi.yaml @@ -40,6 +40,7 @@ spec: - name: SPRING_APPLICATION_JSON value: >- { + "origins":"{{ .Values.rooturl }}", "spring.datasource.url": "jdbc:mysql://{{ include "openslice.fullname" . }}-mysql/osdb?createDatabaseIfNotExist=true", "spring.datasource.username": "{{ .Values.oscreds.mysql.username }}", "spring.datasource.password": "{{ .Values.oscreds.mysql.password }}", @@ -57,7 +58,8 @@ spec: "spring.activemq.user": "{{ .Values.oscreds.activemq.user }}", "spring.activemq.password": "{{ .Values.oscreds.activemq.password }}", "logging.level.org.springframework": "{{ .Values.osscapi.spring.logLevel | default "INFO" }}", - "kroki.serverurl":"{{ .Values.rooturl }}/kroki" + "kroki.serverurl":"{{ .Values.rooturl }}/kroki", + "server.forward-headers-strategy":"FRAMEWORK" } resources: {{- toYaml .Values.resources | nindent 12 }} diff --git a/kubernetes/helm/openslice/values.yaml b/kubernetes/helm/openslice/values.yaml index e3b53ec402988330862c7ddcd7e0faeefee8faae..ba45552be15c1de84c7e87548b52b0985b7b0d9a 100644 --- a/kubernetes/helm/openslice/values.yaml +++ b/kubernetes/helm/openslice/values.yaml @@ -9,7 +9,7 @@ image: repository: apache/activemq-artemis pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. - tag: "2.30.0" + tag: "2.31.1" blockdiag: repository: yuzutech/kroki-blockdiag pullPolicy: Always @@ -80,6 +80,11 @@ image: pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. tag: "latest" + metrico: + repository: labs.etsi.org:5050/osl/code/org.etsi.osl.metrico + pullPolicy: Always + # Overrides the image tag whose default is the chart appVersion. + tag: "latest" bugzillaurl: example.com:443/bugzilla bugzillakey: VH2Vw0iI5aYgALFFzVDWqhACwt6Hu3bXla9kSC1Z @@ -110,11 +115,21 @@ spring: mysql: storage: 10Gi + +metrico: + enabled: true + logLevel: DEBUG + spring: + loglevel: DEBUG cridge: + enabled: true logLevel: INFO spring: loglevel: INFO + kubeconfig: + base64: "" # Provide base64-encoded kubeconfig here if available + raw: "" # Provide raw kubeconfig here if available portalapi: logLevel: INFO diff --git a/pom.xml b/pom.xml index b22ca3a80a9b3bb430d1024fae9c3513dc099d4d..bfa0fc3e38a54253ce40a2a03ce7f78502c673d6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,13 +5,13 @@ <groupId>org.etsi.osl</groupId> <artifactId>org.etsi.osl.main</artifactId> - <version>1.0.0</version> + <version>2024Q4</version> <packaging>pom</packaging> <name>org.etsi.osl.main</name> <organization> - <name>openslice.io</name> - <url>http://openslice.io</url> + <name>OpenSlice by ETSI</name> + <url>https://osl.etsi.org</url> </organization> <inceptionYear>2019</inceptionYear> @@ -33,24 +33,24 @@ <springdoc-openapiui-version>1.7.0</springdoc-openapiui-version> <!-- osl components --> - <org.etsi.osl.bugzilla.version>1.0.0</org.etsi.osl.bugzilla.version> - <org.etsi.osl.centrallog.client.version>1.0.0</org.etsi.osl.centrallog.client.version> - <org.etsi.osl.centrallog.service.version>1.0.0</org.etsi.osl.centrallog.service.version> - <org.etsi.osl.cridge.version>1.0.0</org.etsi.osl.cridge.version> - <org.etsi.osl.main.version>1.0.0</org.etsi.osl.main.version> - <org.etsi.osl.mano.version>1.0.0</org.etsi.osl.mano.version> - <org.etsi.osl.model.version>1.0.0</org.etsi.osl.model.version> - <org.etsi.osl.model.k8s.version>1.0.0</org.etsi.osl.model.k8s.version> - <org.etsi.osl.model.nfv.version>1.0.0</org.etsi.osl.model.nfv.version> - <org.etsi.osl.model.tmf.version>1.0.0</org.etsi.osl.model.tmf.version> - <org.etsi.osl.oas.version>1.0.0</org.etsi.osl.oas.version> - <org.etsi.osl.osom.version>1.0.0</org.etsi.osl.osom.version> - <org.etsi.osl.portal.api.version>1.0.0</org.etsi.osl.portal.api.version> - <org.etsi.osl.portal.web.version>1.0.0</org.etsi.osl.portal.web.version> - <org.etsi.osl.sol005nbi.osm.version>1.0.0</org.etsi.osl.sol005nbi.osm.version> - <org.etsi.osl.sol005nbi.osm10.version>1.0.0</org.etsi.osl.sol005nbi.osm10.version> - <org.etsi.osl.tmf.api.version>1.0.0</org.etsi.osl.tmf.api.version> - <org.etsi.osl.tmf.web.version>1.0.0</org.etsi.osl.tmf.web.version> + <org.etsi.osl.bugzilla.version>1.0.1</org.etsi.osl.bugzilla.version> + <org.etsi.osl.centrallog.client.version>1.0.1</org.etsi.osl.centrallog.client.version> + <org.etsi.osl.centrallog.service.version>1.0.1</org.etsi.osl.centrallog.service.version> + <org.etsi.osl.cridge.version>1.1.0</org.etsi.osl.cridge.version> + <org.etsi.osl.main.version>2024Q4</org.etsi.osl.main.version> + <org.etsi.osl.mano.version>1.0.1</org.etsi.osl.mano.version> + <org.etsi.osl.model.k8s.version>1.1.0</org.etsi.osl.model.k8s.version> + <org.etsi.osl.model.nfv.version>1.0.1</org.etsi.osl.model.nfv.version> + <org.etsi.osl.model.tmf.version>1.1.0</org.etsi.osl.model.tmf.version> + <org.etsi.osl.oas.version>1.0.1</org.etsi.osl.oas.version> + <org.etsi.osl.osom.version>1.1.0</org.etsi.osl.osom.version> + <org.etsi.osl.portal.api.version>1.0.1</org.etsi.osl.portal.api.version> + <org.etsi.osl.portal.web.version>1.0.1</org.etsi.osl.portal.web.version> + <org.etsi.osl.sol005nbi.osm.version>1.0.1</org.etsi.osl.sol005nbi.osm.version> + <org.etsi.osl.sol005nbi.osm10.version>1.0.1</org.etsi.osl.sol005nbi.osm10.version> + <org.etsi.osl.tmf.api.version>1.1.0</org.etsi.osl.tmf.api.version> + <org.etsi.osl.tmf.web.version>1.1.0</org.etsi.osl.tmf.web.version> + <org.etsi.osl.metrico.version>0.9</org.etsi.osl.metrico.version> <!-- mainly for gw api -->