diff --git a/kubernetes/helm/openslice/templates/mcp-server-ingress.yaml.yaml b/kubernetes/helm/openslice/templates/mcp-server-ingress.yaml.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0c515e6a3a99a2611615397d092384d737e51745 --- /dev/null +++ b/kubernetes/helm/openslice/templates/mcp-server-ingress.yaml.yaml @@ -0,0 +1,23 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "openslice.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + {{- include "openslice.labels" . | nindent 4 }} + annotations: + nginx.ingress.kubernetes.io/rewrite-target: "/$1" + name: {{ include "openslice.fullname" . }}-mcpserver-ingress +spec: + ingressClassName: {{ .Values.ingress.ingressClassName | quote }} + rules: + - http: + paths: + - pathType: ImplementationSpecific + path: "/mcpserver/(.*)" + backend: + service: + name: {{ include "openslice.fullname" . }}-mcpserver + port: + number: 13015 diff --git a/kubernetes/helm/openslice/templates/mcp-server.yaml b/kubernetes/helm/openslice/templates/mcp-server.yaml new file mode 100644 index 0000000000000000000000000000000000000000..942f9a9a170321dff7bfe69224f30655f25c15e3 --- /dev/null +++ b/kubernetes/helm/openslice/templates/mcp-server.yaml @@ -0,0 +1,76 @@ +{{- if .Values.mcpserver.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: mcpserver + chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + {{- include "openslice.labels" . | nindent 4 }} + name: {{ include "openslice.fullname" . }}-mcpserver +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: mcpserver + {{- include "openslice.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: mcpserver + {{- include "openslice.selectorLabels" . | nindent 8 }} + spec: + containers: + - name: {{ include "openslice.fullname" . }}-mcpserver + image: "{{ .Values.image.mcpserver.repository }}:{{ .Values.image.mcpserver.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.mcpserver.pullPolicy | default "Always" }} + env: + - name: SPRING_APPLICATION_JSON + value: >- + { + "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 }}", + "spring-addons.issuers[0].uri": "{{ .Values.rooturl }}/auth/realms/openslice", + "spring-addons.issuers[0].username-json-path":"$.preferred_username", + "spring-addons.issuers[0].claims[0].jsonPath":"$.realm_access.roles", + "spring-addons.issuers[0].claims[1].jsonPath":"$.resource_access.*.roles", + "spring.security.oauth2.resourceserver.jwt.issuer-uri": "{{ .Values.rooturl }}/auth/realms/openslice", + "springdoc.oAuthFlow.authorizationUrl": "{{ .Values.rooturl }}/auth/realms/openslice/protocol/openid-connect/auth", + "springdoc.oAuthFlow.tokenUrl": "{{ .Values.rooturl }}/auth/realms/openslice/protocol/openid-connect/token", + "springdoc.oauth.client-id": "osapiWebClientId", + "springdoc.oauth.clientsecret": "{{ .Values.mcpserver.springdoc.clientSecret }}", + "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.mcpserver.spring.logLevel | default "INFO" }}" + } + ports: + - containerPort: 13015 + resources: + {{- toYaml .Values.resources | nindent 12 }} + restartPolicy: Always +--- +apiVersion: v1 +kind: Service +metadata: + namespace: {{ .Release.Namespace }} + labels: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: mcpserver + chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + {{- include "openslice.labels" . | nindent 4 }} + name: {{ include "openslice.fullname" . }}-mcpserver +spec: + ports: + - name: "13015" + port: 13015 + targetPort: 13015 + selector: + app: {{ include "openslice.fullname" . }} + org.etsi.osl.service: mcpserver + {{- include "openslice.selectorLabels" . | nindent 4 }} +{{- end }} diff --git a/kubernetes/helm/openslice/values.yaml b/kubernetes/helm/openslice/values.yaml index e531b73b43b145f8c4c5da251c3733fa886c6e2d..65d691856f2c7b29b80fbfcba909984c79fe8c65 100644 --- a/kubernetes/helm/openslice/values.yaml +++ b/kubernetes/helm/openslice/values.yaml @@ -85,6 +85,11 @@ image: pullPolicy: Always # Overrides the image tag whose default is the chart appVersion. tag: "develop" + mcpserver: + repository: labs.etsi.org:5050/osl/code/org.etsi.osl.mcp.server + # Overrides the image tag whose default is the chart appVersion. + tag: develop + pullPolicy: Always bugzillaurl: example.com:443/bugzilla bugzillakey: VH2Vw0iI5aYgALFFzVDWqhACwt6Hu3bXla9kSC1Z @@ -154,6 +159,13 @@ osscapi: spring: loglevel: INFO +mcpserver: + enabled: true + springdoc: + clientSecret: secret + spring: + logLevel: INFO + # Storage class to be used for provisioning. Default is manual # storageClass: ~