--- - name: CEPH | Private IP des ersten Managers ermitteln ansible.builtin.set_fact: ceph_bootstrap_ip: "{{ hostvars[inventory_hostname]['ansible_' + private_interface]['ipv4']['address'] }}" when: inventory_hostname == groups['managers'][0] - name: CEPH | Cluster auf dem ersten Manager initialisieren (Bootstrap) ansible.builtin.command: cmd: "cephadm bootstrap --mon-ip {{ ceph_bootstrap_ip }}" creates: /etc/ceph/ceph.conf when: inventory_hostname == groups['managers'][0] - name: CEPH | Öffentlichen SSH-Schlüssel von cephadm abrufen ansible.builtin.command: "cephadm shell -- ceph cephadm get-pub-key" register: cephadm_pub_key changed_when: false delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | Öffentlichen Schlüssel von cephadm auf allen Knoten für root verteilen ansible.posix.authorized_key: user: root key: "{{ hostvars[groups['managers'][0]]['cephadm_pub_key'].stdout }}" state: present key_options: 'no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty' - name: CEPH | Andere Knoten zum Ceph-Cluster hinzufügen ansible.builtin.command: cmd: "ceph orch host add {{ item }} {{ hostvars[item]['ansible_' + private_interface]['ipv4']['address'] }}" loop: "{{ groups['all'] }}" delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | Prüfen, ob bereits OSDs (Speichergeräte) vorhanden sind ansible.builtin.command: "ceph osd ls" register: existing_osds changed_when: false failed_when: false delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | Spezifische Festplatte ({{ ceph_osd_device }}) auf jedem Knoten als OSD hinzufügen ansible.builtin.command: "ceph orch daemon add osd {{ item }}:{{ ceph_osd_device }}" loop: "{{ groups['all'] }}" delegate_to: "{{ groups['managers'][0] }}" run_once: true when: existing_osds.stdout | length == 0 - name: CEPH | Prüfen, ob CephFS bereits existiert ansible.builtin.command: "ceph fs ls -f json" register: cephfs_list changed_when: false delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | CephFS Pools und Dateisystem erstellen, falls nicht vorhanden block: - name: Metadaten-Pool für CephFS erstellen ansible.builtin.command: "ceph osd pool create {{ cephfs_name }}_metadata" - name: Daten-Pool für CephFS erstellen ansible.builtin.command: "ceph osd pool create {{ cephfs_name }}_data" - name: CephFS-Dateisystem erstellen ansible.builtin.command: "ceph fs new {{ cephfs_name }} {{ cephfs_name }}_metadata {{ cephfs_name }}_data" when: cephfs_list.stdout | from_json | length == 0 delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | Metadaten-Server (MDS) für CephFS starten ansible.builtin.command: "ceph orch apply mds {{ cephfs_name }} --placement=2" delegate_to: "{{ groups['managers'][0] }}" run_once: true when: cephfs_list.stdout | from_json | length == 0 - name: CEPH | Ceph Admin-Schlüssel für das Mounten abrufen ansible.builtin.command: "ceph auth get-key client.admin" register: ceph_admin_key changed_when: false delegate_to: "{{ groups['managers'][0] }}" run_once: true - name: CEPH | Mount-Punkt für CephFS erstellen ansible.builtin.file: path: /mnt/cephfs state: directory mode: '0755' - name: CEPH | CephFS auf allen Knoten mounten (und in /etc/fstab eintragen) ansible.posix.mount: path: /mnt/cephfs src: "{{ hostvars[groups['managers'][0]]['ceph_bootstrap_ip'] }}:/" fstype: ceph opts: "name=admin,secret={{ ceph_admin_key.stdout }}" state: mounted