This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-helm-chart.git


The following commit(s) were added to refs/heads/master by this push:
     new d0b784a  Feature/pulsar manager initialize (#457)
d0b784a is described below

commit d0b784a953bd3c5bd477e12ee21c9d0bfc5bf2b1
Author: Martin <[email protected]>
AuthorDate: Wed Feb 14 19:13:54 2024 +0100

    Feature/pulsar manager initialize (#457)
    
    * add better pulsar manager integration and init along with tests & docs
    
    * fix pulsar manager startup args
    
    * update pulsar manager service to ClusterIP + remove duplicate
---
 .ci/chart_test.sh                                  |   5 +
 .ci/clusters/values-pulsar-manager.yaml            |  21 ++++
 .ci/helm.sh                                        |  43 ++++++-
 .github/workflows/pulsar-helm-chart-ci.yaml        |   3 +
 README.md                                          |  20 +++
 .../templates/pulsar-manager-admin-secret.yaml     |  27 ++++-
 .../pulsar-manager-cluster-initialize.yaml         | 135 +++++++++++++++++++++
 .../templates/pulsar-manager-deployment.yaml       |  14 +--
 .../pulsar/templates/pulsar-manager-service.yaml   |  30 +++--
 charts/pulsar/values.yaml                          |  30 +++--
 examples/values-minikube.yaml                      |   8 +-
 11 files changed, 295 insertions(+), 41 deletions(-)

diff --git a/.ci/chart_test.sh b/.ci/chart_test.sh
index 624b1ec..7e7b032 100755
--- a/.ci/chart_test.sh
+++ b/.ci/chart_test.sh
@@ -81,5 +81,10 @@ if [[ "$(ci::helm_values_for_deployment | yq 
.components.functions)" == "true" ]
     ci::test_pulsar_function
 fi
 
+if [[ "$(ci::helm_values_for_deployment | yq .components.pulsar_manager)" == 
"true" ]]; then
+    # test manager
+    ci::test_pulsar_manager
+fi
+
 # delete the cluster
 ci::delete_cluster
diff --git a/.ci/clusters/values-pulsar-manager.yaml 
b/.ci/clusters/values-pulsar-manager.yaml
new file mode 100644
index 0000000..25271d4
--- /dev/null
+++ b/.ci/clusters/values-pulsar-manager.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+components:
+  pulsar_manager: true
\ No newline at end of file
diff --git a/.ci/helm.sh b/.ci/helm.sh
index 8289a82..7377525 100644
--- a/.ci/helm.sh
+++ b/.ci/helm.sh
@@ -133,9 +133,8 @@ function ci::install_pulsar_chart() {
                 --timeout=90s
       # configure metallb
       ${KUBECTL} apply -f ${BINDIR}/metallb/metallb-config.yaml
-
       install_args=""
-    else 
+    else
       install_args="--wait --wait-for-jobs --timeout 300s --debug"
     fi
 
@@ -351,3 +350,43 @@ function ci::test_pulsar_function() {
     echo "Consuming output message"
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-client 
consume -s test pulsar-ci/test/test_output
 }
+
+function ci::test_pulsar_manager() {
+  echo "Testing pulsar manager"
+
+  until ${KUBECTL} get jobs -n ${NAMESPACE} ${CLUSTER}-pulsar-manager-init -o 
json | jq -r '.status.conditions[] | select (.type | test("Complete")).status' 
| grep True; do sleep 3; done
+
+
+  echo "Checking Podname"
+  podname=$(${KUBECTL} get pods -n ${NAMESPACE} -l component=pulsar-manager 
--no-headers -o custom-columns=":metadata.name")
+  echo "Getting pulsar manager UI password"
+  PASSWORD=$(${KUBECTL} get secret -n ${NAMESPACE} -l component=pulsar-manager 
-o=jsonpath="{.items[0].data.UI_PASSWORD}" | base64 --decode)
+
+  echo "Getting CSRF_TOKEN"
+  CSRF_TOKEN=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl 
http://127.0.0.1:7750/pulsar-manager/csrf-token)
+
+  echo "Performing login"
+  ${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl -X POST 
http://127.0.0.1:9527/pulsar-manager/login \
+                                                 -H 'Accept: application/json, 
text/plain, */*' \
+                                                 -H 'Content-Type: 
application/json' \
+                                                 -H "X-XSRF-TOKEN: 
$CSRF_TOKEN" \
+                                                 -H "Cookie: 
XSRF-TOKEN=$CSRF_TOKEN" \
+                                                 -sS -D headers.txt \
+                                                 -d '{"username": "pulsar", 
"password": "'${PASSWORD}'"}'
+  LOGIN_TOKEN=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- grep "token:" 
headers.txt | sed 's/^.*: //')
+  LOGIN_JSESSSIONID=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- grep -o 
"JSESSIONID=[a-zA-Z0-9_]*" headers.txt | sed 's/^.*=//')
+
+  echo "Checking environment"
+  envs=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl -X GET 
http://localhost:9527/pulsar-manager/environments \
+                  -H 'Content-Type: application/json' \
+                  -H "token: $LOGIN_TOKEN" \
+                  -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
+                  -H "username: pulsar" \
+                  -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN; 
JSESSIONID=$LOGIN_JSESSSIONID;")
+  number_of_envs=$(echo $envs | jq '.total')
+  if [ "$number_of_envs" -ne 1 ]; then
+    echo "Error: Did not find expected environment"
+    exit 1
+  fi
+}
+
diff --git a/.github/workflows/pulsar-helm-chart-ci.yaml 
b/.github/workflows/pulsar-helm-chart-ci.yaml
index 1a1f86a..bb0932c 100644
--- a/.github/workflows/pulsar-helm-chart-ci.yaml
+++ b/.github/workflows/pulsar-helm-chart-ci.yaml
@@ -205,6 +205,9 @@ jobs:
           - name: PSP
             values_file: .ci/clusters/values-psp.yaml
             shortname: psp
+          - name: Pulsar Manager
+            values_file: .ci/clusters/values-pulsar-manager.yaml
+            shortname: pulsar-manager
         include:
           - k8sVersion:
               version: "1.21.14"
diff --git a/README.md b/README.md
index 4d95643..3a03f10 100644
--- a/README.md
+++ b/README.md
@@ -160,6 +160,26 @@ Otherwise, the helm chart installation will attempt to 
install the CRDs for the
 you'll need to disable each of the component's `PodMonitors`. This is shown in 
some [examples](./examples) and is
 verified in some [tests](./.ci/clusters).
 
+## Pulsar Manager
+
+The Pulsar Manager can be deployed alongside the pulsar cluster instance.
+Depending on the given settings it uses an existing Secret within the given 
namespace or creates a new one, with random
+passwords for both, the UI and the internal database.
+
+To forward the UI use (assumes you did not change the namespace):
+
+```
+kubectl port-forward $(kubectl get pods -l component=pulsar-manager -o 
jsonpath='{.items[0].metadata.name}') 9527:9527
+```
+
+And then opening the browser to http://localhost:9527
+
+The default user is `pulsar` and you can find out the password with this 
command
+
+```
+kubectl get secret -l component=pulsar-manager 
-o=jsonpath="{.items[0].data.UI_PASSWORD}" | base64 --decode
+```
+
 ## Grafana Dashboards
 
 The Apache Pulsar Helm Chart uses the `kube-prometheus-stack` Helm Chart to 
deploy Grafana.
diff --git a/charts/pulsar/templates/pulsar-manager-admin-secret.yaml 
b/charts/pulsar/templates/pulsar-manager-admin-secret.yaml
index be31a47..d1e33a0 100644
--- a/charts/pulsar/templates/pulsar-manager-admin-secret.yaml
+++ b/charts/pulsar/templates/pulsar-manager-admin-secret.yaml
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-{{- if and (or .Values.components.pulsar_manager .Values.extra.pulsar_manager) 
(not .Values.pulsar_manager.existingSecretName) }}
+{{- if and (or .Values.components.pulsar_manager .Values.extra.pulsar_manager) 
}}
 apiVersion: v1
 kind: Secret
 metadata:
@@ -30,10 +30,27 @@ metadata:
     heritage: {{ .Release.Service }}
     component: {{ .Values.pulsar_manager.component }}
     cluster: {{ template "pulsar.fullname" . }}
+    "helm.sh/resource-policy": "keep"  # do not remove when uninstalling to 
keep it for next install
 type: Opaque
 data:
-  {{- if .Values.pulsar_manager.admin}}
-  PULSAR_MANAGER_ADMIN_PASSWORD: {{ .Values.pulsar_manager.admin.password | 
default "pulsar" | b64enc }}
-  PULSAR_MANAGER_ADMIN_USER: {{ .Values.pulsar_manager.admin.user | default 
"pulsar" | b64enc }}
-  {{- end }}
+  {{/*  
https://itnext.io/manage-auto-generated-secrets-in-your-helm-charts-5aee48ba6918
 */}}
+  {{- $namespace := include "pulsar.namespace" . -}}
+  {{- $fullname := include "pulsar.fullname" . -}}
+  {{- $secretName := printf "%s-%s-secret" $fullname 
.Values.pulsar_manager.component -}}
+  {{- $secretObj := lookup "v1" "Secret" $namespace $secretName | default dict 
}}
+  {{- $secretData := (get $secretObj "data") | default dict }}
+
+  {{- $ui_user := (get $secretData "UI_USERNAME") | default 
(.Values.pulsar_manager.admin.ui_username) | default ("pulsar") | b64enc }}
+  {{- $ui_password := (get $secretData "UI_PASSWORD") | default 
(.Values.pulsar_manager.admin.ui_password) | default (randAlphaNum 32) | b64enc 
}}
+  UI_USERNAME: {{ $ui_user | quote }}
+  UI_PASSWORD: {{ $ui_password | quote }}
+
+  {{- $db_user := (get $secretData "DB_USERNAME") | default 
(.Values.pulsar_manager.admin.db_username) | default ("pulsar") | b64enc }}
+  {{- $db_password := (get $secretData "DB_PASSWORD") | default 
(.Values.pulsar_manager.admin.db_password) | default (randAlphaNum 32) | b64enc 
}}
+  DB_USERNAME: {{ $db_user | quote }}
+  DB_PASSWORD: {{ $db_password | quote }}
+
 {{- end }}
+
+
+
diff --git a/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml 
b/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml
new file mode 100644
index 0000000..683fd93
--- /dev/null
+++ b/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml
@@ -0,0 +1,135 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+{{- if or .Release.IsInstall .Values.initialize }}
+{{- if or .Values.components.pulsar_manager .Values.extra.pulsar_manager }}
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-init"
+  namespace: {{ template "pulsar.namespace" . }}
+  labels:
+    {{- include "pulsar.standardLabels" . | nindent 4 }}
+    component: {{ .Values.pulsar_manager.component }}-init
+spec:
+  {{- if or .Values.job.ttl.enabled (semverCompare ">=1.23-0" 
.Capabilities.KubeVersion.Version) }}
+  ttlSecondsAfterFinished: {{ .Values.job.ttl.secondsAfterFinished | default 
600 }}
+  {{- end }}
+  template:
+    spec:
+      nodeSelector:
+      {{- if .Values.pulsar_metadata.nodeSelector }}
+      {{ toYaml .Values.pulsar_metadata.nodeSelector | indent 8 }}
+      {{- end }}
+      tolerations:
+      {{- if .Values.pulsar_metadata.tolerations }}
+      {{ toYaml .Values.pulsar_metadata.tolerations | indent 8 }}
+      {{- end }}
+      restartPolicy: OnFailure
+      initContainers:
+        - name: wait-pulsar-manager-ready
+          image: "{{ template "pulsar.imageFullName" (dict "image" 
.Values.pulsar_metadata.image "root" .) }}"
+          imagePullPolicy: {{ .Values.pulsar_metadata.image.pullPolicy }}
+          resources: {{ toYaml .Values.initContainer.resources | nindent 12 }}
+          command: [ "sh", "-c" ]
+          args:
+            - |
+              ADMIN_URL={{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-admin:{{ 
.Values.pulsar_manager.adminService.port }}
+              until $(curl -sS --fail -X GET http://${ADMIN_URL} > /dev/null 
2>&1); do
+                  sleep 3;
+              done;
+        # This init container will wait for at least one broker to be ready 
before
+        # initializing the pulsar-manager
+        - name: wait-broker-ready
+          image: "{{ template "pulsar.imageFullName" (dict "image" 
.Values.images.proxy "root" .) }}"
+          imagePullPolicy: {{ .Values.images.proxy.pullPolicy }}
+          resources: {{ toYaml .Values.initContainer.resources | nindent 12 }}
+          command: [ "sh", "-c" ]
+          args:
+            - >-
+              set -e;
+              brokerServiceNumber="$(nslookup -timeout=10 {{ template 
"pulsar.fullname" . }}-{{ .Values.broker.component }} | grep Name | wc -l)";
+              until [ ${brokerServiceNumber} -ge 1 ]; do
+                echo "pulsar cluster {{ template "pulsar.cluster.name" . }} 
isn't initialized yet ... check in 10 seconds ...";
+                sleep 10;
+                brokerServiceNumber="$(nslookup -timeout=10 {{ template 
"pulsar.fullname" . }}-{{ .Values.broker.component }} | grep Name | wc -l)";
+              done;
+      containers:
+        - name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-init"
+          image: "{{ template "pulsar.imageFullName" (dict "image" 
.Values.pulsar_metadata.image "root" .) }}"
+          imagePullPolicy: {{ .Values.pulsar_metadata.image.pullPolicy }}
+          {{- if .Values.pulsar_metadata.resources }}
+          resources: {{ toYaml .Values.pulsar_metadata.resources | nindent 12 
}}
+          {{- end }}
+          command: [ "sh", "-c" ]
+          args:
+            - |
+              ADMIN_URL={{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-admin:{{ 
.Values.pulsar_manager.adminService.port }}
+              CSRF_TOKEN=$(curl http://${ADMIN_URL}/pulsar-manager/csrf-token)
+              {{/* set admin credentials */}}
+              curl -v \
+                -X PUT http://${ADMIN_URL}/pulsar-manager/users/superuser \
+                -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
+                -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
+                -H 'Content-Type: application/json' \
+                -d '{"name": "'"${USERNAME}"'", "password": "'"${PASSWORD}"'", 
"description": "Helm-managed Admin Account", "email": 
"'"${USERNAME}"'@pulsar.org"}'
+
+              UI_URL={{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}:{{ .Values.pulsar_manager.service.port }}
+              {{/* login as admin */}}
+              curl -v \
+                -X POST http://${UI_URL}/pulsar-manager/login \
+                -H 'Accept: application/json, text/plain, */*' \
+                -H 'Content-Type: application/json' \
+                -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
+                -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN" \
+                -sS -D headers.txt \
+                -d '{"username": "'${USERNAME}'", "password": "'${PASSWORD}'"}'
+
+              LOGIN_TOKEN=$(grep "token:" headers.txt | sed 's/^.*: //')
+              LOGIN_JSESSSIONID=$(grep -o "JSESSIONID=[a-zA-Z0-9_]*" 
headers.txt | sed 's/^.*=//')
+
+              {{/* create environment */}}
+              {{- if or (not .Values.tls.enabled) (not 
.Values.tls.broker.enabled) }}
+              BROKER_URL="http://{{ template "pulsar.fullname" . }}-{{ 
.Values.broker.component }}:{{ .Values.broker.ports.http }}"
+              {{- else }}
+              BROKER_URL="https://{{ template "pulsar.fullname" . }}-{{ 
.Values.broker.component }}:{{ .Values.broker.ports.https }}"
+              {{- end }}
+              BOOKIE_URL="http://{{ template "pulsar.fullname" . }}-{{ 
.Values.bookkeeper.component }}:{{ .Values.bookkeeper.ports.http }}"
+
+              curl -v \
+                -X PUT 
http://${UI_URL}/pulsar-manager/environments/environment \
+                -H 'Content-Type: application/json' \
+                -H "token: $LOGIN_TOKEN" \
+                -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
+                -H "username: $USERNAME" \
+                -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN; 
JSESSIONID=$LOGIN_JSESSSIONID;" \
+                -d '{ "name": "{{ template "pulsar.fullname" . }}", "broker": 
"'$BROKER_URL'", "bookie": "'$BOOKIE_URL'"}'
+          env:
+            - name: USERNAME
+              valueFrom:
+                secretKeyRef:
+                  name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-secret"
+                  key: UI_USERNAME
+            - name: PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-secret"
+                  key: UI_PASSWORD
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/charts/pulsar/templates/pulsar-manager-deployment.yaml 
b/charts/pulsar/templates/pulsar-manager-deployment.yaml
index b1b1434..75e236c 100644
--- a/charts/pulsar/templates/pulsar-manager-deployment.yaml
+++ b/charts/pulsar/templates/pulsar-manager-deployment.yaml
@@ -64,7 +64,7 @@ spec:
         {{- end }}
           ports:
           - containerPort: {{ .Values.pulsar_manager.service.targetPort }}
