Commit 66a77da1 authored by George Papathanail's avatar George Papathanail
Browse files

feat(fm): rewrite the Federation Manager subchart for FM 2.0

parent 7bdd6c00
Loading
Loading
Loading
Loading
+7 −0
Changes for environments/kind/values.yaml: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -73,6 +73,13 @@ oeg:
      tag: "1.1"
      pullPolicy: IfNotPresent

federation-manager:
  federationManager:
    service:
      type: NodePort
      nodePort: 30989
    allowInsecurePartnerEndpoints: true

postgresql:
  persistence:
    storageClass: standard
+1 −2
Changes for oop-platform-chart/charts/federation-manager/Chart.yaml: 1 added line, 2 removed lines.
Original line number Diff line number Diff line
apiVersion: v2
name: federation-manager
description: Federation Manager with Keycloak for Open Operator Platform
description: Federation Manager 2.0 (GSMA OPG.04 E/WBI)
type: application
version: 1.0.0
appVersion: "0.0.1"

keywords:
  - federation-manager
  - keycloak
  - oop
  - federation

+75 −0
Changes for oop-platform-chart/charts/federation-manager/templates/_helpers.tpl: 75 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -81,3 +81,78 @@ Namespace
{{- define "federation-manager.namespace" -}}
{{- .Release.Namespace }}
{{- end }}

{{- define "federation-manager.scheme" -}}
{{- dig "scheme" "http" (.Values.global | default dict) -}}
{{- end }}

{{- define "federation-manager.publicHost" -}}
{{- $host := dig "publicHost" "" (.Values.global | default dict) -}}
{{- if not $host -}}
{{- $nodes := lookup "v1" "Node" "" "" -}}
{{- if and $nodes $nodes.items -}}
{{- $addresses := (index $nodes.items 0).status.addresses -}}
{{- range $addresses }}{{ if and (not $host) (eq .type "ExternalIP") }}{{ $host = .address }}{{ end }}{{ end -}}
{{- range $addresses }}{{ if and (not $host) (eq .type "InternalIP") }}{{ $host = .address }}{{ end }}{{ end -}}
{{- end -}}
{{- end -}}
{{- $host | default "localhost" -}}
{{- end }}

{{- define "federation-manager.publicUrl" -}}
{{- $c := .Values.federationManager -}}
{{- if $c.publicUrl -}}
{{- trimSuffix "/" $c.publicUrl -}}
{{- else if and (eq $c.service.type "NodePort") $c.service.nodePort -}}
{{- printf "%s://%s:%v" (include "federation-manager.scheme" .) (include "federation-manager.publicHost" .) $c.service.nodePort -}}
{{- else -}}
{{- printf "%s://%s" (include "federation-manager.scheme" .) (include "federation-manager.publicHost" .) -}}
{{- end -}}
{{- end }}

{{- define "federation-manager.partnerStatusLink" -}}
{{- .Values.federationManager.partnerStatusLink | default (printf "%s/operatorplatform/federation/v1/callbacks/partner-status" (include "federation-manager.publicUrl" .)) -}}
{{- end }}

{{- define "federation-manager.instanceStatusLink" -}}
{{- .Values.federationManager.instanceStatusLink | default (printf "%s/operatorplatform/federation/v1/callbacks/instance-status" (include "federation-manager.publicUrl" .)) -}}
{{- end }}

{{- define "federation-manager.keycloak.publicUrl" -}}
{{- $port := dig "nodePorts" "keycloak" 30081 (.Values.global | default dict) -}}
{{- printf "%s://%s:%v" (include "federation-manager.scheme" .) (include "federation-manager.publicHost" .) $port -}}
{{- end }}

{{- define "federation-manager.keycloak.internalUrl" -}}
{{- $kc := (.Values.global | default dict).keycloak | default dict -}}
{{- printf "http://%s:%v" ($kc.host | default "keycloak") ($kc.port | default 8080) -}}
{{- end }}

{{- define "federation-manager.keycloakIssuer" -}}
{{- $kc := .Values.federationManager.keycloak -}}
{{- if $kc.issuer -}}
{{- trimSuffix "/" $kc.issuer -}}
{{- else -}}
{{- printf "%s/realms/%s" (include "federation-manager.keycloak.publicUrl" .) $kc.realm -}}
{{- end -}}
{{- end }}

