chore(designate): use uwsgi (#604)

* chore(designate): use uwsgi

* Update image tag
diff --git a/charts/designate/templates/bin/_designate-api.sh.tpl b/charts/designate/templates/bin/_designate-api.sh.tpl
index c1dfa37..f2e41a6 100644
--- a/charts/designate/templates/bin/_designate-api.sh.tpl
+++ b/charts/designate/templates/bin/_designate-api.sh.tpl
@@ -16,8 +16,7 @@
 COMMAND="${@:-start}"
 
 function start () {
-  exec designate-api \
-      --config-file /etc/designate/designate.conf
+  exec uwsgi --ini /etc/designate/designate-api-uwsgi.ini
 }
 
 function stop () {
diff --git a/charts/designate/templates/configmap-etc.yaml b/charts/designate/templates/configmap-etc.yaml
index dd1d4a2..6b09894 100644
--- a/charts/designate/templates/configmap-etc.yaml
+++ b/charts/designate/templates/configmap-etc.yaml
@@ -65,6 +65,15 @@
 {{- if empty (index .Values.conf.designate "service:api").api_base_uri -}}
 {{- $_ := tuple "dns" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup" | set (index .Values.conf.designate "service:api") "api_base_uri" -}}
 {{- end -}}
+
+{{- if empty .Values.conf.designate_api_uwsgi.uwsgi.processes -}}
+{{- $_ := set .Values.conf.designate_api_uwsgi.uwsgi "processes" (index .Values.conf.designate "service:api").workers -}}
+{{- end -}}
+{{- if empty (index .Values.conf.designate_api_uwsgi.uwsgi "http-socket") -}}
+{{- $http_socket_port := tuple "dns" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | toString }}
+{{- $http_socket := printf "0.0.0.0:%s" $http_socket_port }}
+{{- $_ := set .Values.conf.designate_api_uwsgi.uwsgi "http-socket" $http_socket -}}
+{{- end -}}
 ---
 apiVersion: v1
 kind: Secret
@@ -73,6 +82,7 @@
 type: Opaque
 data:
   designate.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.designate | b64enc }}
+  designate-api-uwsgi.ini: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.designate_api_uwsgi | b64enc }}
   api-paste.ini: {{ include "helm-toolkit.utils.to_ini" .Values.conf.paste | b64enc }}
   policy.yaml: {{ toYaml .Values.conf.policy | b64enc }}
   logging.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.logging | b64enc }}
diff --git a/charts/designate/templates/deployment-api.yaml b/charts/designate/templates/deployment-api.yaml
index b6680d8..e9df6b6 100644
--- a/charts/designate/templates/deployment-api.yaml
+++ b/charts/designate/templates/deployment-api.yaml
@@ -92,6 +92,10 @@
               mountPath: /etc/designate/policy.yaml
               subPath: policy.yaml
               readOnly: true
+            - name: designate-etc
+              mountPath: /etc/designate/designate-api-uwsgi.ini
+              subPath: designate-api-uwsgi.ini
+              readOnly: true
             {{- if .Values.conf.designate.DEFAULT.log_config_append }}
             - name: designate-etc
               mountPath: {{ .Values.conf.designate.DEFAULT.log_config_append }}
diff --git a/charts/designate/values.yaml b/charts/designate/values.yaml
index 1892dd2..80051e7 100644
--- a/charts/designate/values.yaml
+++ b/charts/designate/values.yaml
@@ -528,6 +528,22 @@
     formatter_default:
       format: "%(message)s"
       datefmt: "%Y-%m-%d %H:%M:%S"
+  designate_api_uwsgi:
+    uwsgi:
+      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: "designate-api:"
+      route-user-agent: '^kube-probe.* donotlog:'
+      thunder-lock: true
+      worker-reload-mercy: 80
+      wsgi-file: /var/lib/openstack/bin/designate-api-wsgi
 
 # Names of secrets used by bootstrap and environmental checks
 secrets:
diff --git a/roles/defaults/vars/main.yml b/roles/defaults/vars/main.yml
index 93be37c..a169385 100644
--- a/roles/defaults/vars/main.yml
+++ b/roles/defaults/vars/main.yml
@@ -46,13 +46,13 @@
   db_drop: quay.io/vexxhost/heat@sha256:755225f9a63c0968f1ceeda3a2f06c66dd8d247ff00308f549e66496aa8f59d0 # image-source: quay.io/vexxhost/heat:zed
   db_init: quay.io/vexxhost/heat@sha256:755225f9a63c0968f1ceeda3a2f06c66dd8d247ff00308f549e66496aa8f59d0 # image-source: quay.io/vexxhost/heat:zed
   dep_check: quay.io/vexxhost/kubernetes-entrypoint:latest
-  designate_api: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_central: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_db_sync: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_mdns: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_producer: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_sink: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
-  designate_worker: quay.io/vexxhost/designate@sha256:3f5039753555331c7f3ab8fa9f53206f185752d2cb4c3fa0e05c0b5e18540fa0 # image-source: quay.io/vexxhost/designate:zed
+  designate_api: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_central: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_db_sync: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_mdns: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_producer: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_sink: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
+  designate_worker: quay.io/vexxhost/designate@sha256:d65b4d717f81172c63b87bdf85a5db86aedd450f3510b2685ae384c2b114acc8  # image-source: quay.io/vexxhost/designate:zed
   glance_api: quay.io/vexxhost/glance@sha256:32aaf33e83f7285e2ad04cb8e692068e072d9d852b6b2625742995724ec77508 # image-source: quay.io/vexxhost/glance:zed
   glance_db_sync: quay.io/vexxhost/glance@sha256:32aaf33e83f7285e2ad04cb8e692068e072d9d852b6b2625742995724ec77508 # image-source: quay.io/vexxhost/glance:zed
   glance_metadefs_load: quay.io/vexxhost/glance@sha256:32aaf33e83f7285e2ad04cb8e692068e072d9d852b6b2625742995724ec77508 # image-source: quay.io/vexxhost/glance:zed