--- # Copyright 2016, Rackspace US, Inc. # # 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. # Unfortunately yum is case-insensitive, and RDO has mariadb-* packages, # while the MariaDB repo has MariaDB-* packages and they conflict. # To work around this we have to query for any installed RDO/CentOS # packages using rpm, then remove them. We have to remove them without # dependencies, otherwise for distro package installation types on shared # hosts it removes far too many packages. - name: Remove conflicting packages ansible.builtin.shell: | exit_code=0 for pkg in {{ galera_mariadb_distro_packages_remove | join(' ') }}; do if rpm --query --quiet ${pkg}; then rpm -ev --nodeps ${pkg} exit_code=2 fi done exit ${exit_code} register: _remove_existing_mariadb_packages changed_when: _remove_existing_mariadb_packages.rc == 2 failed_when: _remove_existing_mariadb_packages.rc not in [0, 2] when: galera_install_method == 'external_repo' args: executable: /bin/bash # In CentOS systems, /etc/my.cnf.d may already exist on the # system. We need to ensure that it is removed if that is true so # that we can replace it with symlinks to the directories expected # to be used by the MariaDB packages instead. - name: Stat /etc/my.cnf.d ansible.builtin.stat: path: /etc/my.cnf.d get_attributes: false get_checksum: false get_mime: false register: mycnfd_stat - name: Destroy my.cnf.d dir if is dir ansible.builtin.file: path: /etc/my.cnf.d state: absent force: true when: - mycnfd_stat.stat.isdir is defined - mycnfd_stat.stat.isdir # We replace the default paths for the system with symlinks to # the paths used by the MariaDB packages so ensure that any other # system expectations are still met. - name: Update the local file system CRUD ansible.builtin.file: src: "{{ item.src | default(omit) }}" path: "{{ item.path }}" state: "{{ item.state }}" force: "{{ item.force | default(omit) }}" mode: "{{ item.mode | default(omit) }}" with_items: - path: "/etc/mysql" state: "directory" mode: "0755" - path: "/etc/mysql/conf.d" state: "directory" - src: "/usr/lib64/galera" path: "/usr/lib/galera" state: "link" force: true - src: "/etc/mysql/conf.d" path: "/etc/my.cnf.d" state: "link" force: true - src: "/etc/mysql/my.cnf" path: "/etc/my.cnf" state: "link" force: true - name: If a keyfile is provided, copy the gpg keyfile to the key location ansible.builtin.copy: src: "gpg/{{ item.key | basename }}" dest: "{{ item.key }}" mode: "0644" with_items: "{{ galera_gpg_keys }}" when: - galera_install_method == 'external_repo' - name: Add galera repo ansible.builtin.yum_repository: name: "{{ galera_repo.name }}" description: "{{ galera_repo.description }}" baseurl: "{{ galera_repo.baseurl }}" gpgkey: "{{ galera_repo.gpgkey | default(omit) }}" gpgcheck: true enabled: true module_hotfixes: true priority: 25 state: "{{ galera_repo.state | default(omit) }}" register: add_galera_repos until: add_galera_repos is success retries: 5 delay: 2 - name: Install galera role remote packages ansible.builtin.package: name: "{{ galera_packages_list }}" state: "{{ galera_package_state }}" register: install_remote_packages until: install_remote_packages is success retries: 5 delay: 2 notify: - Restart all mysql