-          - containerPort: {{ .Values.pulsar_manager.service.adminTargetPort }}
+          - containerPort: {{ .Values.pulsar_manager.adminService.targetPort }}
           volumeMounts:
           - name: pulsar-manager-data
             mountPath: /data
@@ -77,21 +77,13 @@ spec:
           - name: USERNAME
             valueFrom:
               secretKeyRef:
-                key: PULSAR_MANAGER_ADMIN_USER
-                {{- if .Values.pulsar_manager.existingSecretName }}
-                name: "{{ .Values.pulsar_manager.existingSecretName }}"
-                {{- else }}
                 name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-secret"
-                {{- end }}
+                key: DB_USERNAME
           - name: PASSWORD
             valueFrom:
               secretKeyRef:
-                key: PULSAR_MANAGER_ADMIN_PASSWORD
-                {{- if .Values.pulsar_manager.existingSecretName }}
-                name: "{{ .Values.pulsar_manager.existingSecretName }}"
-                {{- else }}
                 name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-secret"
-                {{- end }}
+                key: DB_PASSWORD
           - name: PULSAR_MANAGER_OPTS
             value: "$(PULSAR_MANAGER_OPTS) -Dlog4j2.formatMsgNoLookups=true"
         {{- include "pulsar.imagePullSecrets" . | nindent 6}}
