#
# 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.
#

** Please be patient while the chart StreamPark {{ .Chart.AppVersion }} is being deployed **

Access StreamPark UI URL by:

ChartVersion:{{ .Chart.Version}}[refers to the release version]
appVersion:{{ .Chart.Version }}[refers to the code version]

{{- if .Values.ingress.enabled }}

  StreamPark UI URL: https://{{ .Values.ingress.host }}/streampark

{{- else if eq .Values.service.type "NodePort" }}

You can try the following command to get the ip, port of StreamPark:
kubectl get no -n {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}"
kubectl get svc {{ .Values.service.name }} -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}"

{{- end }}
