From 0382909dbba7069c6d001b47931baa886450afd4 Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Sun, 26 Jul 2015 10:39:07 +0000 Subject: Rename role name to service name The original purpose for having an abstract like 'database' rather than the service name of 'mariadb' has been change. Our direction is different and this patch reflects consistent naming throughout Change-Id: I704896191cc5243f9dab2a4cca9120e9dc2ceb2c Closes-Bug: #1478328 --- ansible/inventory/all-in-one | 4 +- ansible/inventory/multinode | 4 +- ansible/roles/database/defaults/main.yml | 21 -------- ansible/roles/database/tasks/bootstrap.yml | 60 ---------------------- ansible/roles/database/tasks/config.yml | 9 ---- ansible/roles/database/tasks/main.yml | 20 -------- ansible/roles/database/tasks/register.yml | 18 ------- ansible/roles/database/tasks/start.yml | 13 ----- ansible/roles/database/templates/galera.cnf.j2 | 18 ------- ansible/roles/haproxy/templates/haproxy.cfg.j2 | 4 +- ansible/roles/haproxy/templates/keepalived.conf.j2 | 2 +- ansible/roles/mariadb/defaults/main.yml | 21 ++++++++ ansible/roles/mariadb/tasks/bootstrap.yml | 60 ++++++++++++++++++++++ ansible/roles/mariadb/tasks/config.yml | 9 ++++ ansible/roles/mariadb/tasks/main.yml | 20 ++++++++ ansible/roles/mariadb/tasks/register.yml | 18 +++++++ ansible/roles/mariadb/tasks/start.yml | 13 +++++ ansible/roles/mariadb/templates/galera.cnf.j2 | 18 +++++++ ansible/roles/message-broker/defaults/main.yml | 22 -------- ansible/roles/message-broker/tasks/bootstrap.yml | 38 -------------- ansible/roles/message-broker/tasks/config.yml | 16 ------ ansible/roles/message-broker/tasks/main.yml | 6 --- ansible/roles/message-broker/tasks/start.yml | 11 ---- .../message-broker/templates/rabbitmq-env.conf.j2 | 2 - .../message-broker/templates/rabbitmq.config.j2 | 24 --------- ansible/roles/rabbitmq/defaults/main.yml | 22 ++++++++ ansible/roles/rabbitmq/tasks/bootstrap.yml | 38 ++++++++++++++ ansible/roles/rabbitmq/tasks/config.yml | 16 ++++++ ansible/roles/rabbitmq/tasks/main.yml | 6 +++ ansible/roles/rabbitmq/tasks/start.yml | 11 ++++ .../roles/rabbitmq/templates/rabbitmq-env.conf.j2 | 2 + .../roles/rabbitmq/templates/rabbitmq.config.j2 | 24 +++++++++ ansible/site.yml | 13 +++-- docs/ansible-deployment.md | 4 +- 34 files changed, 293 insertions(+), 294 deletions(-) delete mode 100644 ansible/roles/database/defaults/main.yml delete mode 100644 ansible/roles/database/tasks/bootstrap.yml delete mode 100644 ansible/roles/database/tasks/config.yml delete mode 100644 ansible/roles/database/tasks/main.yml delete mode 100644 ansible/roles/database/tasks/register.yml delete mode 100644 ansible/roles/database/tasks/start.yml delete mode 100644 ansible/roles/database/templates/galera.cnf.j2 create mode 100644 ansible/roles/mariadb/defaults/main.yml create mode 100644 ansible/roles/mariadb/tasks/bootstrap.yml create mode 100644 ansible/roles/mariadb/tasks/config.yml create mode 100644 ansible/roles/mariadb/tasks/main.yml create mode 100644 ansible/roles/mariadb/tasks/register.yml create mode 100644 ansible/roles/mariadb/tasks/start.yml create mode 100644 ansible/roles/mariadb/templates/galera.cnf.j2 delete mode 100644 ansible/roles/message-broker/defaults/main.yml delete mode 100644 ansible/roles/message-broker/tasks/bootstrap.yml delete mode 100644 ansible/roles/message-broker/tasks/config.yml delete mode 100644 ansible/roles/message-broker/tasks/main.yml delete mode 100644 ansible/roles/message-broker/tasks/start.yml delete mode 100644 ansible/roles/message-broker/templates/rabbitmq-env.conf.j2 delete mode 100644 ansible/roles/message-broker/templates/rabbitmq.config.j2 create mode 100644 ansible/roles/rabbitmq/defaults/main.yml create mode 100644 ansible/roles/rabbitmq/tasks/bootstrap.yml create mode 100644 ansible/roles/rabbitmq/tasks/config.yml create mode 100644 ansible/roles/rabbitmq/tasks/main.yml create mode 100644 ansible/roles/rabbitmq/tasks/start.yml create mode 100644 ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 create mode 100644 ansible/roles/rabbitmq/templates/rabbitmq.config.j2 diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one index c79d87eb9..63771f54a 100644 --- a/ansible/inventory/all-in-one +++ b/ansible/inventory/all-in-one @@ -15,10 +15,10 @@ localhost ansible_connection=local [haproxy:children] support -[database:children] +[mariadb:children] support -[message-broker:children] +[rabbitmq:children] support [keystone:children] diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode index 116f813ff..5806f26f3 100644 --- a/ansible/inventory/multinode +++ b/ansible/inventory/multinode @@ -18,10 +18,10 @@ compute01 [haproxy:children] support -[database:children] +[mariadb:children] support -[message-broker:children] +[rabbitmq:children] support [keystone:children] diff --git a/ansible/roles/database/defaults/main.yml b/ansible/roles/database/defaults/main.yml deleted file mode 100644 index 469ad8355..000000000 --- a/ansible/roles/database/defaults/main.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -project_name: "mariadb" - -#################### -# Database -#################### -database_cluster_name: "kolla" - - -#################### -# Docker -#################### -docker_database_registry: "{{ docker_registry }}" -docker_database_namespace: "{{ docker_namespace }}" -kolla_database_base_distro: "{{ kolla_base_distro }}" -kolla_database_install_type: "{{ kolla_install_type }}" -kolla_database_container_name: "galera" - -docker_database_image: "{{ docker_database_registry }}{{ docker_database_namespace }}/{{ kolla_database_base_distro }}-{{ kolla_database_install_type }}-{{ kolla_database_container_name }}" -docker_database_tag: "{{ openstack_release }}" -docker_database_image_full: "{{ docker_database_image }}:{{ docker_database_tag }}" diff --git a/ansible/roles/database/tasks/bootstrap.yml b/ansible/roles/database/tasks/bootstrap.yml deleted file mode 100644 index 5e98c3b26..000000000 --- a/ansible/roles/database/tasks/bootstrap.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -- name: Cleaning up temp file on localhost - local_action: file path=/tmp/kolla_mariadb_cluster state=absent - changed_when: False - always_run: True - run_once: True - -- name: Creating temp file on localhost - local_action: copy content=None dest=/tmp/kolla_mariadb_cluster mode=0600 - changed_when: False - always_run: True - run_once: True - -# TODO(SamYaple): Improve failed_when check -- name: Checking if a previous cluster exists - command: docker exec mariadb stat /var/lib/mysql/grastate.dat - register: exists - changed_when: False - failed_when: False - always_run: True - run_once: True - -- name: Writing hostname of host with existing cluster files to temp file - local_action: copy content={{ ansible_hostname }} dest=/tmp/kolla_mariadb_cluster owner=root group=root mode=0600 - changed_when: False - always_run: True - when: exists.rc == 0 - -- name: Registering host from temp file - set_fact: - delegate_host: "{{ lookup('file', '/tmp/kolla_mariadb_cluster') }}" - -- name: Cleaning up temp file on localhost - local_action: file path=/tmp/kolla_mariadb_cluster state=absent - changed_when: False - always_run: True - run_once: True - -- include: ../../start.yml - vars: - container_command: "/bin/sleep infinity" - container_image: "{{ docker_database_image_full }}" - container_name: "mariadb_data" - container_volumes: - - "/var/lib/mysql/" - -- include: ../../start.yml - vars: - container_environment: - KOLLA_BOOTSTRAP: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - DB_ROOT_PASSWORD: "{{ database_password }}" - container_image: "{{ docker_database_image_full }}" - container_name: "mariadb" - container_restart_policy: "no" - container_volumes: - - "{{ node_config_directory }}/mariadb/:/opt/kolla/mariadb/:ro" - container_volumes_from: - - "mariadb_data" - when: delegate_host == 'None' and inventory_hostname == groups['database'][0] diff --git a/ansible/roles/database/tasks/config.yml b/ansible/roles/database/tasks/config.yml deleted file mode 100644 index ce7ff973e..000000000 --- a/ansible/roles/database/tasks/config.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- include: ../../config.yml - vars: - service_name: "mariadb" - config_source: - - "roles/database/templates/galera.cnf.j2" - config_template_dest: - - "{{ node_templates_directory }}/mariadb/galera.cnf_minimal" - config_dest: "{{ node_config_directory }}/mariadb/galera.cnf" diff --git a/ansible/roles/database/tasks/main.yml b/ansible/roles/database/tasks/main.yml deleted file mode 100644 index c13e4eb0a..000000000 --- a/ansible/roles/database/tasks/main.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- -- include: config.yml - -- include: bootstrap.yml - -- include: start.yml - -# We use register as a test to see whether the database is active and ready to -# communicate. This run on all hosts that have a database and attempts to talk -# to the local database rather than the vip, -- include: register.yml - -# This will restart the container we initially used to bootstrap the cluster to -# make it match the other containers environment-wise. This also prevents a -# change from showing up when rerunning the playbooks -- include: start.yml - -# Since the last start.yml may have recreated some containers we must wait and -# check the health again to ensure the hosts are active. -- include: register.yml diff --git a/ansible/roles/database/tasks/register.yml b/ansible/roles/database/tasks/register.yml deleted file mode 100644 index c7382ff88..000000000 --- a/ansible/roles/database/tasks/register.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Creating haproxy mysql user - mysql_user: - login_host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" - login_user: "{{ database_user }}" - login_password: "{{ database_password }}" - name: "haproxy" - password: "" - host: "%" - priv: "*.*:USAGE" - register: status - until: status|success - retries: 10 - delay: 5 - -- name: Cleaning up facts - set_fact: - delegate_host: "bootstraped" diff --git a/ansible/roles/database/tasks/start.yml b/ansible/roles/database/tasks/start.yml deleted file mode 100644 index fcddb9e0c..000000000 --- a/ansible/roles/database/tasks/start.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -- include: ../../start.yml - vars: - container_environment: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_database_image_full }}" - container_name: "mariadb" - container_volumes: - - "{{ node_config_directory }}/mariadb/:/opt/kolla/mariadb/:ro" - container_volumes_from: - - "mariadb_data" - when: delegate_host != 'None' or (groups['database'] | length) == 1 or - ( delegate_host == 'None' and inventory_hostname != groups['database'][0] ) diff --git a/ansible/roles/database/templates/galera.cnf.j2 b/ansible/roles/database/templates/galera.cnf.j2 deleted file mode 100644 index 5f3dbbda0..000000000 --- a/ansible/roles/database/templates/galera.cnf.j2 +++ /dev/null @@ -1,18 +0,0 @@ -[mysqld] -bind-address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} -binlog_format=ROW -default-storage-engine=innodb -innodb_autoinc_lock_mode=2 -query_cache_size=0 -query_cache_type=0 -innodb_log_file_size=48M - -wsrep_provider=/usr/lib64/galera/libgalera_smm.so -wsrep_cluster_address=gcomm://{% if (groups['database'] | length) > 1 %}{% for host in groups['database'] %}{{ hostvars[host]['ansible_hostname'] }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %} - -wsrep_cluster_name="{{ database_cluster_name }}" -wsrep_node_address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} -wsrep_node_name={{ ansible_hostname }} -wsrep_sst_method=xtrabackup-v2 -wsrep_sst_auth={{ database_user }}:{{ database_password }} -wsrep_slave_threads=4 diff --git a/ansible/roles/haproxy/templates/haproxy.cfg.j2 b/ansible/roles/haproxy/templates/haproxy.cfg.j2 index 07fe7aacf..ab866c0bc 100755 --- a/ansible/roles/haproxy/templates/haproxy.cfg.j2 +++ b/ansible/roles/haproxy/templates/haproxy.cfg.j2 @@ -21,7 +21,7 @@ listen mariadb # TODO(SamYaple): Make DB port configurable throughout Ansible bind {{ kolla_internal_address }}:3306 -{% for host in groups['database'] %} +{% for host in groups['mariadb'] %} server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:3306 check inter 2000 rise 2 fall 5 {% if not loop.first %}backup{% endif %} {% endfor %} @@ -32,7 +32,7 @@ listen rabbitmq # TODO(SamYaple): Make rabbitmq port configurable throughout Ansible bind {{ kolla_internal_address }}:5672 -{% for host in groups['message-broker'] %} +{% for host in groups['rabbitmq'] %} server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:5672 check inter 2000 rise 2 fall 5 {% endfor %} diff --git a/ansible/roles/haproxy/templates/keepalived.conf.j2 b/ansible/roles/haproxy/templates/keepalived.conf.j2 index 05062e5bd..e2c37dab5 100644 --- a/ansible/roles/haproxy/templates/keepalived.conf.j2 +++ b/ansible/roles/haproxy/templates/keepalived.conf.j2 @@ -8,7 +8,7 @@ vrrp_instance Floating { state MASTER interface {{ api_interface }} virtual_router_id 51 - priority {{ groups['database'].index(inventory_hostname) }} + priority {{ groups['rabbitmq'].index(inventory_hostname) }} advert_int 1 virtual_ipaddress { {{ kolla_internal_address }} diff --git a/ansible/roles/mariadb/defaults/main.yml b/ansible/roles/mariadb/defaults/main.yml new file mode 100644 index 000000000..469ad8355 --- /dev/null +++ b/ansible/roles/mariadb/defaults/main.yml @@ -0,0 +1,21 @@ +--- +project_name: "mariadb" + +#################### +# Database +#################### +database_cluster_name: "kolla" + + +#################### +# Docker +#################### +docker_database_registry: "{{ docker_registry }}" +docker_database_namespace: "{{ docker_namespace }}" +kolla_database_base_distro: "{{ kolla_base_distro }}" +kolla_database_install_type: "{{ kolla_install_type }}" +kolla_database_container_name: "galera" + +docker_database_image: "{{ docker_database_registry }}{{ docker_database_namespace }}/{{ kolla_database_base_distro }}-{{ kolla_database_install_type }}-{{ kolla_database_container_name }}" +docker_database_tag: "{{ openstack_release }}" +docker_database_image_full: "{{ docker_database_image }}:{{ docker_database_tag }}" diff --git a/ansible/roles/mariadb/tasks/bootstrap.yml b/ansible/roles/mariadb/tasks/bootstrap.yml new file mode 100644 index 000000000..8eea886d5 --- /dev/null +++ b/ansible/roles/mariadb/tasks/bootstrap.yml @@ -0,0 +1,60 @@ +--- +- name: Cleaning up temp file on localhost + local_action: file path=/tmp/kolla_mariadb_cluster state=absent + changed_when: False + always_run: True + run_once: True + +- name: Creating temp file on localhost + local_action: copy content=None dest=/tmp/kolla_mariadb_cluster mode=0600 + changed_when: False + always_run: True + run_once: True + +# TODO(SamYaple): Improve failed_when check +- name: Checking if a previous cluster exists + command: docker exec mariadb stat /var/lib/mysql/grastate.dat + register: exists + changed_when: False + failed_when: False + always_run: True + run_once: True + +- name: Writing hostname of host with existing cluster files to temp file + local_action: copy content={{ ansible_hostname }} dest=/tmp/kolla_mariadb_cluster owner=root group=root mode=0600 + changed_when: False + always_run: True + when: exists.rc == 0 + +- name: Registering host from temp file + set_fact: + delegate_host: "{{ lookup('file', '/tmp/kolla_mariadb_cluster') }}" + +- name: Cleaning up temp file on localhost + local_action: file path=/tmp/kolla_mariadb_cluster state=absent + changed_when: False + always_run: True + run_once: True + +- include: ../../start.yml + vars: + container_command: "/bin/sleep infinity" + container_image: "{{ docker_database_image_full }}" + container_name: "mariadb_data" + container_volumes: + - "/var/lib/mysql/" + +- include: ../../start.yml + vars: + container_environment: + KOLLA_BOOTSTRAP: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" + DB_ROOT_PASSWORD: "{{ database_password }}" + container_image: "{{ docker_database_image_full }}" + container_name: "mariadb" + container_restart_policy: "no" + container_volumes: + - "{{ node_config_directory }}/mariadb/:/opt/kolla/mariadb/:ro" + container_volumes_from: + - "mariadb_data" + when: delegate_host == 'None' and inventory_hostname == groups['mariadb'][0] diff --git a/ansible/roles/mariadb/tasks/config.yml b/ansible/roles/mariadb/tasks/config.yml new file mode 100644 index 000000000..868ae0524 --- /dev/null +++ b/ansible/roles/mariadb/tasks/config.yml @@ -0,0 +1,9 @@ +--- +- include: ../../config.yml + vars: + service_name: "mariadb" + config_source: + - "roles/mariadb/templates/galera.cnf.j2" + config_template_dest: + - "{{ node_templates_directory }}/mariadb/galera.cnf_minimal" + config_dest: "{{ node_config_directory }}/mariadb/galera.cnf" diff --git a/ansible/roles/mariadb/tasks/main.yml b/ansible/roles/mariadb/tasks/main.yml new file mode 100644 index 000000000..c13e4eb0a --- /dev/null +++ b/ansible/roles/mariadb/tasks/main.yml @@ -0,0 +1,20 @@ +--- +- include: config.yml + +- include: bootstrap.yml + +- include: start.yml + +# We use register as a test to see whether the database is active and ready to +# communicate. This run on all hosts that have a database and attempts to talk +# to the local database rather than the vip, +- include: register.yml + +# This will restart the container we initially used to bootstrap the cluster to +# make it match the other containers environment-wise. This also prevents a +# change from showing up when rerunning the playbooks +- include: start.yml + +# Since the last start.yml may have recreated some containers we must wait and +# check the health again to ensure the hosts are active. +- include: register.yml diff --git a/ansible/roles/mariadb/tasks/register.yml b/ansible/roles/mariadb/tasks/register.yml new file mode 100644 index 000000000..c7382ff88 --- /dev/null +++ b/ansible/roles/mariadb/tasks/register.yml @@ -0,0 +1,18 @@ +--- +- name: Creating haproxy mysql user + mysql_user: + login_host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + name: "haproxy" + password: "" + host: "%" + priv: "*.*:USAGE" + register: status + until: status|success + retries: 10 + delay: 5 + +- name: Cleaning up facts + set_fact: + delegate_host: "bootstraped" diff --git a/ansible/roles/mariadb/tasks/start.yml b/ansible/roles/mariadb/tasks/start.yml new file mode 100644 index 000000000..da0a8d379 --- /dev/null +++ b/ansible/roles/mariadb/tasks/start.yml @@ -0,0 +1,13 @@ +--- +- include: ../../start.yml + vars: + container_environment: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" + container_image: "{{ docker_database_image_full }}" + container_name: "mariadb" + container_volumes: + - "{{ node_config_directory }}/mariadb/:/opt/kolla/mariadb/:ro" + container_volumes_from: + - "mariadb_data" + when: delegate_host != 'None' or (groups['mariadb'] | length) == 1 or + ( delegate_host == 'None' and inventory_hostname != groups['mariadb'][0] ) diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2 new file mode 100644 index 000000000..271d12d7e --- /dev/null +++ b/ansible/roles/mariadb/templates/galera.cnf.j2 @@ -0,0 +1,18 @@ +[mysqld] +bind-address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} +binlog_format=ROW +default-storage-engine=innodb +innodb_autoinc_lock_mode=2 +query_cache_size=0 +query_cache_type=0 +innodb_log_file_size=48M + +wsrep_provider=/usr/lib64/galera/libgalera_smm.so +wsrep_cluster_address=gcomm://{% if (groups['mariadb'] | length) > 1 %}{% for host in groups['mariadb'] %}{{ hostvars[host]['ansible_hostname'] }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %} + +wsrep_cluster_name="{{ database_cluster_name }}" +wsrep_node_address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} +wsrep_node_name={{ ansible_hostname }} +wsrep_sst_method=xtrabackup-v2 +wsrep_sst_auth={{ database_user }}:{{ database_password }} +wsrep_slave_threads=4 diff --git a/ansible/roles/message-broker/defaults/main.yml b/ansible/roles/message-broker/defaults/main.yml deleted file mode 100644 index 67dd88364..000000000 --- a/ansible/roles/message-broker/defaults/main.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -project_name: "rabbitmq" - -#################### -# Docker -#################### -docker_message_broker_registry: "{{ docker_registry }}" -docker_message_broker_namespace: "{{ docker_namespace }}" -kolla_message_broker_base_distro: "{{ kolla_base_distro }}" -kolla_message_broker_install_type: "{{ kolla_install_type }}" -kolla_message_broker_container_name: "rabbitmq" - -docker_message_broker_image: "{{ docker_message_broker_registry }}{{ docker_message_broker_namespace }}/{{ kolla_message_broker_base_distro }}-{{ kolla_message_broker_install_type }}-{{ kolla_message_broker_container_name }}" -docker_message_broker_tag: "{{ openstack_release }}" -docker_message_broker_image_full: "{{ docker_message_broker_image }}:{{ docker_message_broker_tag }}" - - -#################### -# Message-Broker -#################### -rabbitmq_user: "openstack" -rabbitmq_cluster_name: "openstack" diff --git a/ansible/roles/message-broker/tasks/bootstrap.yml b/ansible/roles/message-broker/tasks/bootstrap.yml deleted file mode 100644 index df974055b..000000000 --- a/ansible/roles/message-broker/tasks/bootstrap.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -# TODO(SamYaple): Improve check with a custom docker module to check if alive -- name: Checking if a rabbitmq_data exists - command: docker inspect rabbitmq_data - register: exists - changed_when: False - failed_when: False - always_run: True - -- include: ../../start.yml - vars: - container_command: "/bin/sleep infinity" - container_image: "{{ docker_message_broker_image_full }}" - container_name: "rabbitmq_data" - container_volumes: - - "/var/lib/rabbitmq/" - -- include: ../../start.yml - vars: - container_detach: "False" - container_environment: - KOLLA_BOOTSTRAP: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - RABBITMQ_CLUSTER_COOKIE: "{{ rabbitmq_cluster_cookie }}" - container_image: "{{ docker_message_broker_image_full }}" - container_name: "rabbitmq_bootstrap" - container_restart_policy: "no" - container_volumes: - - "{{ node_config_directory }}/rabbitmq/:/opt/kolla/rabbitmq/:ro" - container_volumes_from: - - "rabbitmq_data" - when: exists.rc != 0 - -- name: Cleaning up boostrap container - docker: - image: "{{ docker_message_broker_image_full }}" - name: "rabbitmq_bootstrap" - state: "absent" diff --git a/ansible/roles/message-broker/tasks/config.yml b/ansible/roles/message-broker/tasks/config.yml deleted file mode 100644 index 8c6caf5e5..000000000 --- a/ansible/roles/message-broker/tasks/config.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: Ensuring config directory exists - file: - path: "{{ node_config_directory }}/rabbitmq/" - state: "directory" - recurse: "yes" - -- name: Copying over config(s) - template: - src: "{{ item.src }}" - dest: "{{ item.dest }}" - with_items: - - { src: "roles/message-broker/templates/rabbitmq-env.conf.j2", - dest: "{{ node_config_directory }}/rabbitmq/rabbitmq-env.conf" } - - { src: "roles/message-broker/templates/rabbitmq.config.j2", - dest: "{{ node_config_directory }}/rabbitmq/rabbitmq.config" } diff --git a/ansible/roles/message-broker/tasks/main.yml b/ansible/roles/message-broker/tasks/main.yml deleted file mode 100644 index 98daa4021..000000000 --- a/ansible/roles/message-broker/tasks/main.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- include: config.yml - -- include: bootstrap.yml - -- include: start.yml diff --git a/ansible/roles/message-broker/tasks/start.yml b/ansible/roles/message-broker/tasks/start.yml deleted file mode 100644 index 4a75e0d94..000000000 --- a/ansible/roles/message-broker/tasks/start.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- include: ../../start.yml - vars: - container_environment: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_message_broker_image_full }}" - container_name: "rabbitmq" - container_volumes: - - "{{ node_config_directory }}/rabbitmq/:/opt/kolla/rabbitmq/:ro" - container_volumes_from: - - "rabbitmq_data" diff --git a/ansible/roles/message-broker/templates/rabbitmq-env.conf.j2 b/ansible/roles/message-broker/templates/rabbitmq-env.conf.j2 deleted file mode 100644 index 555f94dc1..000000000 --- a/ansible/roles/message-broker/templates/rabbitmq-env.conf.j2 +++ /dev/null @@ -1,2 +0,0 @@ -RABBITMQ_NODENAME=rabbit -export ERL_EPMD_ADDRESS={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} diff --git a/ansible/roles/message-broker/templates/rabbitmq.config.j2 b/ansible/roles/message-broker/templates/rabbitmq.config.j2 deleted file mode 100644 index 47ba09e85..000000000 --- a/ansible/roles/message-broker/templates/rabbitmq.config.j2 +++ /dev/null @@ -1,24 +0,0 @@ -[ - {kernel, [ - {inet_dist_use_interface, {% raw %}{{% endraw %}{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] | regex_replace('\.', ',') }}}} - ]}, - {rabbit, [ - {tcp_listeners, [ - {"{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}", 5672} - ]}, - {default_user, <<"{{ rabbitmq_user }}">>}, - {default_pass, <<"{{ rabbitmq_password }}">>}, - {cluster_partition_handling, autoheal}, - {cluster_nodes, [ - {% for host in groups['database'] %}'rabbit@{{ hostvars[host]['ansible_hostname'] }}'{% if not loop.last %},{% endif %}{% endfor %} - - ]} - ]}, - {rabbitmq_management, [ - {listener, [ - {ip, "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"}, - {port, 15672} - ]} - ]} -]. -% EOF diff --git a/ansible/roles/rabbitmq/defaults/main.yml b/ansible/roles/rabbitmq/defaults/main.yml new file mode 100644 index 000000000..67dd88364 --- /dev/null +++ b/ansible/roles/rabbitmq/defaults/main.yml @@ -0,0 +1,22 @@ +--- +project_name: "rabbitmq" + +#################### +# Docker +#################### +docker_message_broker_registry: "{{ docker_registry }}" +docker_message_broker_namespace: "{{ docker_namespace }}" +kolla_message_broker_base_distro: "{{ kolla_base_distro }}" +kolla_message_broker_install_type: "{{ kolla_install_type }}" +kolla_message_broker_container_name: "rabbitmq" + +docker_message_broker_image: "{{ docker_message_broker_registry }}{{ docker_message_broker_namespace }}/{{ kolla_message_broker_base_distro }}-{{ kolla_message_broker_install_type }}-{{ kolla_message_broker_container_name }}" +docker_message_broker_tag: "{{ openstack_release }}" +docker_message_broker_image_full: "{{ docker_message_broker_image }}:{{ docker_message_broker_tag }}" + + +#################### +# Message-Broker +#################### +rabbitmq_user: "openstack" +rabbitmq_cluster_name: "openstack" diff --git a/ansible/roles/rabbitmq/tasks/bootstrap.yml b/ansible/roles/rabbitmq/tasks/bootstrap.yml new file mode 100644 index 000000000..df974055b --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/bootstrap.yml @@ -0,0 +1,38 @@ +--- +# TODO(SamYaple): Improve check with a custom docker module to check if alive +- name: Checking if a rabbitmq_data exists + command: docker inspect rabbitmq_data + register: exists + changed_when: False + failed_when: False + always_run: True + +- include: ../../start.yml + vars: + container_command: "/bin/sleep infinity" + container_image: "{{ docker_message_broker_image_full }}" + container_name: "rabbitmq_data" + container_volumes: + - "/var/lib/rabbitmq/" + +- include: ../../start.yml + vars: + container_detach: "False" + container_environment: + KOLLA_BOOTSTRAP: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" + RABBITMQ_CLUSTER_COOKIE: "{{ rabbitmq_cluster_cookie }}" + container_image: "{{ docker_message_broker_image_full }}" + container_name: "rabbitmq_bootstrap" + container_restart_policy: "no" + container_volumes: + - "{{ node_config_directory }}/rabbitmq/:/opt/kolla/rabbitmq/:ro" + container_volumes_from: + - "rabbitmq_data" + when: exists.rc != 0 + +- name: Cleaning up boostrap container + docker: + image: "{{ docker_message_broker_image_full }}" + name: "rabbitmq_bootstrap" + state: "absent" diff --git a/ansible/roles/rabbitmq/tasks/config.yml b/ansible/roles/rabbitmq/tasks/config.yml new file mode 100644 index 000000000..21a5f90ca --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/config.yml @@ -0,0 +1,16 @@ +--- +- name: Ensuring config directory exists + file: + path: "{{ node_config_directory }}/rabbitmq/" + state: "directory" + recurse: "yes" + +- name: Copying over config(s) + template: + src: "{{ item.src }}" + dest: "{{ item.dest }}" + with_items: + - { src: "rabbitmq-env.conf.j2", + dest: "{{ node_config_directory }}/rabbitmq/rabbitmq-env.conf" } + - { src: "rabbitmq.config.j2", + dest: "{{ node_config_directory }}/rabbitmq/rabbitmq.config" } diff --git a/ansible/roles/rabbitmq/tasks/main.yml b/ansible/roles/rabbitmq/tasks/main.yml new file mode 100644 index 000000000..98daa4021 --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- include: config.yml + +- include: bootstrap.yml + +- include: start.yml diff --git a/ansible/roles/rabbitmq/tasks/start.yml b/ansible/roles/rabbitmq/tasks/start.yml new file mode 100644 index 000000000..4a75e0d94 --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/start.yml @@ -0,0 +1,11 @@ +--- +- include: ../../start.yml + vars: + container_environment: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" + container_image: "{{ docker_message_broker_image_full }}" + container_name: "rabbitmq" + container_volumes: + - "{{ node_config_directory }}/rabbitmq/:/opt/kolla/rabbitmq/:ro" + container_volumes_from: + - "rabbitmq_data" diff --git a/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 new file mode 100644 index 000000000..555f94dc1 --- /dev/null +++ b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 @@ -0,0 +1,2 @@ +RABBITMQ_NODENAME=rabbit +export ERL_EPMD_ADDRESS={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} diff --git a/ansible/roles/rabbitmq/templates/rabbitmq.config.j2 b/ansible/roles/rabbitmq/templates/rabbitmq.config.j2 new file mode 100644 index 000000000..787d63ae6 --- /dev/null +++ b/ansible/roles/rabbitmq/templates/rabbitmq.config.j2 @@ -0,0 +1,24 @@ +[ + {kernel, [ + {inet_dist_use_interface, {% raw %}{{% endraw %}{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] | regex_replace('\.', ',') }}}} + ]}, + {rabbit, [ + {tcp_listeners, [ + {"{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}", 5672} + ]}, + {default_user, <<"{{ rabbitmq_user }}">>}, + {default_pass, <<"{{ rabbitmq_password }}">>}, + {cluster_partition_handling, autoheal}, + {cluster_nodes, [ + {% for host in groups['rabbitmq'] %}'rabbit@{{ hostvars[host]['ansible_hostname'] }}'{% if not loop.last %},{% endif %}{% endfor %} + + ]} + ]}, + {rabbitmq_management, [ + {listener, [ + {ip, "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"}, + {port, 15672} + ]} + ]} +]. +% EOF diff --git a/ansible/site.yml b/ansible/site.yml index 1b708080b..0dd67b69b 100755 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -4,16 +4,15 @@ - haproxy tags: haproxy -- hosts: database +- hosts: mariadb roles: - - database - tags: - - database + - mariadb + tags: mariadb -- hosts: message-broker +- hosts: rabbitmq roles: - - message-broker - tags: message-broker + - rabbitmq + tags: rabbitmq - hosts: keystone roles: diff --git a/docs/ansible-deployment.md b/docs/ansible-deployment.md index 402afec4a..6e3e8c914 100644 --- a/docs/ansible-deployment.md +++ b/docs/ansible-deployment.md @@ -86,8 +86,8 @@ To run the playbooks for only a particular service, Ansible tags can be used. Multiple tags may be specified, and order is still determined by the playbooks. cd ./kolla/ansible - ansible-playbook -i inventory/all-in-one -e @/etc/kolla/defaults.yml -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml site.yml --tags message-broker - ansible-playbook -i inventory/all-in-one -e @/etc/kolla/defaults.yml -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml site.yml --tags message-broker,database + ansible-playbook -i inventory/all-in-one -e @/etc/kolla/defaults.yml -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml site.yml --tags rabbitmq + ansible-playbook -i inventory/all-in-one -e @/etc/kolla/defaults.yml -e @/etc/kolla/globals.yml -e @/etc/kolla/passwords.yml site.yml --tags rabbitmq,mariadb Further Reading -- cgit v1.2.3