diff --git a/.ci/helm.sh b/.ci/helm.sh index 9945d19..d7b48b4 100644 --- a/.ci/helm.sh +++ b/.ci/helm.sh @@ -355,8 +355,10 @@ 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 - - + ${KUBECTL} describe job -n ${NAMESPACE} ${CLUSTER}-pulsar-manager-init + ${KUBECTL} logs -n ${NAMESPACE} job.batch/${CLUSTER}-pulsar-manager-init + # this line errors in some tests? - i do not know why, but is really useful for debugging, try: cat ./pulsar-manager.log otherwise + # ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-pulsar-manager-0 -- cat /pulsar-manager/pulsar-manager/pulsar-manager.log 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" @@ -377,7 +379,7 @@ function ci::test_pulsar_manager() { LOGIN_JSESSIONID=$(${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 \ + envs=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl -X GET http://127.0.0.1:9527/pulsar-manager/environments \ -H 'Content-Type: application/json' \ -H "token: $LOGIN_TOKEN" \ -H "X-XSRF-TOKEN: $CSRF_TOKEN" \ @@ -393,7 +395,7 @@ function ci::test_pulsar_manager() { # Force manager to query broker for tenant info. This will require use of the manager's JWT, if JWT authentication is enabled. echo "Checking tenants" pulsar_env=$(echo $envs | jq -r '.data[0].name') - tenants=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl -X GET http://localhost:9527/pulsar-manager/admin/v2/tenants \ + tenants=$(${KUBECTL} exec -n ${NAMESPACE} ${podname} -- curl -X GET http://127.0.0.1:9527/pulsar-manager/admin/v2/tenants \ -H 'Content-Type: application/json' \ -H "token: $LOGIN_TOKEN" \ -H "X-XSRF-TOKEN: $CSRF_TOKEN" \ diff --git a/charts/pulsar/templates/pulsar-manager-admin-secret.yaml b/charts/pulsar/templates/pulsar-manager-admin-secret.yaml index 90cf91f..8d20b26 100644 --- a/charts/pulsar/templates/pulsar-manager-admin-secret.yaml +++ b/charts/pulsar/templates/pulsar-manager-admin-secret.yaml @@ -40,13 +40,13 @@ data: {{- $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_user := ((get $secretData "UI_USERNAME") | b64dec) | default (.Values.pulsar_manager.admin.ui_username) | default ("pulsar") | b64enc }} + {{- $ui_password := ((get $secretData "UI_PASSWORD") | b64dec) | 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_user := ((get $secretData "DB_USERNAME") | b64dec) | default (.Values.pulsar_manager.admin.db_username) | default ("pulsar") | b64enc }} + {{- $db_password := ((get $secretData "DB_PASSWORD") | b64dec) | default (.Values.pulsar_manager.admin.db_password) | default (randAlphaNum 32) | b64enc }} DB_USERNAME: {{ $db_user | quote }} DB_PASSWORD: {{ $db_password | quote }} diff --git a/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml b/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml index 14ff169..419391f 100644 --- a/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml +++ b/charts/pulsar/templates/pulsar-manager-cluster-initialize.yaml @@ -82,24 +82,41 @@ spec: - | 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 \ + + {{/* check if account is already existing */}} + LOGIN_REPLY=$(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}'"}' + -d '{"username": "'${USERNAME}'", "password": "'${PASSWORD}'"}') + echo "$LOGIN_REPLY" + + if [ -n "$(echo "$LOGIN_REPLY" | grep 'success')" ]; then + echo "account already exists" + else + echo "creating account" + {{/* 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"}' + {{/* login as admin */}} + LOGIN_REPLY=$(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}'"}') + echo "$LOGIN_REPLY" + fi LOGIN_TOKEN=$(grep "token:" headers.txt | sed 's/^.*: //') LOGIN_JSESSSIONID=$(grep -o "JSESSIONID=[a-zA-Z0-9_]*" headers.txt | sed 's/^.*=//') @@ -111,15 +128,25 @@ spec: 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 }}" + echo '{ "name": "{{ template "pulsar.fullname" . }}", "broker": "'$BROKER_URL'", "bookie": "'$BOOKIE_URL'"}' - curl -v \ + ENVIRONMENT_REPLY=$(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'"}' + -d '{ "name": "{{ template "pulsar.fullname" . }}", "broker": "'$BROKER_URL'", "bookie": "'$BOOKIE_URL'"}') + echo "$ENVIRONMENT_REPLY" + + if [ -n "$(echo "$ENVIRONMENT_REPLY" | grep -e 'success' -e 'exist')" ]; then + echo "Successfully created / found existing environment" + exit 0 + else + echo "Error creating environment" + exit 1 + fi env: - name: USERNAME valueFrom: