chore(glance): use uwsgi (#605)

* chore(glance): use uwsgi

* Update image tag and fix wsgi file name

* Update main.yml

---------

Co-authored-by: Mohammed Naser <mnaser@vexxhost.com>
diff --git a/charts/glance/templates/bin/_glance-api.sh.tpl b/charts/glance/templates/bin/_glance-api.sh.tpl
index 9d427b6..a9018c2 100644
--- a/charts/glance/templates/bin/_glance-api.sh.tpl
+++ b/charts/glance/templates/bin/_glance-api.sh.tpl
@@ -18,8 +18,7 @@
 COMMAND="${@:-start}"
 
 function start () {
-  exec glance-api \
-        --config-file /etc/glance/glance-api.conf
+  exec uwsgi --ini /etc/glance/glance-api-uwsgi.ini
 }
 
 function stop () {
diff --git a/charts/glance/templates/configmap-etc.yaml b/charts/glance/templates/configmap-etc.yaml
index 0ee2606..5a5f1c2 100644
--- a/charts/glance/templates/configmap-etc.yaml
+++ b/charts/glance/templates/configmap-etc.yaml
@@ -100,6 +100,15 @@
 {{- $_ := tuple "image" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | set .Values.conf.glance.DEFAULT "bind_port" -}}
 {{- end -}}
 
+{{- if empty .Values.conf.glance_api_uwsgi.uwsgi.processes -}}
+{{- $_ := set .Values.conf.glance_api_uwsgi.uwsgi "processes" .Values.conf.glance.DEFAULT.workers -}}
+{{- end -}}
+{{- if empty (index .Values.conf.glance_api_uwsgi.uwsgi "http-socket") -}}
+{{- $http_socket_port := tuple "image" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" | toString }}
+{{- $http_socket := printf "0.0.0.0:%s" $http_socket_port }}
+{{- $_ := set .Values.conf.glance_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" }}
@@ -141,6 +150,7 @@
 data:
   rally_tests.yaml: {{ toYaml .Values.conf.rally_tests.tests | b64enc }}
   glance-api.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.glance | b64enc }}
+  glance-api-uwsgi.ini: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.glance_api_uwsgi | b64enc }}
   logging.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.logging | b64enc }}
   glance-api-paste.ini: {{ include "helm-toolkit.utils.to_ini" .Values.conf.paste | b64enc }}
   policy.yaml: {{ toYaml .Values.conf.policy | b64enc }}
diff --git a/charts/glance/templates/deployment-api.yaml b/charts/glance/templates/deployment-api.yaml
index bfe0049..d88856f 100644
--- a/charts/glance/templates/deployment-api.yaml
+++ b/charts/glance/templates/deployment-api.yaml
@@ -212,6 +212,10 @@
               mountPath: /etc/glance/glance-api.conf
               subPath: glance-api.conf
               readOnly: true
+            - name: glance-etc
+              mountPath: /etc/glance/glance-api-uwsgi.ini
+              subPath: glance-api-uwsgi.ini
+              readOnly: true
             {{- if .Values.conf.glance.DEFAULT.log_config_append }}
             - name: glance-etc
               mountPath: {{ .Values.conf.glance.DEFAULT.log_config_append }}
diff --git a/charts/glance/values.yaml b/charts/glance/values.yaml
index 2406a35..3733391 100644
--- a/charts/glance/values.yaml
+++ b/charts/glance/values.yaml
@@ -391,6 +391,22 @@
         priority: 0
         apply-to: all
         pattern: '^(?!(amq\.|reply_)).*'
+  glance_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: "glance-api:"
+      route-user-agent: '^kube-probe.* donotlog:'
+      thunder-lock: true
+      worker-reload-mercy: 80
+      wsgi-file: /var/lib/openstack/bin/glance-wsgi-api
 
 network:
   api:
@@ -885,14 +901,14 @@
         readiness:
           enabled: true
           params:
-            periodSeconds: 15
-            timeoutSeconds: 10
+            periodSeconds: 10
+            timeoutSeconds: 5
         liveness:
           enabled: true
           params:
-            initialDelaySeconds: 30
-            periodSeconds: 15
-            timeoutSeconds: 10
+            initialDelaySeconds: 5
+            periodSeconds: 10
+            timeoutSeconds: 5
   resources:
     enabled: false
     api:
diff --git a/roles/defaults/vars/main.yml b/roles/defaults/vars/main.yml
index 615058c..6f71f69 100644
--- a/roles/defaults/vars/main.yml
+++ b/roles/defaults/vars/main.yml
@@ -53,11 +53,11 @@
   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
-  glance_registry: quay.io/vexxhost/glance@sha256:32aaf33e83f7285e2ad04cb8e692068e072d9d852b6b2625742995724ec77508 # image-source: quay.io/vexxhost/glance:zed
-  glance_storage_init: quay.io/vexxhost/glance@sha256:32aaf33e83f7285e2ad04cb8e692068e072d9d852b6b2625742995724ec77508 # image-source: quay.io/vexxhost/glance:zed
+  glance_api: quay.io/vexxhost/glance@sha256:13024c9989fc27a63d17e467ca96ea6ec62fc34abaaccdfe05dd0445f10e0445  # image-source: quay.io/vexxhost/glance:zed
+  glance_db_sync: quay.io/vexxhost/glance@sha256:13024c9989fc27a63d17e467ca96ea6ec62fc34abaaccdfe05dd0445f10e0445  # image-source: quay.io/vexxhost/glance:zed
+  glance_metadefs_load: quay.io/vexxhost/glance@sha256:13024c9989fc27a63d17e467ca96ea6ec62fc34abaaccdfe05dd0445f10e0445  # image-source: quay.io/vexxhost/glance:zed
+  glance_registry: quay.io/vexxhost/glance@sha256:13024c9989fc27a63d17e467ca96ea6ec62fc34abaaccdfe05dd0445f10e0445  # image-source: quay.io/vexxhost/glance:zed
+  glance_storage_init: quay.io/vexxhost/glance@sha256:13024c9989fc27a63d17e467ca96ea6ec62fc34abaaccdfe05dd0445f10e0445  # image-source: quay.io/vexxhost/glance:zed
   grafana_sidecar: quay.io/kiwigrid/k8s-sidecar:1.24.6
   grafana: docker.io/grafana/grafana:10.1.0
   haproxy: docker.io/library/haproxy:2.5