]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
move crush rule creation from mon to osd role
authorDimitri Savineau <dsavinea@redhat.com>
Thu, 31 Oct 2019 20:17:33 +0000 (16:17 -0400)
committerGuillaume Abrioux <gabrioux@redhat.com>
Thu, 14 Nov 2019 15:25:46 +0000 (16:25 +0100)
If we want to create crush rules with the create-replicated sub command
and device class then we need to have the OSD created before the crush
rules otherwise the device classes won't exist.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
roles/ceph-mon/tasks/crush_rules.yml [deleted file]
roles/ceph-mon/tasks/main.yml
roles/ceph-osd/tasks/crush_rules.yml [new file with mode: 0644]
roles/ceph-osd/tasks/main.yml

diff --git a/roles/ceph-mon/tasks/crush_rules.yml b/roles/ceph-mon/tasks/crush_rules.yml
deleted file mode 100644 (file)
index f77a513..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
----
-- name: configure crush hierarchy
-  ceph_crush:
-    cluster: "{{ cluster }}"
-    location: "{{ hostvars[item]['osd_crush_location'] }}"
-    containerized: "{{ container_exec_cmd }}"
-  with_items: "{{ groups[osd_group_name] }}"
-  register: config_crush_hierarchy
-  when:
-    - inventory_hostname == groups.get(mon_group_name) | last
-    - create_crush_tree | bool
-    - hostvars[item]['osd_crush_location'] is defined
-
-- name: create configured crush rules
-  command: "{{ container_exec_cmd }} ceph --cluster {{ cluster }} osd crush rule create-simple {{ item.name }} {{ item.root }} {{ item.type }}"
-  with_items: "{{ crush_rules | unique }}"
-  changed_when: false
-  when: inventory_hostname == groups.get(mon_group_name) | last
-
-- name: get id for new default crush rule
-  command: "{{ container_exec_cmd }} ceph --cluster {{ cluster }} osd -f json crush rule dump {{ item.name }}"
-  register: info_ceph_default_crush_rule
-  changed_when: false
-  with_items: "{{ crush_rules }}"
-  when:
-    - inventory_hostname == groups.get(mon_group_name) | last
-    - item.default
-
-# If multiple rules are set as default (should not be) then the last one is taken as actual default.
-# the with_items statement overrides each iteration with the new one.
-# NOTE(leseb): we should actually fail if multiple rules are set as default
-- name: set_fact info_ceph_default_crush_rule_yaml
-  set_fact:
-    info_ceph_default_crush_rule_yaml: "{{ item.stdout | from_json() }}"
-  with_items: "{{ info_ceph_default_crush_rule.results }}"
-  when:
-    - inventory_hostname == groups.get(mon_group_name) | last
-    - not item.get('skipped', false)
-
-- name: insert new default crush rule into daemon to prevent restart
-  command: "{{ hostvars[item]['container_exec_cmd'] | default('') }} ceph --admin-daemon /var/run/ceph/{{ cluster }}-mon.{{ hostvars[item]['monitor_name'] }}.asok 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] }}"
-  when:
-    - not config_crush_hierarchy.get('skipped', false)
-    - info_ceph_default_crush_rule_yaml | default('') | length > 0
-
-- name: "add new default crush rule to {{ cluster }}.conf"
-  ini_file:
-    dest: "/etc/ceph/{{ cluster }}.conf"
-    section: "global"
-    option: "osd pool default crush rule"
-    value: "{{ info_ceph_default_crush_rule_yaml.rule_id }}"
-  delegate_to: "{{ item }}"
-  with_items: "{{ groups[mon_group_name] }}"
-  when:
-    - not config_crush_hierarchy.get('skipped', false)
-    - info_ceph_default_crush_rule_yaml | default('') | length > 0
index 7164ac89d4063d3d5ab2cdfd0aa63811f039ab25..528c7ce8c259e2a851409ca2a126f1ed6d1bc8cf 100644 (file)
@@ -23,7 +23,3 @@
   when:
     - secure_cluster | bool
     - inventory_hostname == groups[mon_group_name] | first