{{- define "federation-manager.keycloakJwksUrl" -}}
{{- printf "%s/realms/%s/protocol/openid-connect/certs" (include "federation-manager.keycloak.internalUrl" .) .Values.federationManager.keycloak.realm -}}
{{- end }}

{{- define "federation-manager.db.host" -}}
{{- .Values.federationManager.database.host | default (dig "postgresql" "host" "postgres" (.Values.global | default dict)) -}}
{{- end }}

{{- define "federation-manager.db.port" -}}
{{- .Values.federationManager.database.port | default (dig "postgresql" "port" 5432 (.Values.global | default dict)) -}}
{{- end }}

{{- define "federation-manager.db.secretName" -}}
{{- .Values.federationManager.database.existingSecret | default (dig "postgresql" "secretName" "postgres-credentials" (.Values.global | default dict)) -}}
{{- end }}

{{- define "federation-manager.db.waitImage" -}}
{{- dig "images" "postgres" "postgres:18.6-alpine" (.Values.global | default dict) -}}
{{- end }}
+101 −11
Changes for oop-platform-chart/charts/federation-manager/templates/federation-manager-deployment.yaml: 101 added lines, 11 removed lines.
Original line number Diff line number Diff line
{{- if and .Values.federationManager.enabled (include "federation-manager.authEnabled" .) }}
{{- $c := .Values.federationManager }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.federationManager.name }}
  name: {{ $c.name }}
  namespace: {{ include "federation-manager.namespace" . }}
  labels:
    {{- include "federation-manager.fm.labels" . | nindent 4 }}
@@ -11,7 +12,7 @@ metadata:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  replicas: {{ .Values.federationManager.replicaCount }}
  replicas: {{ $c.replicaCount }}
  selector:
    matchLabels:
      {{- include "federation-manager.fm.selectorLabels" . | nindent 6 }}
