{{/*
Licensed 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 .Values.manifests.configmap_etc }}
{{- $envAll := . }}

{{- if empty .Values.conf.tempest.auth.admin_username -}}
{{- $_ := set .Values.conf.tempest.auth "admin_username" .Values.endpoints.identity.auth.admin.username -}}
{{- end -}}
{{- if empty .Values.conf.tempest.auth.admin_password -}}
{{- $_ := set .Values.conf.tempest.auth "admin_password" .Values.endpoints.identity.auth.admin.password -}}
{{- end -}}
{{- if empty .Values.conf.tempest.auth.admin_project_name -}}
{{- $_ := set .Values.conf.tempest.auth "admin_project_name" .Values.endpoints.identity.auth.admin.project_name -}}
{{- end -}}
{{- if empty .Values.conf.tempest.auth.admin_domain_name -}}
{{- $_ := set .Values.conf.tempest.auth "admin_domain_name" .Values.endpoints.identity.auth.admin.user_domain_name -}}
{{- end -}}

{{- if empty .Values.conf.tempest.identity.uri_v3 -}}
{{- $_ := tuple "identity" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.tempest.identity "uri_v3" -}}
{{- end -}}
{{- if empty .Values.conf.tempest.identity.region -}}
{{- $_ := set .Values.conf.tempest.identity "region" .Values.endpoints.identity.auth.admin.region_name -}}
{{- end -}}

{{- if .Values.conf.tempest.service_available.heat -}}
{{- if empty .Values.conf.tempest.heat_plugin.username -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "username" .Values.endpoints.identity.auth.tempest.username -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.password -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "password" .Values.endpoints.identity.auth.tempest.password -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.project_name -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "project_name" .Values.endpoints.identity.auth.tempest.project_name -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.admin_username -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "admin_username" .Values.endpoints.identity.auth.admin.username -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.admin_password -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "admin_password" .Values.endpoints.identity.auth.admin.password -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.admin_project_name -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "admin_project_name" .Values.endpoints.identity.auth.admin.project_name -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.auth_url -}}
{{- $_ := tuple "identity" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.tempest.heat_plugin "auth_url" -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.region -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "region" .Values.endpoints.identity.auth.admin.region_name -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.project_domain_name -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "project_domain_name" .Values.endpoints.identity.auth.tempest.project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.tempest.heat_plugin.user_domain_name -}}
{{- $_ := set .Values.conf.tempest.heat_plugin "user_domain_name" .Values.endpoints.identity.auth.tempest.user_domain_name -}}
{{- end -}}
{{- end -}}

{{- if empty .Values.conf.tempest.dashboard.dashboard_url -}}
{{- $endpointScheme := tuple "dashboard" "public" "web" . | include "helm-toolkit.endpoints.keystone_endpoint_scheme_lookup" }}
{{- $endpointHost := tuple "dashboard" "public" . | include "helm-toolkit.endpoints.endpoint_host_lookup" }}
{{- $endpointPort := tuple "dashboard" "public" "web" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{- $endpointPath := tuple "dashboard" "public" "web" . | include "helm-toolkit.endpoints.keystone_endpoint_path_lookup" }}
    # When CSRF protection is enabled Refferer and Host header should match.
    # Common browsers doesn't add default ports like 80 and 443 to the headers
    # Use the same logic here to make sure test passed when CSRF protection is enabled and
    # we using default port numbers. More info may be found here:
    # * https://code.djangoproject.com/ticket/26037
    # * https://stackoverflow.com/questions/27533011/django-csrf-error-casused-by-nginx-x-forwarded-host
    {{- if eq $endpointPort "80" "443" }}
        {{- printf "%s://%s%s" $endpointScheme $endpointHost $endpointPath | set .Values.conf.tempest.dashboard "dashboard_url" }}
    {{- else }}
        {{- printf "%s://%s:%s%s" $endpointScheme $endpointHost $endpointPort $endpointPath | set .Values.conf.tempest.dashboard "dashboard_url" }}
    {{- end }}
{{- end -}}

---
apiVersion: v1
kind: Secret
metadata:
  name: tempest-etc
type: Opaque
data:
  tempest.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.tempest | b64enc }}
  logging.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.tempest_logging | b64enc }}
{{ if not (empty .Values.conf.blacklist) }}
  test-blacklist: {{ include "tempest.utils.to_regex_file" .Values.conf.blacklist | b64enc }}
{{ end }}
{{ if not (empty .Values.conf.whitelist) }}
  test-whitelist: {{ include "tempest.utils.to_regex_file" .Values.conf.whitelist | b64enc }}
{{ end }}
{{- end }}
