]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
Set the default crush rule in ceph.conf
authorDimitri Savineau <dsavinea@redhat.com>
Thu, 7 Mar 2019 22:14:12 +0000 (17:14 -0500)
committermergify[bot] <mergify[bot]@users.noreply.github.com>
Thu, 14 Mar 2019 14:48:03 +0000 (14:48 +0000)
Currently the default crush rule value is added to the ceph config
on the mon nodes as an extra configuration applied after the template
generation via the ansible ini module.

This implies two behaviors:

1/ On each ceph-ansible run, the ceph.conf will be regenerated via
ceph-config+template and then ceph-mon+ini_file. This leads to a
non necessary daemons restart.

2/ When other ceph daemons are collocated on the monitor nodes
(like mgr or rgw), the default crush rule value will be erased by
the ceph.conf template (mon -> mgr -> rgw).

This patch adds the osd_pool_default_crush_rule config to the ceph
template and only for the monitor nodes (like crush_rules.yml).
The default crush rule id is read (if exist) from the current ceph
configuration.
The default configuration is -1 (ceph default).

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1638092
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
(cherry picked from commit d8538ad4e16fe76d63e607491d41793303f929b1)

roles/ceph-config/templates/ceph.conf.j2
roles/ceph-defaults/vars/main.yml
roles/ceph-facts/tasks/facts.yml
roles/ceph-mon/tasks/crush_rules.yml

index 8440a3e65e41adbdfd1311aad3cbe7f040f15442..74434ab9947e4d896392821ab22725a03a1ad4a4 100644 (file)
@@ -33,6 +33,8 @@ mon initial members = {% for host in groups[mon_group_name] %}
       {%- endif %}
       {%- if not loop.last %},{% endif %}
     {% endfor %}
+
+osd pool default crush rule = {{ osd_pool_default_crush_rule | default(ceph_osd_pool_default_crush_rule) }}
 {% endif %}
 
 {% if not containerized_deployment and not containerized_deployment_with_kv -%}
index c5c4394c374440b812c74b4edc417533930137b5..46955422cd1779e12e7d9c05cf1dc7f243f0aa28 100644 (file)
@@ -1,3 +1,4 @@
 ---
 ceph_osd_pool_default_size: 3
 ceph_osd_pool_default_pg_num: 8
+ceph_osd_pool_default_crush_rule: -1
index 9e4162d2662f571ddf594009dbc9515ab0ee0a2c..762b955ca561b5bd59a151045a5fca20606cafa8 100644 (file)
 - name: set_fact osd_pool_default_size
   set_fact:
     osd_pool_default_size: "{{ ceph_conf_overrides.get('global', {}).get('osd_pool_default_size', ceph_osd_pool_default_size) }}"
+
+- name: check if the ceph conf exists
+  stat:
+    path: '/etc/ceph/{{ cluster }}.conf'
+  register: ceph_conf
+
+- name: get default crush rule value from ceph configuration
+  command: grep 'osd pool default crush rule' /etc/ceph/{{ cluster }}.conf
+  register: crush_rule_variable
+  changed_when: false
+  failed_when: false
+  when: ceph_conf.stat.exists
+
+- name: set_fact osd_pool_default_crush_rule
+  set_fact:
+    osd_pool_default_crush_rule: "{% if crush_rule_variable.rc == 0 %}{{ crush_rule_variable.stdout.split(' = ')[1] }}{% else %}{{ ceph_osd_pool_default_crush_rule }}{% endif %}"
+  when: ceph_conf.stat.exists
index 2da7e8254a7c9b856d710d883268988437feecb3..18428ecddd7a198ed5b66d6d6b3734a96014f083 100644 (file)
     - inventory_hostname == groups.get(mon_group_name) | last
     - not item.get('skipped', false)
 
-- name: set_fact osd_pool_default_crush_rule
-  set_fact:
-    osd_pool_default_crush_rule: "osd_pool_default_crush_rule"
-
 - name: insert new default crush rule into daemon to prevent restart
-  command: "{{ hostvars[item]['docker_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} daemon mon.{{ hostvars[item]['monitor_name'] }} config set {{ osd_pool_default_crush_rule }} {{ info_ceph_default_crush_rule_yaml.rule_id }}"
+  command: "{{ hostvars[item]['docker_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} daemon mon.{{ hostvars[item]['monitor_name'] }} config set osd_pool_default_crush_rule {{ info_ceph_default_crush_rule_yaml.rule_id }}"
   changed_when: false
   delegate_to: "{{ item }}"
   with_items: "{{ groups[mon_group_name] }}"
@@ -55,7 +51,7 @@
   ini_file:
     dest: "/etc/ceph/{{ cluster }}.conf"
     section: "global"
-    option: "{{ osd_pool_default_crush_rule }}"
+    option: "osd pool default crush rule"
     value: "{{ info_ceph_default_crush_rule_yaml.rule_id }}"
   delegate_to: "{{ item }}"
   with_items: "{{ groups[mon_group_name] }}"