Configure cloudkitty-api to use uwsgi
Accoring to the cloudkitty docs it is strongly recommended to install the API server in a WSGI host such as mod_wsgi. The tasks are a combination of os_cinder steps and the cloudkitty docs for wsgi: https://docs.openstack.org/cloudkitty/latest/install/mod_wsgi.html#mod-wsgi Change-Id: I4173a32f4989f7e23205083738ccd81f7ea6f9f6 Closes-Bug: 1769632
This commit is contained in:
parent
b228cc0fc9
commit
cdfa3b13c9
|
@ -89,11 +89,13 @@ cloudkitty_collector: gnocchi
|
||||||
cloudkitty_service_project_domain_id: default
|
cloudkitty_service_project_domain_id: default
|
||||||
cloudkitty_service_project_name: "service"
|
cloudkitty_service_project_name: "service"
|
||||||
cloudkitty_service_user_domain_id: default
|
cloudkitty_service_user_domain_id: default
|
||||||
|
cloudkitty_system_service_name: "cloudkitty-api"
|
||||||
|
|
||||||
cloudkitty_keystone_auth_plugin: password
|
cloudkitty_keystone_auth_plugin: password
|
||||||
cloudkitty_output_backend: cloudkitty.backend.file.FileBackend
|
cloudkitty_output_backend: cloudkitty.backend.file.FileBackend
|
||||||
cloudkitty_output_pipeline: osrf
|
cloudkitty_output_pipeline: osrf
|
||||||
cloudkitty_output_basepath: /var/cloudkitty/reports
|
cloudkitty_output_basepath: /var/cloudkitty/reports
|
||||||
|
cloudkitty_log_dir: /var/log/cloudkitty
|
||||||
|
|
||||||
cloudkitty_db_setup_host: "{{ ('galera_all' in groups) | ternary(groups['galera_all'][0], 'localhost') }}"
|
cloudkitty_db_setup_host: "{{ ('galera_all' in groups) | ternary(groups['galera_all'][0], 'localhost') }}"
|
||||||
cloudkitty_galera_address: "{{ galera_address | default('127.0.0.1') }}"
|
cloudkitty_galera_address: "{{ galera_address | default('127.0.0.1') }}"
|
||||||
|
@ -102,6 +104,11 @@ cloudkitty_galera_user: cloudkitty
|
||||||
cloudkitty_database_connection: >-
|
cloudkitty_database_connection: >-
|
||||||
mysql+pymysql://{{ cloudkitty_galera_user }}:{{ cloudkitty_container_mysql_password }}@{{ cloudkitty_galera_address }}/{{ cloudkitty_galera_database }}?charset=utf8
|
mysql+pymysql://{{ cloudkitty_galera_user }}:{{ cloudkitty_container_mysql_password }}@{{ cloudkitty_galera_address }}/{{ cloudkitty_galera_database }}?charset=utf8
|
||||||
|
|
||||||
|
cloudkitty_wsgi_threads: 1
|
||||||
|
cloudkitty_wsgi_processes_max: 16
|
||||||
|
cloudkitty_wsgi_processes: "{{ [[ansible_processor_vcpus|default(1), 1] | max * 2, cloudkitty_wsgi_processes_max] | min }}"
|
||||||
|
cloudkitty_uwsgi_bind_address: 0.0.0.0
|
||||||
|
|
||||||
## Service Type and Data
|
## Service Type and Data
|
||||||
cloudkitty_service_region: RegionOne
|
cloudkitty_service_region: RegionOne
|
||||||
cloudkitty_service_name: cloudkitty
|
cloudkitty_service_name: cloudkitty
|
||||||
|
@ -123,6 +130,7 @@ cloudkitty_api_paste_ini_overrides: {}
|
||||||
|
|
||||||
cloudkitty_api_init_overrides: {}
|
cloudkitty_api_init_overrides: {}
|
||||||
cloudkitty_processor_init_overrides: {}
|
cloudkitty_processor_init_overrides: {}
|
||||||
|
cloudkitty_api_uwsgi_overrides: {}
|
||||||
|
|
||||||
## Service Name-Group Mapping
|
## Service Name-Group Mapping
|
||||||
cloudkitty_services:
|
cloudkitty_services:
|
||||||
|
@ -130,7 +138,8 @@ cloudkitty_services:
|
||||||
group: cloudkitty_all
|
group: cloudkitty_all
|
||||||
service_name: cloudkitty-api
|
service_name: cloudkitty-api
|
||||||
init_config_overrides: "{{ cloudkitty_api_init_overrides }}"
|
init_config_overrides: "{{ cloudkitty_api_init_overrides }}"
|
||||||
execstarts: "{{ cloudkitty_bin }}/cloudkitty-api"
|
execstarts: "{{ cloudkitty_bin }}/uwsgi --ini /etc/uwsgi/cloudkitty-api.ini"
|
||||||
|
execreloads: "{{ cloudkitty_bin }}/uwsgi --reload /var/run/cloudkitty-api/cloudkitty-api.pid"
|
||||||
start_order: 1
|
start_order: 1
|
||||||
cloudkitty-processor:
|
cloudkitty-processor:
|
||||||
group: cloudkitty_all
|
group: cloudkitty_all
|
||||||
|
@ -149,6 +158,7 @@ cloudkitty_pip_packages:
|
||||||
- SQLAlchemy>=1.0.10
|
- SQLAlchemy>=1.0.10
|
||||||
- systemd-python
|
- systemd-python
|
||||||
- tooz
|
- tooz
|
||||||
|
- uwsgi
|
||||||
|
|
||||||
## (Qdrouterd) integration
|
## (Qdrouterd) integration
|
||||||
# TODO(ansmith): Change structure when more backends will be supported
|
# TODO(ansmith): Change structure when more backends will be supported
|
||||||
|
|
|
@ -58,3 +58,14 @@
|
||||||
listen:
|
listen:
|
||||||
- "Restart cloudkitty services"
|
- "Restart cloudkitty services"
|
||||||
- "venv changed"
|
- "venv changed"
|
||||||
|
|
||||||
|
- name: Restart cloudkitty-api
|
||||||
|
service:
|
||||||
|
name: "{{ cloudkitty_system_service_name }}"
|
||||||
|
enabled: yes
|
||||||
|
state: "restarted"
|
||||||
|
daemon_reload: "{{ (ansible_service_mgr == 'systemd') | ternary('yes', omit) }}"
|
||||||
|
register: _restart
|
||||||
|
until: _restart | success
|
||||||
|
retries: 5
|
||||||
|
delay: 2
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
- name: Ensure uWSGI directory exists
|
||||||
|
file:
|
||||||
|
path: "/etc/uwsgi/"
|
||||||
|
state: directory
|
||||||
|
mode: "0711"
|
||||||
|
- name: Copy cloudkitty wsgi to apache directory
|
||||||
|
template:
|
||||||
|
src: cloudkitty-wsgi.py.j2
|
||||||
|
dest: "{{ cloudkitty_bin }}/cloudkitty-wsgi.py"
|
||||||
|
owner: "{{ cloudkitty_system_user_name }}"
|
||||||
|
group: "{{ cloudkitty_system_user_name }}"
|
||||||
|
mode: 0755
|
||||||
|
- name: Apply uWSGI configuration
|
||||||
|
config_template:
|
||||||
|
src: cloudkitty-uwsgi.ini.j2
|
||||||
|
dest: /etc/uwsgi/cloudkitty-api.ini
|
||||||
|
mode: 0744
|
||||||
|
config_overrides: "{{ cloudkitty_api_uwsgi_overrides }}"
|
||||||
|
config_type: ini
|
||||||
|
notify:
|
||||||
|
- Restart cloudkitty-api
|
|
@ -43,6 +43,8 @@
|
||||||
- include_tasks: cloudkitty_install.yml
|
- include_tasks: cloudkitty_install.yml
|
||||||
- include_tasks: cloudkitty_post_install.yml
|
- include_tasks: cloudkitty_post_install.yml
|
||||||
|
|
||||||
|
- include_tasks: cloudkitty_wsgi.yml
|
||||||
|
|
||||||
- include_tasks: cloudkitty_service_setup.yml
|
- include_tasks: cloudkitty_service_setup.yml
|
||||||
when: inventory_hostname == groups['cloudkitty_all'][0]
|
when: inventory_hostname == groups['cloudkitty_all'][0]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
[uwsgi]
|
||||||
|
uid = {{ cloudkitty_system_user_name }}
|
||||||
|
gid = {{ cloudkitty_system_group_name }}
|
||||||
|
|
||||||
|
virtualenv = /openstack/venvs/cloudkitty-{{ cloudkitty_venv_tag }}
|
||||||
|
wsgi-file = {{ cloudkitty_bin }}/cloudkitty-wsgi.py
|
||||||
|
http = :{{ cloudkitty_service_port }}
|
||||||
|
logto = {{ cloudkitty_log_dir }}/cloudkitty-api.log
|
||||||
|
|
||||||
|
master = true
|
||||||
|
enable-threads = true
|
||||||
|
processes = {{ cloudkitty_wsgi_processes }}
|
||||||
|
threads = {{ cloudkitty_wsgi_threads }}
|
||||||
|
exit-on-reload = true
|
||||||
|
die-on-term = true
|
||||||
|
lazy-apps = true
|
||||||
|
add-header = Connection: close
|
||||||
|
buffer-size = 65535
|
||||||
|
thunder-lock = true
|
||||||
|
|
||||||
|
# Avoid filling up the logs with health check requests from haproxy.
|
||||||
|
route-user-agent = ^osa-haproxy-healthcheck$ donotlog:
|
|
@ -0,0 +1,29 @@
|
||||||
|
# -*- mode: python -*-
|
||||||
|
#
|
||||||
|
# Copyright 2013 New Dream Network, LLC (DreamHost)
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""Use this file for deploying the API under mod_wsgi.
|
||||||
|
|
||||||
|
See http://pecan.readthedocs.org/en/latest/deployment.html for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
activate_this = os.path.expanduser("{{ cloudkitty_bin }}/activate_this.py")
|
||||||
|
execfile(activate_this, dict(__file__=activate_this))
|
||||||
|
|
||||||
|
from cloudkitty.api import app
|
||||||
|
|
||||||
|
application = app.build_wsgi_app(argv=[])
|
Loading…
Reference in New Issue