chore(placement): add uwsgi (#623)

diff --git a/charts/placement/templates/bin/_placement-api.sh.tpl b/charts/placement/templates/bin/_placement-api.sh.tpl
index 2b1b12d..c38fc36 100644
--- a/charts/placement/templates/bin/_placement-api.sh.tpl
+++ b/charts/placement/templates/bin/_placement-api.sh.tpl
@@ -20,39 +20,11 @@
 COMMAND="${@:-start}"
 
 function start () {
-
-  cp -a $(type -p placement-api) /var/www/cgi-bin/placement/
-
-  if [ -f /etc/apache2/envvars ]; then
-    # Loading Apache2 ENV variables
-    source /etc/apache2/envvars
-    # The directory below has to be created due to the fact that
-    # libapache2-mod-wsgi-py3 doesn't create it in contrary by libapache2-mod-wsgi
-    mkdir -p ${APACHE_RUN_DIR}
-  fi
-
-  # Get rid of stale pid file if present.
-  rm -f /var/run/apache2/*.pid
-
-  # Start Apache2
-  {{- if .Values.conf.software.apache2.a2enmod }}
-    {{- range .Values.conf.software.apache2.a2enmod }}
-  a2enmod {{ . }}
-    {{- end }}
-  {{- end }}
-  {{- if .Values.conf.software.apache2.a2dismod }}
-    {{- range .Values.conf.software.apache2.a2dismod }}
-  a2dismod {{ . }}
-    {{- end }}
-  {{- end }}
-  exec {{ .Values.conf.software.apache2.binary }} {{ .Values.conf.software.apache2.start_parameters }}
+  exec uwsgi --ini /etc/placement/placement-api-uwsgi.ini
 }
 
 function stop () {
-  if [ -f /etc/apache2/envvars ]; then
-    source /etc/apache2/envvars
-  fi
-  {{ .Values.conf.software.apache2.binary }} -k graceful-stop
+  kill -TERM 1
 }
 
 $COMMAND
diff --git a/charts/placement/templates/configmap-etc.yaml b/charts/placement/templates/configmap-etc.yaml
index c5880af..e34b2c6 100644
--- a/charts/placement/templates/configmap-etc.yaml
+++ b/charts/placement/templates/configmap-etc.yaml
@@ -57,6 +57,12 @@
 {{- if empty .Values.conf.placement.keystone_authtoken.memcache_secret_key -}}
 {{- $_ := set .Values.conf.placement.keystone_authtoken "memcache_secret_key" ( default ( randAlphaNum 64 ) .Values.endpoints.oslo_cache.auth.memcache_secret_key ) -}}
 {{- end -}}
+
+{{- if empty (index .Values.conf.placement_api_uwsgi.uwsgi "http-socket") -}}
+{{- $http_socket_port := tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | toString }}
+{{- $http_socket := printf "0.0.0.0:%s" $http_socket_port }}
+{{- $_ := set .Values.conf.placement_api_uwsgi.uwsgi "http-socket" $http_socket -}}
+{{- end -}}
 ---
 apiVersion: v1
 kind: Secret
@@ -66,6 +72,6 @@
 data:
   policy.yaml: {{ toYaml .Values.conf.policy | b64enc }}
   placement.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.placement | b64enc }}
+  placement-api-uwsgi.ini: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.placement_api_uwsgi | b64enc }}
   logging.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.logging | b64enc }}
-{{- include "helm-toolkit.snippets.values_template_renderer" (dict "envAll" $envAll "template" .Values.conf.wsgi_placement "key" "wsgi-placement.conf" "format" "Secret" ) | indent 2 }}
 {{- end }}
diff --git a/charts/placement/templates/deployment.yaml b/charts/placement/templates/deployment.yaml
index 605f952..3082216 100644
--- a/charts/placement/templates/deployment.yaml
+++ b/charts/placement/templates/deployment.yaml
@@ -86,14 +86,14 @@
               scheme: {{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_scheme_lookup" | upper }}
               path: /
               port: {{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
-            initialDelaySeconds: 15
+            initialDelaySeconds: 5
             periodSeconds: 10
           livenessProbe:
             httpGet:
               scheme: {{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_scheme_lookup" | upper }}
               path: /
               port: {{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
-            initialDelaySeconds: 50
+            initialDelaySeconds: 5
             periodSeconds: 10
           volumeMounts:
             - name: pod-tmp
@@ -108,6 +108,10 @@
               mountPath: /etc/placement/placement.conf
               subPath: placement.conf
               readOnly: true
+            - name: placement-etc
+              mountPath: /etc/placement/placement-api-uwsgi.ini
+              subPath: placement-api-uwsgi.ini
+              readOnly: true
             {{- if .Values.conf.placement.DEFAULT.log_config_append }}
             - name: placement-etc
               mountPath: {{ .Values.conf.placement.DEFAULT.log_config_append }}
diff --git a/charts/placement/values.yaml b/charts/placement/values.yaml
index 4a702ac..2f4b353 100644
--- a/charts/placement/values.yaml
+++ b/charts/placement/values.yaml
@@ -61,18 +61,6 @@
       port: 30778
 
 conf:
-  software:
-    apache2:
-      binary: apache2
-      start_parameters: -DFOREGROUND
-      # Enable/Disable modules
-      # a2enmod:
-      #   - headers
-      #   - rewrite
-      # a2dismod:
-      #   - status
-      a2enmod: null
-      a2dismod: null
   policy: {}
   placement:
     DEFAULT:
@@ -148,35 +136,23 @@
     formatter_default:
       format: "%(message)s"
       datefmt: "%Y-%m-%d %H:%M:%S"
-  wsgi_placement: |
-    Listen 0.0.0.0:{{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
-    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
-    SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
-    CustomLog /dev/stdout combined env=!forwarded
-    CustomLog /dev/stdout proxy env=forwarded
-    <VirtualHost *:{{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}>
-        WSGIDaemonProcess placement-api processes=4 threads=1 user=placement group=placement display-name=%{GROUP}
-        WSGIProcessGroup placement-api
-        WSGIScriptAlias / /var/www/cgi-bin/placement/placement-api
-        WSGIApplicationGroup %{GLOBAL}
-        WSGIPassAuthorization On
-        <IfVersion >= 2.4>
-          ErrorLogFormat "%{cu}t %M"
-        </IfVersion>
-        ErrorLog /dev/stdout
-        SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
-        CustomLog /dev/stdout combined env=!forwarded
-        CustomLog /dev/stdout proxy env=forwarded
-    </VirtualHost>
-    Alias /placement /var/www/cgi-bin/placement/placement-api
-    <Location /placement>
-        SetHandler wsgi-script
-        Options +ExecCGI
-        WSGIProcessGroup placement-api
-        WSGIApplicationGroup %{GLOBAL}
-        WSGIPassAuthorization On
-    </Location>
+  placement_api_uwsgi:
+    uwsgi:
+      processes: 4
+      add-header: "Connection: close"
+      buffer-size: 65535
+      die-on-term: true
+      enable-threads: true
+      exit-on-reload: false
+      hook-master-start: unix_signal:15 gracefully_kill_them_all
+      lazy-apps: true
+      log-x-forwarded-for: true
+      master: true
+      procname-prefix-spaced: "placement-api:"
+      route-user-agent: '^kube-probe.* donotlog:'
+      thunder-lock: true
+      worker-reload-mercy: 80
+      wsgi-file: /var/lib/openstack/bin/placement-api
 
 endpoints:
   cluster_domain_suffix: cluster.local