{{/*
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 := . }}

{{- $manila_auth_url := tuple "identity" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup" }}
{{- $manila_region_name := .Values.endpoints.identity.auth.manila.region_name }}
{{- $manila_project_name := .Values.endpoints.identity.auth.manila.project_name }}
{{- $manila_project_domain_name := .Values.endpoints.identity.auth.manila.project_domain_name }}
{{- $manila_user_domain_name := .Values.endpoints.identity.auth.manila.user_domain_name }}
{{- $manila_username := .Values.endpoints.identity.auth.manila.username }}
{{- $manila_password := .Values.endpoints.identity.auth.manila.password }}
{{- $memcached_servers := tuple "oslo_cache" "internal" "memcache" . | include "helm-toolkit.endpoints.host_and_port_endpoint_uri_lookup" }}
{{- $memcache_secret_key := default ( randAlphaNum 64 ) .Values.endpoints.oslo_cache.auth.memcache_secret_key }}

{{- if empty .Values.conf.manila.keystone_authtoken.auth_uri -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "auth_uri" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.keystone_authtoken.auth_url -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "auth_url" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.keystone_authtoken.region_name -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "region_name" $manila_region_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.project_name -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "project_name" $manila_project_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.project_domain_name -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "project_domain_name" $manila_project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.user_domain_name -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "user_domain_name" $manila_user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.username -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "username" $manila_username -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.password -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "password" $manila_password -}}
{{- end -}}

{{- if empty .Values.conf.manila.keystone_authtoken.memcached_servers -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "memcached_servers" $memcached_servers -}}
{{- end -}}
{{- if empty .Values.conf.manila.keystone_authtoken.memcache_secret_key -}}
{{- $_ := set .Values.conf.manila.keystone_authtoken "memcache_secret_key" $memcache_secret_key -}}
{{- end -}}

{{- if not .Values.conf.paste }}
{{- $_ := set $envAll.Values.conf.manila.DEFAULT "api_paste_config" "/var/lib/openstack/etc/manila/api-paste.ini" -}}
{{- end }}

{{- if empty .Values.conf.manila.database.connection -}}
{{- $_ := tuple "oslo_db" "internal" "manila" "mysql" . | include "helm-toolkit.endpoints.authenticated_endpoint_uri_lookup"| set .Values.conf.manila.database "connection" -}}
{{- end -}}

{{- if empty .Values.conf.manila.DEFAULT.transport_url -}}
{{- $_ := tuple "oslo_messaging" "internal" "manila" "amqp" . | include "helm-toolkit.endpoints.authenticated_transport_endpoint_uri_lookup" | set .Values.conf.manila.DEFAULT "transport_url" -}}
{{- end -}}

# neutron
{{- if empty .Values.conf.manila.neutron.auth_uri -}}
{{- $_ := set .Values.conf.manila.neutron "auth_uri" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.neutron.auth_url -}}
{{- $_ := set .Values.conf.manila.neutron "auth_url" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.neutron.region_name -}}
{{- $_ := set .Values.conf.manila.neutron "region_name" .Values.endpoints.identity.auth.manila.region_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.project_name -}}
{{- $_ := set .Values.conf.manila.neutron "project_name" $manila_project_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.project_domain_name -}}
{{- $_ := set .Values.conf.manila.neutron "project_domain_name" $manila_project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.user_domain_name -}}
{{- $_ := set .Values.conf.manila.neutron "user_domain_name" $manila_user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.username -}}
{{- $_ := set .Values.conf.manila.neutron "username" $manila_username -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.password -}}
{{- $_ := set .Values.conf.manila.neutron "password" $manila_password -}}
{{- end -}}

{{- if empty .Values.conf.manila.neutron.memcached_servers -}}
{{- $_ := set .Values.conf.manila.neutron "memcached_servers" $memcached_servers -}}
{{- end -}}
{{- if empty .Values.conf.manila.neutron.memcache_secret_key -}}
{{- $_ := set .Values.conf.manila.neutron "memcache_secret_key" $memcache_secret_key -}}
{{- end -}}

# nova
{{- if empty .Values.conf.manila.nova.auth_uri -}}
{{- $_ := set .Values.conf.manila.nova "auth_uri" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.nova.auth_url -}}
{{- $_ := set .Values.conf.manila.nova "auth_url" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.nova.region_name -}}
{{- $_ := set .Values.conf.manila.nova "region_name" .Values.endpoints.identity.auth.manila.region_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.project_name -}}
{{- $_ := set .Values.conf.manila.nova "project_name" $manila_project_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.project_domain_name -}}
{{- $_ := set .Values.conf.manila.nova "project_domain_name" $manila_project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.user_domain_name -}}
{{- $_ := set .Values.conf.manila.nova "user_domain_name" $manila_user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.username -}}
{{- $_ := set .Values.conf.manila.nova "username" $manila_username -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.password -}}
{{- $_ := set .Values.conf.manila.nova "password" $manila_password -}}
{{- end -}}

{{- if empty .Values.conf.manila.nova.memcached_servers -}}
{{- $_ := set .Values.conf.manila.nova "memcached_servers" $memcached_servers -}}
{{- end -}}
{{- if empty .Values.conf.manila.nova.memcache_secret_key -}}
{{- $_ := set .Values.conf.manila.nova "memcache_secret_key" $memcache_secret_key -}}
{{- end -}}

# cinder
{{- if empty .Values.conf.manila.cinder.auth_uri -}}
{{- $_ := set .Values.conf.manila.cinder "auth_uri" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.cinder.auth_url -}}
{{- $_ := set .Values.conf.manila.cinder "auth_url" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.cinder.region_name -}}
{{- $_ := set .Values.conf.manila.cinder "region_name" .Values.endpoints.identity.auth.manila.region_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.project_name -}}
{{- $_ := set .Values.conf.manila.cinder "project_name" $manila_project_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.project_domain_name -}}
{{- $_ := set .Values.conf.manila.cinder "project_domain_name" $manila_project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.user_domain_name -}}
{{- $_ := set .Values.conf.manila.cinder "user_domain_name" $manila_user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.username -}}
{{- $_ := set .Values.conf.manila.cinder "username" $manila_username -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.password -}}
{{- $_ := set .Values.conf.manila.cinder "password" $manila_password -}}
{{- end -}}

{{- if empty .Values.conf.manila.cinder.memcached_servers -}}
{{- $_ := set .Values.conf.manila.cinder "memcached_servers" $memcached_servers -}}
{{- end -}}
{{- if empty .Values.conf.manila.cinder.memcache_secret_key -}}
{{- $_ := set .Values.conf.manila.cinder "memcache_secret_key" $memcache_secret_key -}}
{{- end -}}

# glance
{{- if empty .Values.conf.manila.glance.auth_uri -}}
{{- $_ := set .Values.conf.manila.glance "auth_uri" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.glance.auth_url -}}
{{- $_ := set .Values.conf.manila.glance "auth_url" $manila_auth_url -}}
{{- end -}}

{{- if empty .Values.conf.manila.glance.region_name -}}
{{- $_ := set .Values.conf.manila.glance "region_name" .Values.endpoints.identity.auth.manila.region_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.project_name -}}
{{- $_ := set .Values.conf.manila.glance "project_name" $manila_project_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.project_domain_name -}}
{{- $_ := set .Values.conf.manila.glance "project_domain_name" $manila_project_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.user_domain_name -}}
{{- $_ := set .Values.conf.manila.glance "user_domain_name" $manila_user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.username -}}
{{- $_ := set .Values.conf.manila.glance "username" $manila_username -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.password -}}
{{- $_ := set .Values.conf.manila.glance "password" $manila_password -}}
{{- end -}}

{{- if empty .Values.conf.manila.glance.memcached_servers -}}
{{- $_ := set .Values.conf.manila.glance "memcached_servers" $memcached_servers -}}
{{- end -}}
{{- if empty .Values.conf.manila.glance.memcache_secret_key -}}
{{- $_ := set .Values.conf.manila.glance "memcache_secret_key" $memcache_secret_key -}}
{{- end -}}

{{- if empty .Values.conf.manila_api_uwsgi.uwsgi.processes -}}
{{- $_ := set .Values.conf.manila_api_uwsgi.uwsgi "processes" .Values.conf.manila.DEFAULT.osapi_share_workers -}}
{{- end -}}
{{- if empty (index .Values.conf.manila_api_uwsgi.uwsgi "http-socket") -}}
{{- $http_socket_port := tuple "sharev2" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | toString }}
{{- $http_socket := printf "0.0.0.0:%s" $http_socket_port }}
{{- $_ := set .Values.conf.manila_api_uwsgi.uwsgi "http-socket" $http_socket -}}
{{- end -}}

{{- if and (empty .Values.conf.logging.handler_fluent) (has "fluent" .Values.conf.logging.handlers.keys) -}}
{{- $fluentd_host := tuple "fluentd" "internal" $envAll | include "helm-toolkit.endpoints.hostname_namespaced_endpoint_lookup" }}
{{- $fluentd_port := tuple "fluentd" "internal" "service" $envAll | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{- $fluent_args := printf "('%s.%s', '%s', %s)" .Release.Namespace .Release.Name $fluentd_host $fluentd_port }}
{{- $handler_fluent := dict "class" "fluent.handler.FluentHandler" "formatter" "fluent" "args" $fluent_args -}}
{{- $_ := set .Values.conf.logging "handler_fluent" $handler_fluent -}}
{{- end -}}

{{- if and (empty .Values.conf.logging.formatter_fluent) (has "fluent" .Values.conf.logging.formatters.keys) -}}
{{- $formatter_fluent := dict "class" "oslo_log.formatters.FluentFormatter" -}}
{{- $_ := set .Values.conf.logging "formatter_fluent" $formatter_fluent -}}
{{- end -}}
---
apiVersion: v1
kind: Secret
metadata:
  name: manila-etc
type: Opaque
data:
  rally_tests.yaml: {{ toYaml .Values.conf.rally_tests.tests | b64enc }}
  manila.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.manila | b64enc }}
  manila-api-uwsgi.ini: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.manila_api_uwsgi | b64enc }}
{{- range $key, $value := $envAll.Values.conf.rootwrap_filters }}
{{- $filePrefix := replace "_" "-"  $key }}
  {{ printf "%s.filters" $filePrefix }}: {{ $value.content | b64enc }}
{{- end }}
  logging.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.logging | b64enc }}
  {{- if .Values.conf.paste }}
  api-paste.ini: {{ include "helm-toolkit.utils.to_ini" .Values.conf.paste | b64enc }}
  {{- end }}
  policy.yaml: {{ toYaml .Values.conf.policy | b64enc }}
  manila_sudoers: {{ $envAll.Values.conf.manila_sudoers | b64enc }}
  rootwrap.conf: {{ $envAll.Values.conf.rootwrap | b64enc }}
{{- end }}