diff --git a/charts/pulsar/templates/pulsar-manager-service.yaml 
b/charts/pulsar/templates/pulsar-manager-service.yaml
index 031c929..bf08955 100644
--- a/charts/pulsar/templates/pulsar-manager-service.yaml
+++ b/charts/pulsar/templates/pulsar-manager-service.yaml
@@ -41,15 +41,31 @@ spec:
       port: {{ .Values.pulsar_manager.service.port }}
       targetPort: {{ .Values.pulsar_manager.service.targetPort }}
       protocol: TCP
-    - name: admin
-      port: {{ .Values.pulsar_manager.service.adminPort }}
-      targetPort: {{ .Values.pulsar_manager.service.adminTargetPort }}
+  selector:
+    {{- include "pulsar.matchLabels" . | nindent 4 }}
+    component: {{ .Values.pulsar_manager.component }}
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: "{{ template "pulsar.fullname" . }}-{{ 
.Values.pulsar_manager.component }}-admin"
+  namespace: {{ template "pulsar.namespace" . }}
+  labels:
+    {{- include "pulsar.standardLabels" . | nindent 4 }}
+    component: {{ .Values.pulsar_manager.component }}
+  annotations:
+{{ toYaml .Values.pulsar_manager.adminService.annotations | indent 4 }}
+spec:
+  type: {{ .Values.pulsar_manager.adminService.type }}
+  ports:
+    - port: {{ .Values.pulsar_manager.adminService.port }}
+      targetPort: {{ .Values.pulsar_manager.adminService.targetPort }}
       protocol: TCP
   selector:
     {{- include "pulsar.matchLabels" . | nindent 4 }}
     component: {{ .Values.pulsar_manager.component }}
