---
- name: Make sure OS is updated since apt install might fail
  apt:
    update_cache: yes
  become: true
  when: ansible_os_family == "Debian"

- name: "Installing MySQL Debian"
  apt: name="{{ server_packages }}" update_cache=yes state=present
  become: true
  when: ansible_os_family == "Debian"

- name: Installing MySQL RedHat
  yum: name={{ item }}
  with_items: "{{ server_packages }}"
  become: true
  when: ansible_os_family == "RedHat"

- name: make sure mysql conf directory exists
  file: dest=/etc/mysql/conf.d state=directory
  become: true
  register: mysqldb_confdir_create

- name: "Starting MySQL"
  service: name={{ sqlServiceName }} state=started enabled=true
  become: true

#- name: "Adding root"
#  become: true
#  mysql_user: name=root host="{{ item }}" password="{{ mysql_root_password }}" login_user=root login_password="{{ mysql_root_password }}" check_implicit_admin=yes
#  with_items:
#    - "{{ ansible_hostname }}"
#    - 127.0.0.1
#    - ::1
#    - localhost

- name: Check that the slurm_acct_db_directory exists
  stat:
    path: /var/lib/mysql/slurm_acct_db/   #defined in /vars/filesystems.yaml
  register: slurm_acct_db_directory_result

# this will only work if a completely fresh db gets installed because it gets shipped with a blank root pw
- name: update mysql root password for all root accounts
  mysql_user: name=root host=localhost password={{ mysql_root_password }} login_user=root
  when: not slurm_acct_db_directory_result.stat.exists and mysqldb_confdir_create.changed

- name: "Adding user database"
  mysql_db: name={{ mysql_user_db_name }} state=present login_user=root login_password={{ mysql_root_password }}


- name: "Giving priviliges to user"
  mysql_user: name={{ mysql_user_name }} host={{ mysql_user_host }} password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  when: mysql_user_host is defined

- name: "Giving priviliges to user with shortname"
  mysql_user: name={{ mysql_user_name }} host={{ item }} password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  with_items: "{{ mysql_user_hosts_group }}"
  when: mysql_user_hosts_group is defined  

- name: "Giving priviliges to user with hardcoded hostname"
  mysql_user: name={{ mysql_user_name }} host='HARDCODE YOUR HOSTNAME' password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  tags: [never]

- name: "Giving priviliges to user with fdqn works only when run with --limit=ManagementNodes,SQLNodes"
  mysql_user: name={{ mysql_user_name }} host={{ hostvars[item].ansible_fqdn }} password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  with_items: "{{ mysql_user_hosts_group }}"
  when: mysql_user_hosts_group is defined

- name: "Giving priviliges to user with shortname"
  mysql_user: name={{ mysql_user_name }} host={{ item }} password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  with_items: "{{ mysql_user_hosts_group }}"
  when: mysql_user_hosts_group is defined

- name: "Giving priviliges to user with item.domain"
  mysql_user: name={{ mysql_user_name }} host="{{ item }}.{{ domain }}" password={{ mysql_user_password }} login_user=root login_password={{ mysql_root_password }} priv={{ mysql_user_db_name }}.*:ALL,GRANT state=present
  with_items: "{{ mysql_user_hosts_group }}"

- debug:
    msg: "{{ hostvars[item].ansible_fqdn }}"
  with_items: "{{ mysql_user_hosts_group }}"
  tags: [never]
