aboutsummaryrefslogtreecommitdiff
path: root/ansible
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-04 06:51:44 +0000
committerGerrit Code Review <review@openstack.org>2015-07-04 06:51:44 +0000
commit097734fbe06d4b52fabb2ec5edecb2ebb782db2e (patch)
treea935773de3600f35724cdd88e946ef66603f53e6 /ansible
parentbf8d20826fe59a64a11f224578b36cedf72535e9 (diff)
parentefbfd7912b5fff41a3d3060af9e64c35c7e89f3b (diff)
downloadkolla-097734fbe06d4b52fabb2ec5edecb2ebb782db2e.tar.gz
kolla-097734fbe06d4b52fabb2ec5edecb2ebb782db2e.zip
Merge "Ansible Mariadb w/ Galera support"
Diffstat (limited to 'ansible')
-rw-r--r--ansible/library/merge_configs3
-rw-r--r--ansible/roles/database/defaults/main.yml21
-rw-r--r--ansible/roles/database/tasks/bootstrap.yml61
-rw-r--r--ansible/roles/database/tasks/config.yml10
-rw-r--r--ansible/roles/database/tasks/main.yml18
-rw-r--r--ansible/roles/database/tasks/register.yml18
-rw-r--r--ansible/roles/database/tasks/start.yml13
-rw-r--r--ansible/roles/database/templates/galera.cnf.j218
-rw-r--r--ansible/roles/start.yml10
9 files changed, 162 insertions, 10 deletions
diff --git a/ansible/library/merge_configs b/ansible/library/merge_configs
index 9991833aa..b1baeb3d1 100644
--- a/ansible/library/merge_configs
+++ b/ansible/library/merge_configs
@@ -14,6 +14,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+# TODO(SamYaple): Provide idempotency for module (Note to self: pull logic from
+# pervious bslurp module in yaodu)
+
DOCUMENTATION = '''
---
module: merge_configs
diff --git a/ansible/roles/database/defaults/main.yml b/ansible/roles/database/defaults/main.yml
new file mode 100644
index 000000000..469ad8355
--- /dev/null
+++ b/ansible/roles/database/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/database/tasks/bootstrap.yml b/ansible/roles/database/tasks/bootstrap.yml
new file mode 100644
index 000000000..4a46ee7cb
--- /dev/null
+++ b/ansible/roles/database/tasks/bootstrap.yml
@@ -0,0 +1,61 @@
+---
+- name: Creating temp file on localhost
+ local_action: shell echo 'None' > /tmp/kolla_mariadb_cluster
+ register: status
+ changed_when: False
+ failed_when: status.rc != 0
+ 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: shell echo "{{ ansible_hostname }}" > /tmp/kolla_mariadb_cluster
+ register: status
+ changed_when: False
+ failed_when: status.rc != 0
+ 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: shell rm /tmp/kolla_mariadb_cluster
+ register: status
+ changed_when: False
+ failed_when: status.rc != 0
+ always_run: True
+ run_once: True
+
+- include: ../../start.yml
+ vars:
+ container_environment:
+ KOLLA_BOOTSTRAP:
+ container_image: "{{ docker_database_image_full }}"
+ container_name: "mariadb_data"
+ container_volumes:
+ - "/var/lib/mysql/"
+ container_command: "/bin/sleep infinity"
+
+- 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_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
new file mode 100644
index 000000000..a5f55483f
--- /dev/null
+++ b/ansible/roles/database/tasks/config.yml
@@ -0,0 +1,10 @@
+---
+
+
+- include: ../../config.yml
+ vars:
+ 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
index 559b4bd1c..c7474dde5 100644
--- a/ansible/roles/database/tasks/main.yml
+++ b/ansible/roles/database/tasks/main.yml
@@ -1,7 +1,13 @@
---
-- name: Bringing up mariadb service(s)
- docker_compose:
- project_name: mariadb
- compose_file: "{{ koalla_directory }}/compose/mariadb.yml"
- command: up
- no_recreate: true
+- include: config.yml
+
+- include: bootstrap.yml
+
+- include: start.yml
+
+- 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
diff --git a/ansible/roles/database/tasks/register.yml b/ansible/roles/database/tasks/register.yml
new file mode 100644
index 000000000..ba6021090
--- /dev/null
+++ b/ansible/roles/database/tasks/register.yml
@@ -0,0 +1,18 @@
+---
+- name: Creating haproxy mysql user
+ mysql_user:
+ login_host: "{{ database_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
new file mode 100644
index 000000000..e60d49d4e
--- /dev/null
+++ b/ansible/roles/database/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
+ ( 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
new file mode 100644
index 000000000..9d9d725d4
--- /dev/null
+++ b/ansible/roles/database/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://{% for host in groups['database'] %}{{ hostvars[host]['ansible_hostname'] }}{% if not loop.last %},{% endif %}{% endfor %}
+
+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/start.yml b/ansible/roles/start.yml
index 44d9b0c67..8aadfb3fc 100644
--- a/ansible/roles/start.yml
+++ b/ansible/roles/start.yml
@@ -9,22 +9,24 @@
# docker_api_version from docker-py, so we specify it here. This will be
# removed when the bugfix makes it downstream
-- name: Starting the container
+- name: Starting container(s)
docker:
+ command: "{{ container_command | default(None) }}"
detach: "{{ container_detach | default('True') }}"
- env: "{{ container_environment }}"
+ env: "{{ container_environment | default(None) }}"
docker_api_version: "{{ docker_api_version }}"
image: "{{ container_image }}"
insecure_registry: "{{ docker_insecure_registry }}"
name: "{{ container_name }}"
- net: host
+ net: "host"
password: "{{ docker_registry_password }}"
privileged: "{{ container_privileged | default('False') }}"
pull: "{{ docker_pull_policy }}"
registry: "{{ docker_registry }}"
restart_policy: "{{ docker_restart_policy }}"
restart_policy_retry: "{{ docker_restart_policy_retry }}"
- state: reloaded
+ state: "reloaded"
username: "{{ docker_registry_username }}"
volumes: "{{ container_volumes }}"
+ volumes_from: "{{ container_volumes_from | default([]) }}"
run_once: "{{ run_once | default('False') }}"