---
- include_tasks: pkg_{{ ansible_os_family | lower }}.yml

- name: Install cephadm
  package:
    name: cephadm
    state: present
  become: True

- name: Ensure /etc/ceph exists
  file:
    path: /etc/ceph
    state: directory
  become: True

- name: Generate ssh key for cephadm
  openssh_keypair:
    path: "/etc/ceph/cephadm.id"
    size: 4096
    comment: "cephadm"
  become: True
  register: cephadm_ssh_key

- name: Save public key
  copy:
    content: "{{ cephadm_ssh_key.public_key }}"
    dest: /etc/ceph/cephadm.pub
  become: True

- name: Copy cephadm public key to all hosts
  authorized_key:
    user: root
    state: present
    key: "{{ cephadm_ssh_key.public_key }}"
  become: True
  with_inventory_hostnames:
    - all
  delegate_to: "{{ item }}"

- name: Bootstrap cephadm
  vars:
    mon_ip: "{{ hostvars[inventory_hostname]['ansible_'+api_interface_name].ipv4.address }}"
  command:
    cmd: >
         cephadm bootstrap
         --ssh-private-key=/etc/ceph/cephadm.id
         --ssh-public-key=/etc/ceph/cephadm.pub
         --skip-monitoring-stack
         --skip-dashboard
         --skip-firewalld
         --mon-ip={{ mon_ip }}
         --mon-addrv='[v2:{{ mon_ip }}:3300,v1:{{ mon_ip }}:6789]'
  become: True
  register: cephadm_bootstrap_output

- name: Get ceph fsid
  vars:
    regexp: 'Cluster fsid: (.*)'
  set_fact:
    ceph_fsid: "{{ cephadm_bootstrap_output.stdout | regex_search(regexp,'\\1') | first }}"

- name: Template out cluster spec
  template:
    src: templates/cephadm.yml.j2
    dest: "/var/run/ceph/{{ ceph_fsid }}/cluster.yml"
  become: True

- name: Template out command spec
  template:
    src: templates/commands.sh.j2
    dest: "/var/run/ceph/{{ ceph_fsid }}/commands.sh"
  become: True

- name: Run commands
  command:
    cmd: >
         cephadm shell --
         bash /var/run/ceph/commands.sh
  become: True

# TODO(mnasiadka): Fix merge_configs to support tabs
- name: Generate ceph.conf without tabs
  vars:
    ceph_conf_fixed: |
      [global]
      fsid = {{ ceph_fsid }}
      mon_host = {% for host in groups['all'] %} {{ hostvars[host]['ansible_'+api_interface_name].ipv4.address }} {% if not loop.last %},{% endif %} {% endfor %}
  copy:
    content: "{{ ceph_conf_fixed }}"
    dest: "/etc/ceph/ceph.conf.fixed"
  become: True
