--- - name: generate cluster FSID command: uuidgen register: fsid_raw delegate_to: localhost become: no - set_fact: fsid: "{{ fsid_raw.stdout }}" - name: create bootstrap ceph.conf file: dest: /etc/ceph/ceph.conf state: touch - name: initialize bootstrap ceph.conf lineinfile: dest: /etc/ceph/ceph.conf line: "{{ item }}" state: present with_items: - "[global]" - "fsid = {{ fsid }}" - "mon initial members = {% for node in pvc_nodes if node.is_coordinator %}{{ node.hostname }}{% if not loop.last %},{% endif %}{% endfor %}" - "mon host = {% for host in pvc_nodes if host.is_coordinator %}{{ host.storage_ip }}{% if not loop.last %},{% endif %}{% endfor %}" - name: create temporary directory file: dest: /tmp/ceph-bootstrap state: directory - name: create mon keyring command: ceph-authtool --create-keyring /tmp/ceph-bootstrap/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' - name: create client admin keyring command: ceph-authtool --create-keyring /tmp/ceph-bootstrap/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' - name: add client admin keyring to mon keyring command: ceph-authtool /tmp/ceph-bootstrap/ceph.mon.keyring --import-keyring /tmp/ceph-bootstrap/ceph.client.admin.keyring - name: create OSD bootstrap keyring command: ceph-authtool --create-keyring /tmp/ceph-bootstrap/ceph.osd.bootstrap.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' - name: add OSD bootstrap keyring to mon keyring command: ceph-authtool /tmp/ceph-bootstrap/ceph.mon.keyring --import-keyring /tmp/ceph-bootstrap/ceph.osd.bootstrap.keyring - name: create monmap command: monmaptool --create --fsid {{ fsid }} {% for node in pvc_nodes if node.is_coordinator %}--add {{ node.hostname }} {{ node.storage_ip }} {% endfor %} /tmp/ceph-bootstrap/monmap - name: copy initial ceph.conf to the boostrap directory copy: src: /etc/ceph/ceph.conf dest: /tmp/ceph-bootstrap/ceph.conf remote_src: yes - name: add additional configuration lines to ceph.conf lineinfile: dest: /tmp/ceph-bootstrap/ceph.conf line: "{{ item }}" state: present with_items: - "public network = {{ pvc_storage_subnet }}/{{ pvc_storage_netmask }}" - "cluster network = {{ pvc_storage_subnet }}/{{ pvc_storage_netmask }}" - "auth cluster required = cephx" - "auth service required = cephx" - "auth client required = cephx" - "mon allow pool delete = 1" - "osd max scrubs = 2" - "osd scrub during recovery = false" - "osd scrub sleep = 5" - "osd max backfills = 8" - "osd recovery sleep hdd = 0" - "osd recovery sleep ssd = 0" - "osd recovery sleep hybrid = 0" - "osd pool default size = 3" - "osd pool default min size = 2" - "osd pool default pg num = 128" - "osd pool default pgp num = 128" - "osd pool default autoscale mode = off" - "osd crush chooseleaf type = 1" - "bluestore cache autotune = true" - "rbd default features = 5" - name: add single-node cluster options lineinfile: dest: /tmp/ceph-bootstrap/ceph.conf line: "{{ item }}" state: present with_items: - "osd pool default size = 2" - "osd pool default min size = 1" when: "{{ pvc_nodes | length }} == 1" - name: add memory limit if requested lineinfile: dest: /tmp/ceph-bootstrap/ceph.conf line: "{{ item }}" state: present with_items: - "osd memory target = {{ pvc_osd_memory_limit }}" when: pvc_osd_memory_limit is defined - name: collect bootstrapped Ceph files into the role fetch: src: /tmp/ceph-bootstrap/{{ item }} dest: files/{{ cluster_group }}/ceph/ flat: yes with_items: - ceph.conf - ceph.mon.keyring - ceph.client.admin.keyring - ceph.osd.bootstrap.keyring - monmap - name: remove the temporary bootstrap directory file: dest: /tmp/ceph-bootstrap state: absent force: yes