-{{- if .Values.pulsar_manager.service.loadBalancerSourceRanges }}
-  loadBalancerSourceRanges:
-{{ toYaml .Values.pulsar_manager.service.loadBalancerSourceRanges | indent 4 }}
-{{- end }}
+
 {{- end }}
+
diff --git a/charts/pulsar/values.yaml b/charts/pulsar/values.yaml
index bba3207..d2594d9 100644
--- a/charts/pulsar/values.yaml
+++ b/charts/pulsar/values.yaml
@@ -1314,17 +1314,18 @@ pulsar_manager:
     ## If you enabled authentication support
     ## JWT_TOKEN: <token>
     ## SECRET_KEY: data:base64,<secret key>
+
+    # the pulsar manager image relies on these variables, if they are not set 
the backend will keep crashing
+    # however, feel free to overwrite them
+    SPRING_CONFIGURATION_FILE: 
"/pulsar-manager/pulsar-manager/application.properties"
+    PULSAR_MANAGER_OPTS: " -Dlog4j2.formatMsgNoLookups=true"
   ## Pulsar manager service
   ## templates/pulsar-manager-service.yaml
   ##
   service:
-    type: LoadBalancer
-
+    type: ClusterIP
     port: 9527
     targetPort: 9527
-    adminPort: 7750
-    adminTargetPort: 7750
-
     annotations: {}
     ## Set external traffic policy to: "Local" to preserve source IP on 