-
-- name: crush_rules.yml
-  include_tasks: crush_rules.yml
-  when: crush_rule_config | bool
diff --git a/roles/ceph-osd/tasks/crush_rules.yml b/roles/ceph-osd/tasks/crush_rules.yml
new file mode 100644 (file)
index 0000000..02e5bef
--- /dev/null
@@ -0,0 +1,60 @@
+---
+- name: configure crush hierarchy
+  ceph_crush:
+    cluster: "{{ cluster }}"
+    location: "{{ osd_crush_location }}"
+    containerized: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }}"
+  register: config_crush_hierarchy
+  delegate_to: '{{ groups[mon_group_name][0] }}'
+  when:
+    - hostvars[groups[mon_group_name][0]]['create_crush_tree'] | default(false) | bool
+    - osd_crush_location is defined
+
+- name: create configured crush rules
+  command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd crush rule create-simple {{ item.name }} {{ item.root }} {{ item.type }}"
+  changed_when: false
+  with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | unique }}"
+  delegate_to: '{{ groups[mon_group_name][0] }}'
+  run_once: true
+
+- name: get id for new default crush rule
+  command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd -f json crush rule dump {{ item.name }}"
+  register: info_ceph_default_crush_rule
+  changed_when: false
+  with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | unique }}"
+  delegate_to: '{{ groups[mon_group_name][0] }}'
+  run_once: true
+  when: item.default | bool
+
+# If multiple rules are set as default (should not be) then the last one is taken as actual default.
+# the with_items statement overrides each iteration with the new one.
+# NOTE(leseb): we should actually fail if multiple rules are set as default
+- name: set_fact info_ceph_default_crush_rule_yaml
+  set_fact:
+    info_ceph_default_crush_rule_yaml: "{{ item.stdout | from_json() }}"
+  with_items: "{{ info_ceph_default_crush_rule.results }}"
+  run_once: true
+  when: not item.get('skipped', false)
+
+- name: insert new default crush rule into daemon to prevent restart
+  command: "{{ hostvars[item]['container_exec_cmd'] | default('') }} ceph --admin-daemon /var/run/ceph/{{ cluster }}-mon.{{ hostvars[item]['monitor_name'] }}.asok 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] }}"
+  run_once: true
+  when:
+    - not config_crush_hierarchy.get('skipped', false)
+    - info_ceph_default_crush_rule_yaml | default('') | length > 0
+
+- name: "add new default crush rule to {{ cluster }}.conf"
+  ini_file:
+    dest: "/etc/ceph/{{ cluster }}.conf"
+    section: "global"
+    option: "osd pool default crush rule"
+    value: "{{ info_ceph_default_crush_rule_yaml.rule_id }}"
+  delegate_to: "{{ item }}"
+  with_items: "{{ groups[mon_group_name] }}"
+  run_once: true
+  when:
+    - not config_crush_hierarchy.get('skipped', false)
+    - info_ceph_default_crush_rule_yaml | default('') | length > 0
index 3993b327de43117e607867b89e8c5cf654c2e871..84df01483c7e9ddd8504160c2f9eb6236868fb6a 100644 (file)
 - name: include_tasks start_osds.yml
   include_tasks: start_osds.yml
 
+- name: include crush_rules.yml
+  include_tasks: crush_rules.yml
+  when: hostvars[groups[mon_group_name][0]]['crush_rule_config'] | default(false) | bool
+
 - name: set_fact openstack_keys_tmp - preserve backward compatibility after the introduction of the ceph_keys module
   set_fact:
     openstack_keys_tmp: "{{ openstack_keys_tmp|default([]) + [ { 'key': item.key, 'name': item.name, 'caps': { 'mon': item.mon_cap, 'osd': item.osd_cap|default(''), 'mds': item.mds_cap|default(''), 'mgr': item.mgr_cap|default('') } , 'mode': item.mode } ] }}"