---
# 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.

- name: Install galera apt pre packages
  apt:
    pkg: "{{ item }}"
    state: "{{ galera_server_package_state }}"
    update_cache: yes
    cache_valid_time: "{{ cache_timeout }}"
  register: install_packages
  until: install_packages|success
  retries: 5
  delay: 2
  with_items: "{{ galera_server_required_distro_packages }}"
  tags:
    - galera-pre-apt-packages

- name: Add galera apt-keys
  apt_key:
    id: "{{ item.hash_id }}"
    keyserver: "{{ item.keyserver | default(omit) }}"
    data: "{{ item.data | default(omit) }}"
    url: "{{ item.url | default(omit) }}"
    state: "present"
  register: add_keys
  until: add_keys|success
  failed_when: false
  retries: 5
  delay: 2
  with_items: "{{ galera_gpg_keys }}"
  tags:
    - galera-apt-keys

- name: Add galera apt-keys using fallback keyserver
  apt_key:
    id: "{{ item.hash_id }}"
    keyserver: "{{ item.fallback_keyserver | default(omit) }}"
    url: "{{ item.fallback_url | default(omit) }}"
    state: "present"
  register: add_keys_fallback
  until: add_keys_fallback|success
  retries: 5
  delay: 2
  with_items: "{{ galera_gpg_keys }}"
  when: add_keys|failed and (item.fallback_keyserver is defined or item.fallback_url is defined)
  tags:
    - galera-apt-keys

- name: Remove old repos
  lineinfile:
    dest: "/etc/apt/sources.list.d/{{ item.name }}.list"
    regexp: "^((?!{{ item.repo }}).*)$"
    state: absent
  with_items:
    - { name: "MariaDB", repo: "{{ galera_repo.repo }}" }
    - { name: "Percona", repo: "{{ galera_percona_xtrabackup_repo.repo }}" }
  tags:
    - galera-client-repos
    - percona-repos

- name: Add galera repo
  apt_repository:
    repo: "{{ galera_repo.repo }}"
    filename: "{{ galera_repo.filename | default(omit) }}"
    state: "{{ galera_repo.state }}"
  register: add_repos
  until: add_repos|success
  retries: 5
  delay: 2
  tags:
    - galera-repos

- name: Add percona repo
  apt_repository:
    repo: "{{ galera_percona_xtrabackup_repo.repo }}"
    filename: "{{ galera_percona_xtrabackup_repo.filename | default(omit) }}"
    state: "{{ use_percona_upstream | bool | ternary('present','absent') }}"
  register: add_repos
  until: add_repos|success
  retries: 5
  delay: 2
  tags:
    - percona-repos

- name: Preseed galera password(s)
  debconf:
    name: "{{ item.name }}"
    question: "{{ item.question }}"
    value: "{{ item.value }}"
    vtype: "{{ item.vtype }}"
  with_items: "{{ galera_debconf_items }}"
  tags:
    - galera-debconf

- name: Prevent galera from starting on install
  copy:
    src: "policy-rc.d"
    dest: "/usr/sbin/policy-rc.d"
    mode: "0755"
    backup: yes

- name: Install galera packages
  apt:
    pkg: "{{ item }}"
    state: "{{ galera_server_package_state }}"
    update_cache: yes
    cache_valid_time: "{{ add_repos | changed | ternary('0', cache_timeout) }}"
  register: install_packages
  until: install_packages|success
  retries: 5
  delay: 2
  with_items: "{{ galera_server_mariadb_distro_packages }}"
  notify: Restart mysql
  tags:
    - galera-apt-packages

- name: Install percona-xtrabackup package from .deb
  apt:
    deb: "{{ percona_package_path }}"
    force: yes
  when: not use_percona_upstream | bool
  tags:
    - percona-apt-packages

- name: Install qpress package from .deb
  apt:
    deb: "{{ qpress_package_path }}"
    force: yes
  when: not use_percona_upstream | bool
  tags:
    - percona-apt-packages

- name: Install percona packages
  apt:
    pkg: "{{ item }}"
    state: installed
  with_items: "{{ galera_server_percona_distro_packages }}"
  when: use_percona_upstream | bool
  tags:
    - percona-apt-packages

- name: Remove policy-rc
  file:
    path: "/usr/sbin/policy-rc.d"
    state: absent
  tags:
    - galera_server-config