From ce8978884e33a38cdd15b214cc2f70e219aeb646 Mon Sep 17 00:00:00 2001 From: Vladislav Belogrudov Date: Tue, 1 Nov 2016 13:25:36 +0300 Subject: [PATCH] Allow flexibility in mysql backend for ceilometer This fix adds possibility to configure external mysql database backend with a different set of credentials, i.e. not requiring external db admins to provide or match their passwords if ceilometer user and database already are preconfigured. Change-Id: Icb78e069770adcc6d2437caca173a5852177178f Closes-Bug: #1638238 --- ansible/roles/ceilometer/defaults/main.yml | 5 ++-- ansible/roles/ceilometer/tasks/bootstrap.yml | 24 +++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/ansible/roles/ceilometer/defaults/main.yml b/ansible/roles/ceilometer/defaults/main.yml index b914e62d95..e3d015df61 100644 --- a/ansible/roles/ceilometer/defaults/main.yml +++ b/ansible/roles/ceilometer/defaults/main.yml @@ -7,9 +7,10 @@ project_name: "ceilometer" #################### ceilometer_database_name: "ceilometer" ceilometer_database_user: "ceilometer" +ceilometer_database_port: "{{ mondodb_port if ceilometer_database_type == 'mongodb' else database_port }}" -ceilometer_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mongodb_port }}{% if not loop.last %},{% endif %}{% endfor %}" -ceilometer_database_mysql_address: "{{ kolla_internal_fqdn }}:{{ database_port }}" +ceilometer_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ ceilometer_database_port }}{% if not loop.last %},{% endif %}{% endfor %}" +ceilometer_database_mysql_address: "{{ kolla_internal_fqdn }}:{{ ceilometer_database_port }}" #################### diff --git a/ansible/roles/ceilometer/tasks/bootstrap.yml b/ansible/roles/ceilometer/tasks/bootstrap.yml index 0ceae2fd0b..7078709ed6 100644 --- a/ansible/roles/ceilometer/tasks/bootstrap.yml +++ b/ansible/roles/ceilometer/tasks/bootstrap.yml @@ -10,11 +10,26 @@ when: - ceilometer_database_type == "mongodb" +- name: Checking Ceilometer mysql database + command: docker exec -t kolla_toolbox /usr/bin/ansible localhost + -m mysql_db + -a "login_host='{{ ceilometer_database_mysql_address }}' + login_port='{{ ceilometer_database_port }}' + login_user='{{ ceilometer_database_user }}' + login_password='{{ ceilometer_database_password }}' + name='{{ ceilometer_database_name }}'" + register: mysql_access + failed_when: False + changed_when: False + run_once: True + when: + - ceilometer_database_type == "mysql" + - name: Creating Ceilometer mysql database command: docker exec -t kolla_toolbox /usr/bin/ansible localhost -m mysql_db -a "login_host='{{ ceilometer_database_mysql_address }}' - login_port='{{ database_port }}' + login_port='{{ ceilometer_database_port }}' login_user='{{ database_user }}' login_password='{{ database_password }}' name='{{ ceilometer_database_name }}'" @@ -26,12 +41,13 @@ delegate_to: "{{ groups['ceilometer-api'][0] }}" when: - ceilometer_database_type == "mysql" + - "'FAILED' in mysql_access.stdout" - name: Creating Ceilometer database user and setting permissions command: docker exec -t kolla_toolbox /usr/bin/ansible localhost -m mysql_user -a "login_host='{{ ceilometer_database_mysql_address }}' - login_port='{{ database_port }}' + login_port='{{ ceilometer_database_port }}' login_user='{{ database_user }}' login_password='{{ database_password }}' name='{{ ceilometer_database_name }}' @@ -47,9 +63,11 @@ delegate_to: "{{ groups['ceilometer-api'][0] }}" when: - ceilometer_database_type == "mysql" + - "'FAILED' in mysql_access.stdout" # TODO(Jeffrey4l): fix idempotent when ceilomter_database_type == "gnocchi" +# NOTE(vbel): bootstrapping of mysql db for ceilometer is idempotent - include: bootstrap_service.yml when: ((ceilometer_database_type == "mongodb" and mongodb_ceilometer_database.changed) - or (ceilometer_database_type == "mysql" and mysql_ceilometer_database.changed) + or ceilometer_database_type == "mysql" or ceilometer_database_type == "gnocchi")