@@ -19,23 +20,112 @@ spec:
    metadata:
      labels:
        {{- include "federation-manager.fm.selectorLabels" . | nindent 8 }}
        postgres-client: "true"
      {{- with .Values.commonAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    spec:
      {{- with .Values.federationManager.imagePullSecrets }}
      {{- with $c.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
      {{- end }}

      initContainers:
        - name: wait-for-database
          image: {{ include "federation-manager.db.waitImage" . | quote }}
          imagePullPolicy: IfNotPresent
          env:
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ include "federation-manager.db.secretName" . }}
                  key: {{ $c.database.passwordKey }}
          command: ["/bin/sh", "-c"]
          args:
            - |
              until psql -h {{ include "federation-manager.db.host" . }} -p {{ include "federation-manager.db.port" . }} -U {{ $c.database.user }} -d {{ $c.database.name }} -c 'SELECT 1' >/dev/null 2>&1; do
                echo "waiting for database {{ $c.database.name }} at {{ include "federation-manager.db.host" . }}:{{ include "federation-manager.db.port" . }}"
                sleep 3
              done
      containers:
        - name: federation-manager
          image: "{{ .Values.federationManager.image.repository }}:{{ .Values.federationManager.image.tag }}"
          imagePullPolicy: {{ .Values.federationManager.image.pullPolicy }}
          env:
            - name: NATS_URL
              value: {{ .Values.federationManager.config.nats.url | quote }}
          image: "{{ $c.image.repository }}:{{ $c.image.tag }}"
          imagePullPolicy: {{ $c.image.pullPolicy }}
          securityContext:
            runAsNonRoot: true
            runAsUser: 10001
          ports:
            - name: http
              containerPort: {{ .Values.federationManager.service.targetPort }}
              containerPort: {{ $c.service.targetPort }}
              protocol: TCP
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ include "federation-manager.db.secretName" . }}
                  key: {{ $c.database.passwordKey }}
            - name: FM_POSTGRES_URL
              value: "postgresql+asyncpg://{{ $c.database.user }}:$(DB_PASSWORD)@{{ include "federation-manager.db.host" . }}:{{ include "federation-manager.db.port" . }}/{{ $c.database.name }}"
            - name: FM_POSTGRES_ECHO
              value: {{ $c.database.echo | toString | quote }}
            - name: FM_NATS_URL
              value: {{ $c.nats.url | quote }}
            - name: FM_EVENT_CONSUMER_DURABLE
              value: {{ $c.nats.eventConsumerDurable | quote }}
            - name: FM_SRM_INTERNAL_URL
              value: {{ $c.srm.url | quote }}
            - name: FM_KEYCLOAK_ISSUER
              value: {{ include "federation-manager.keycloakIssuer" . | quote }}
            - name: FM_KEYCLOAK_JWKS_URL
              value: {{ include "federation-manager.keycloakJwksUrl" . | quote }}
            - name: FM_FEDERATION_ID
              value: {{ $c.identity.federationId | quote }}
            - name: FM_COUNTRY_CODE
              value: {{ $c.identity.countryCode | quote }}
            - name: FM_MCC
              value: {{ $c.identity.mcc | toString | quote }}
            - name: FM_MNCS
              value: {{ $c.identity.mncs | toJson | quote }}
            - name: FM_PLATFORM_CAPS
              value: {{ $c.identity.platformCaps | toJson | quote }}
            - name: FM_PARTNER_STATUS_LINK
              value: {{ include "federation-manager.partnerStatusLink" . | quote }}
            - name: FM_INSTANCE_STATUS_LINK
              value: {{ include "federation-manager.instanceStatusLink" . | quote }}
            {{- with $c.availZoneNotifLink }}
            - name: FM_AVAIL_ZONE_NOTIF_LINK
              value: {{ . | quote }}
            {{- end }}
            - name: FM_BOOTSTRAP_FEDERATION
              value: {{ $c.bootstrapFederation | toString | quote }}
            - name: FM_ALLOW_INSECURE_PARTNER_ENDPOINTS
              value: {{ $c.allowInsecurePartnerEndpoints | toString | quote }}
            - name: FM_LOG_LEVEL
              value: {{ $c.logLevel | quote }}
          livenessProbe:
            httpGet:
              path: /healthz
              port: http
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /readyz
              port: http
            periodSeconds: 5
          {{- if $c.partnerSecrets.existingSecret }}
          volumeMounts:
            - name: partner-secrets
              mountPath: {{ $c.partnerSecrets.mountPath }}
              readOnly: true
          {{- end }}
          {{- with $c.resources }}
          resources:
            {{- toYaml .Values.federationManager.resources | nindent 12 }}
            {{- toYaml . | nindent 12 }}
          {{- end }}
      {{- if $c.partnerSecrets.existingSecret }}
      volumes:
        - name: partner-secrets
          secret:
            secretName: {{ $c.partnerSecrets.existingSecret }}
      {{- end }}
{{- end }}
+7 −6
Changes for oop-platform-chart/charts/federation-manager/templates/federation-manager-service.yaml: 7 added lines, 6 removed lines.
Original line number Diff line number Diff line
{{- if and .Values.federationManager.enabled (include "federation-manager.authEnabled" .) }}
{{- $s := .Values.federationManager.service }}
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.federationManager.service.name }}
  name: {{ $s.name }}
  namespace: {{ include "federation-manager.namespace" . }}
  labels:
    {{- include "federation-manager.fm.labels" . | nindent 4 }}
@@ -11,14 +12,14 @@ metadata:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  type: {{ .Values.federationManager.service.type }}
  type: {{ $s.type }}
  ports:
    - name: http
      protocol: TCP
      port: {{ .Values.federationManager.service.port }}
      targetPort: {{ .Values.federationManager.service.targetPort }}
      {{- if and (eq .Values.federationManager.service.type "NodePort") .Values.federationManager.service.nodePort }}
      nodePort: {{ .Values.federationManager.service.nodePort }}
      port: {{ $s.port }}
      targetPort: {{ $s.targetPort }}
      {{- if and (eq $s.type "NodePort") $s.nodePort }}
      nodePort: {{ $s.nodePort }}
      {{- end }}
  selector:
    {{- include "federation-manager.fm.selectorLabels" . | nindent 4 }}
Loading