--- # This playbook use to migrate activity osd(s) journal to SSD. # # You should define `osds_journal_devices` variable for host which osd(s) journal migrate to. # # For example in host_vars/hostname1.yml # # osds_journal_devices: # - device_name: /dev/sdd # partitions: # - index: 1 # size: 10G # osd_id: 0 # - index: 2 # size: 10G # osd_id: 1 # - device_name: /dev/sdf # partitions: # - index: 1 # size: 10G # osd_id: 2 # # @param device_name: The full device path of new ssd. # @param partitions: The custom partition layout of ssd. # @param index: The index of this partition. # @param size: The size of this partition. # @param osd_id: Which osds's journal this partition for. # # ansible-playbook migrate-journal-to-ssd.yml # The playbook will migrate osd(s) journal to ssd device which you define in host_vars. - vars: osd_group_name: osds journal_typecode: 45b0969e-9b03-4f30-b4c6-b4b80ceff106 osds_journal_devices: [] hosts: - "{{ osd_group_name }}" serial: 1 tasks: - name: get osd(s) if directory stat stat: path: "/var/lib/ceph/osd/{{ cluster }}-{{ item.1.osd_id }}/journal_uuid" register: osds_dir_stat with_subelements: - "{{ osds_journal_devices }}" - partitions - name: exit playbook osd(s) is not on this host fail: msg: exit playbook osd(s) is not on this host with_items: osds_dir_stat.results when: - osds_dir_stat is defined and item.stat.exists == false - name: install sgdisk(gdisk) package: name: gdisk state: present register: result until: result is succeeded when: osds_journal_devices is defined - name: generate uuid for osds journal command: uuidgen register: osds with_subelements: - "{{ osds_journal_devices }}" - partitions - name: make osd partitions on ssd shell: > sgdisk --new={{item.item[1].index}}:0:+{{item.item[1].size}} "--change-name={{ item.item[1].index }}:ceph journal" --typecode={{ item.item[1].index }}:{{ journal_typecode }} --partition-guid={{ item.item[1].index }}:{{ item.stdout }} --mbrtogpt -- {{ item.item[0].device_name }} with_items: - "{{ osds.results }}" - name: stop osd(s) service service: name: "ceph-osd@{{ item.item[1].osd_id }}" state: stopped with_items: - "{{ osds.results }}" - name: flush osd(s) journal command: ceph-osd -i {{ item.item[1].osd_id }} --flush-journal --cluster {{ cluster }} with_items: - "{{ osds.results }}" when: osds_journal_devices is defined - name: update osd(s) journal soft link command: ln -sf /dev/disk/by-partuuid/{{ item.stdout }} /var/lib/ceph/osd/{{ cluster }}-{{ item.item[1].osd_id }}/journal with_items: - "{{ osds.results }}" - name: update osd(s) journal uuid command: echo {{ item.stdout }} > /var/lib/ceph/osd/{{ cluster }}-{{ item.item[1].osd_id }}/journal_uuid with_items: - "{{ osds.results }}" - name: initialize osd(s) new journal command: ceph-osd -i {{ item.item[1].osd_id }} --mkjournal --cluster {{ cluster }} with_items: - "{{ osds.results }}" - name: start osd(s) service service: name: "ceph-osd@{{ item.item[1].osd_id }}" state: started with_items: - "{{ osds.results }}"