From 10bf6b05fa669105f040772e57cc1066cb8d6c0e Mon Sep 17 00:00:00 2001 From: Marek Svensson Date: Sun, 26 May 2019 13:19:59 +0000 Subject: [PATCH] Fix default deployment of freezer, use mariadb. This change defaults freezer to use mariadb as default backend for database and adds elasticsearch as an optional backend due to the requirement of freezer to use elasticsearch version 2.3.0. The default elasticsearch in kolla-ansible is 5.6.x and that doesn't work with freezer. Added needed options to the elasticsearch backend like: - protocol - address - port - number of replicas Change-Id: I88616c285bdb297fd1f738846ddffe1b08a7a827 Signed-off-by: Marek Svensson --- ansible/group_vars/all.yml | 2 +- ansible/roles/freezer/defaults/main.yml | 11 ++++++ ansible/roles/freezer/tasks/bootstrap.yml | 38 +++++++++++++++++++ ansible/roles/freezer/tasks/deploy.yml | 3 ++ .../roles/freezer/templates/freezer.conf.j2 | 17 ++++++++- etc/kolla/globals.yml | 9 +++++ .../freezer-backend-531eececd69c0cd4.yaml | 13 +++++++ 7 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 ansible/roles/freezer/tasks/bootstrap.yml create mode 100644 releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index 53d6270d45..85a5655b63 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -684,7 +684,7 @@ skip_stop_containers: [] #################### elasticsearch_address: "{{ kolla_internal_fqdn }}" -enable_elasticsearch: "{{ 'yes' if enable_central_logging | bool or enable_freezer | bool or enable_osprofiler | bool or enable_skydive | bool or enable_monasca | bool else 'no' }}" +enable_elasticsearch: "{{ 'yes' if enable_central_logging | bool or enable_osprofiler | bool or enable_skydive | bool or enable_monasca | bool else 'no' }}" enable_kibana: "{{ 'yes' if enable_central_logging | bool or enable_monasca | bool else 'no' }}" #################### diff --git a/ansible/roles/freezer/defaults/main.yml b/ansible/roles/freezer/defaults/main.yml index a9df2d9cfa..4dad18d517 100644 --- a/ansible/roles/freezer/defaults/main.yml +++ b/ansible/roles/freezer/defaults/main.yml @@ -28,6 +28,17 @@ freezer_services: volumes: "{{ freezer_scheduler_default_volumes + freezer_scheduler_extra_volumes }}" dimensions: "{{ freezer_scheduler_dimensions }}" +#################### +## Database +##################### +freezer_database_backend: "mariadb" +freezer_database_name: "freezer" +freezer_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}freezer{% endif %}" +freezer_database_address: "{{ database_address }}:{{ database_port }}" +freezer_elasticsearch_replicas: "1" +freezer_es_protocol: +freezer_es_address: +freezer_es_port: #################### # Docker diff --git a/ansible/roles/freezer/tasks/bootstrap.yml b/ansible/roles/freezer/tasks/bootstrap.yml new file mode 100644 index 0000000000..c8fc34bcc4 --- /dev/null +++ b/ansible/roles/freezer/tasks/bootstrap.yml @@ -0,0 +1,38 @@ +--- +- name: Creating Freezer database + kolla_toolbox: + module_name: mysql_db + module_args: + login_host: "{{ database_address }}" + login_port: "{{ database_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + name: "{{ freezer_database_name }}" + become: true + register: database + run_once: True + delegate_to: "{{ groups['freezer-api'][0] }}" + when: + - not use_preconfigured_databases | bool + +- name: Creating Freezer database user and setting permissions + kolla_toolbox: + module_name: mysql_user + module_args: + login_host: "{{ database_address }}" + login_port: "{{ database_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + name: "{{ freezer_database_user }}" + password: "{{ freezer_database_password }}" + host: "%" + priv: "{{ freezer_database_name }}.*:ALL" + append_privs: "yes" + become: true + run_once: True + delegate_to: "{{ groups['freezer-api'][0] }}" + when: + - not use_preconfigured_databases | bool + +- include_tasks: bootstrap_service.yml + when: database.changed or use_preconfigured_databases | bool diff --git a/ansible/roles/freezer/tasks/deploy.yml b/ansible/roles/freezer/tasks/deploy.yml index a4c9f89359..7a283ae3b3 100644 --- a/ansible/roles/freezer/tasks/deploy.yml +++ b/ansible/roles/freezer/tasks/deploy.yml @@ -6,6 +6,9 @@ when: inventory_hostname in groups['freezer-api'] or inventory_hostname in groups['freezer-scheduler'] +- include_tasks: bootstrap.yml + when: freezer_database_backend == 'mariadb' and inventory_hostname in groups['freezer-api'] + - include_tasks: bootstrap_service.yml when: inventory_hostname in groups['freezer-api'] diff --git a/ansible/roles/freezer/templates/freezer.conf.j2 b/ansible/roles/freezer/templates/freezer.conf.j2 index 15ac9a1413..35b5741c62 100644 --- a/ansible/roles/freezer/templates/freezer.conf.j2 +++ b/ansible/roles/freezer/templates/freezer.conf.j2 @@ -46,12 +46,25 @@ enable_proxy_headers_parsing = True [paste_deploy] config_file = /etc/freezer/freezer-paste.ini + +{% if freezer_database_backend == 'mariadb' %} +[storage] +backend = sqlachemy +driver = sqlalchemy + +[database] +connection = mysql+pymysql://{{ freezer_database_user }}:{{ freezer_database_password }}@{{ freezer_database_address }}/{{ freezer_database_name }} +max_retries = -1 +{% endif %} + +{% if freezer_database_backend == 'elasticsearch' %} [storage] backend = elasticsearch driver = elasticsearch [elasticsearch] -hosts = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ elasticsearch_port }} -number_of_replicas = 0 +hosts = {{ freezer_es_protocol }}://{{ freezer_es_address }}:{{ freezer_es_port }} +number_of_replicas = {{ freezer_elasticsearch_replicas }} index = freezer {% endif %} +{% endif %} diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml index 0e86f942b2..7893363a47 100644 --- a/etc/kolla/globals.yml +++ b/etc/kolla/globals.yml @@ -565,3 +565,12 @@ #enable_prometheus_ceph_mgr_exporter: "{{ enable_prometheus | bool and enable_ceph | bool }}" #enable_prometheus_openstack_exporter: "{{ enable_prometheus | bool }}" #enable_prometheus_elasticsearch_exporter: "{{ enable_prometheus | bool and enable_elasticsearch | bool }}" + +######### +# Freezer +######### +# Freezer can utilize two different database backends, elasticsearch or mariadb. +# Elasticsearch is preferred, however it is not compatible with the version deployed +# by kolla-ansible. You must first setup an external elasticsearch with 2.3.0. +# By default, kolla-ansible deployed mariadb is the used database backend. +#freezer_database_backend: "mariadb" diff --git a/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml b/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml new file mode 100644 index 0000000000..71aa964f4f --- /dev/null +++ b/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml @@ -0,0 +1,13 @@ +--- +upgrade: + - | + Freezer now use MariaDB as default backend for database. + + Elasticsearch remains as an optional backend due to the requirement of + Freezer to use Elasticsearch version 2.3.0. Elasticsearch in kolla-ansible + is 5.6.x and that doesn't work with Freezer. + + New variables have been added:: ``freezer_database_backend``, + ``freezer_database_name``, ``freezer_database_user``, + ``freezer_database_address``, ``freezer_elasticsearch_replicas``, + ``freezer_es_protocol``, ``freezer_es_address``, ``freezer_es_port``