providers supporting it.
     ## Ref: 
https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer
@@ -1332,6 +1333,11 @@ pulsar_manager:
     ## Restrict traffic through the load balancer to specified IPs on 
providers supporting it.
     # loadBalancerSourceRanges:
     #   - 10.0.0.0/8
+  adminService:
+    type: ClusterIP
+    port: 7750
+    targetPort: 7750
+    annotations: {}
   ## Pulsar manager ingress
   ## templates/pulsar-manager-ingress.yaml
   ##
@@ -1348,15 +1354,21 @@ pulsar_manager:
     hostname: ""
     path: "/"
 
-  ## If set use existing secret with specified name to set pulsar admin 
credentials.
-  existingSecretName:
+  ## On first install, the helm chart tries to reuse an existing secret with 
matching name by default
+  ## if this should fail it uses the given username and password to create a 
new secret
+  ## if either are missing the default value of "pulsar" is used for the 
username or a random password is generated
+  ## And decode any key by using:
+  ## kubectl get secret -l component=pulsar-manager 
-o=jsonpath="{.items[0].data.UI_PASSWORD}" | base64 --decode
   admin:
-    user: pulsar
-    password: pulsar
+    ui_username: "pulsar"
+    ui_password: ""  # leave empty for random password
+    db_username: "pulsar"
+    db_password: ""  # leave empty for random password
 
 # These are jobs where job ttl configuration is used
 # pulsar-helm-chart/charts/pulsar/templates/pulsar-cluster-initialize.yaml
 # pulsar-helm-chart/charts/pulsar/templates/bookkeeper-cluster-initialize.yaml
+# 
pulsar-helm-chart/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml
 job:
   ttl:
     enabled: false
diff --git a/examples/values-minikube.yaml b/examples/values-minikube.yaml
index 6c52107..096088a 100644
--- a/examples/values-minikube.yaml
+++ b/examples/values-minikube.yaml
@@ -55,10 +55,4 @@ broker:
     managedLedgerDefaultAckQuorum: "1"
 
 proxy:
-  replicaCount: 1
-
-pulsar_manager:
-  configData:
-    ENV_SPRING_CONFIGURATION_FILE: 
"/pulsar-manager/pulsar-manager/application.properties"
-    SPRING_CONFIGURATION_FILE: 
"/pulsar-manager/pulsar-manager/application.properties"
-    PULSAR_MANAGER_OPTS: " -Dlog4j2.formatMsgNoLookups=true"
\ No newline at end of file
+  replicaCount: 1
\ No newline at end of file

Reply via email to