93 lines
3.6 KiB
YAML
93 lines
3.6 KiB
YAML
---
|
|
- 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 |