From b7a76fb3412f0b499afb0625ca5613801dabeecc Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Wed, 4 Sep 2019 16:25:51 +0300 Subject: [PATCH] Start using uWSGI role Move service to use uWSGI role instead of iternal task for uwsgi deployment. This aims to ease the maintenance of uWSGI and speedup metal deployments as the same uwsgi environment will be used across all services. Change-Id: Iec03bd79279e694678336880460bcb83f68d9780 --- defaults/main.yml | 8 +++++--- handlers/main.yml | 16 ++++++++-------- tasks/gnocchi_post_install.yml | 19 +------------------ tasks/main.yml | 10 ++++++++++ templates/gnocchi-uwsgi.ini.j2 | 25 ------------------------- tests/ansible-role-requirements.yml | 4 ++++ vars/main.yml | 24 +++++++++++++++++++++++- 7 files changed, 51 insertions(+), 55 deletions(-) delete mode 100644 templates/gnocchi-uwsgi.ini.j2 diff --git a/defaults/main.yml b/defaults/main.yml index e496e87..83c59f4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -134,8 +134,11 @@ gnocchi_services: service_name: "gnocchi-api" service_enabled: true init_config_overrides: "{{ gnocchi_api_init_overrides }}" - execstarts: "{{ gnocchi_bin }}/uwsgi --autoload --ini /etc/uwsgi/gnocchi-api.ini" - execreloads: "{{ gnocchi_bin }}/uwsgi --reload /var/run/gnocchi-api/gnocchi-api.pid" + wsgi_app: True + wsgi_path: "{{ gnocchi_bin }}/gnocchi-api" + uwsgi_bind_address: "{{ gnocchi_service_address }}" + uwsgi_port: "{{ gnocchi_service_port }}" + uwsgi_overrides: "{{ gnocchi_uwsgi_conf_overrides }}" gnocchi-metricd: group: "gnocchi_metricd" service_name: "gnocchi-metricd" @@ -153,7 +156,6 @@ gnocchi_pip_packages: - kazoo - redis - systemd-python - - uwsgi # This variable is used by the repo_build process to determine # which host group to check for members of before building the diff --git a/handlers/main.yml b/handlers/main.yml index 76d4bce..8856b27 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -15,14 +15,14 @@ - name: Stop services service: - name: "{{ item.value.service_name }}" + name: "{{ item.service_name }}" enabled: yes state: "stopped" daemon_reload: yes - with_dict: "{{ gnocchi_services }}" + with_items: "{{ filtered_gnocchi_services }}" when: - - "item.value.group in group_names" - - item.value.service_enabled | bool + - "item.group in group_names" + - item.service_enabled | bool register: _stop until: _stop is success retries: 5 @@ -53,14 +53,14 @@ - name: Start services service: - name: "{{ item.value.service_name }}" + name: "{{ item.service_name }}" enabled: yes state: "started" daemon_reload: yes - with_dict: "{{ gnocchi_services }}" + with_items: "{{ filtered_gnocchi_services }}" when: - - "item.value.group in group_names" - - item.value.service_enabled | bool + - "item.group in group_names" + - item.service_enabled | bool register: _start until: _start is success retries: 5 diff --git a/tasks/gnocchi_post_install.yml b/tasks/gnocchi_post_install.yml index 8d20997..4d5f23e 100644 --- a/tasks/gnocchi_post_install.yml +++ b/tasks/gnocchi_post_install.yml @@ -47,26 +47,9 @@ content: "{{ gnocchi_policy_user_content | default(gnocchi_policy_default_content, true) }}" notify: - Restart gnocchi services + - Restart uwsgi services - Restart web server -- name: Configurng uWSGI - block: - - name: Ensure uWSGI directory exists - file: - path: "/etc/uwsgi/" - state: directory - mode: "0711" - - name: Apply uWSGI configuration - config_template: - src: "gnocchi-uwsgi.ini.j2" - dest: "/etc/uwsgi/gnocchi-api.ini" - mode: "0644" - config_overrides: "{{ gnocchi_uwsgi_conf_overrides }}" - config_type: ini - notify: - - Restart gnocchi services - when: "'gnocchi_api' in group_names" - # NOTE(noonedeadpunk): This task is created due to migration from apache to uwsgi # which was introduced during train release. It can be dropped afterwards. - name: Drop Apache related configs diff --git a/tasks/main.yml b/tasks/main.yml index 9bd1ed9..3365318 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -83,6 +83,16 @@ - gnocchi-config - systemd-service +- name: Import uwsgi role + import_role: + name: uwsgi + vars: + uwsgi_services: "{{ uwsgi_gnocchi_services }}" + uwsgi_install_method: "source" + tags: + - gnocchi-config + - uwsgi + - import_tasks: service_setup.yml vars: _service_adminuri_insecure: "{{ keystone_service_adminuri_insecure }}" diff --git a/templates/gnocchi-uwsgi.ini.j2 b/templates/gnocchi-uwsgi.ini.j2 deleted file mode 100644 index 21ddcde..0000000 --- a/templates/gnocchi-uwsgi.ini.j2 +++ /dev/null @@ -1,25 +0,0 @@ -[uwsgi] -uid = {{ gnocchi_system_user_name }} -gid = {{ gnocchi_system_group_name }} - -virtualenv = /openstack/venvs/gnocchi-{{ gnocchi_venv_tag }} -wsgi-file = {{ gnocchi_bin }}/gnocchi-api -http-socket = {{ gnocchi_service_address }}:{{ gnocchi_service_port }} - -master = true -enable-threads = true -processes = {{ gnocchi_wsgi_processes }} -threads = {{ gnocchi_wsgi_threads }} -exit-on-reload = true -die-on-term = true -lazy-apps = true -add-header = Connection: close -buffer-size = 65535 -thunder-lock = true -disable-logging = true -http-auto-chunked = true -http-raw-body = true -socket-timeout = 10 - -# Avoid filling up the logs with health check requests from haproxy. -route-user-agent = ^osa-haproxy-healthcheck$ donotlog: diff --git a/tests/ansible-role-requirements.yml b/tests/ansible-role-requirements.yml index 7e61dc0..cff3d0d 100644 --- a/tests/ansible-role-requirements.yml +++ b/tests/ansible-role-requirements.yml @@ -58,3 +58,7 @@ src: https://opendev.org/openstack/ansible-role-python_venv_build scm: git version: master +- name: uwsgi + src: https://opendev.org/openstack/ansible-role-uwsgi + scm: git + version: master diff --git a/vars/main.yml b/vars/main.yml index 70af97a..4a804db 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -28,7 +28,8 @@ filtered_gnocchi_services: |- {% for name, service in gnocchi_services.items() %} {% if (service['group'] in group_names) and (('service_enabled' not in service) or - ('service_enabled' in service and service['service_enabled'])) %} + ('service_enabled' in service and service['service_enabled'])) + and not ('wsgi_app' in service and service['wsgi_app']) %} {% set _ = service.update( { 'service_key': name, @@ -48,3 +49,24 @@ filtered_gnocchi_services: |- {% endif %} {% endfor %} {{ services }} + +uwsgi_gnocchi_services: |- + {% set services = {} %} + {% for name, service in gnocchi_services.items() %} + {% if (service['group'] in group_names) and + (('service_enabled' not in service) or + ('service_enabled' in service and service['service_enabled'])) + and ('wsgi_app' in service and service['wsgi_app']) %} + {% set _ = service.update( + { + 'wsgi_venv': gnocchi_bin | dirname, + 'uwsgi_uid': gnocchi_system_user_name, + 'uwsgi_guid': gnocchi_system_group_name, + 'uwsgi_processes': gnocchi_wsgi_processes, + 'uwsgi_threads': gnocchi_wsgi_threads, + } + ) %} + {% set _ = services.update({name: service}) %} + {% endif %} + {% endfor %} + {{ services }}