ceph-{mon,osd}: move default crush variables

Since ed36a11 we move the crush rules creation code from the ceph-mon to
the ceph-osd role.
To keep the backward compatibility we kept the possibility to set the
crush variables on the mons side but we didn't move the default values.
As a result, when using crush_rule_config set to true and wanted to use
the default values for crush_rules then the crush rule ansible task
creation will fail.

"msg": "'ansible.vars.hostvars.HostVarsVars object' has no attribute
'crush_rules'"

This patch move the default crush variables from ceph-mon to ceph-osd
role but also use those default values when nothing is defined on the
mons side.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1798864

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
pull/5054/head
Dimitri Savineau 2020-02-10 13:43:31 -05:00 committed by Guillaume Abrioux
parent 15bd4cd189
commit 1fc6b33714
6 changed files with 70 additions and 70 deletions

View File

@ -36,39 +36,6 @@ dummy:
# mds: allow * # mds: allow *
# mgr: allow * # mgr: allow *
###############
# CRUSH RULES #
###############
#crush_rule_config: false
#crush_rule_hdd:
# name: HDD
# root: default
# type: host
# class: hdd
# default: false
#crush_rule_ssd:
# name: SSD
# root: default
# type: host
# class: ssd
# default: false
#crush_rules:
# - "{{ crush_rule_hdd }}"
# - "{{ crush_rule_ssd }}"
# Caution: this will create crush roots and racks according to hostvars {{ osd_crush_location }}
# and will move hosts into them which might lead to significant data movement in the cluster!
#
# In order for the playbook to create CRUSH hierarchy, you have to setup your Ansible inventory file like so:
#
# [osds]
# ceph-osd-01 osd_crush_location="{ 'root': 'mon-roottt', 'rack': 'mon-rackkkk', 'pod': 'monpod', 'host': 'ceph-osd-01' }"
#
# Note that 'host' is mandatory and that you need to submit at least two bucket type (including the host)
#create_crush_tree: false
########## ##########
# DOCKER # # DOCKER #

View File

@ -125,6 +125,39 @@ dummy:
#crush_device_class: "" #crush_device_class: ""
#osds_per_device: 1 #osds_per_device: 1
###############
# CRUSH RULES #
###############
#crush_rule_config: false
#crush_rule_hdd:
# name: HDD
# root: default
# type: host
# class: hdd
# default: false
#crush_rule_ssd:
# name: SSD
# root: default
# type: host
# class: ssd
# default: false
#crush_rules:
# - "{{ crush_rule_hdd }}"
# - "{{ crush_rule_ssd }}"
# Caution: this will create crush roots and racks according to hostvars {{ osd_crush_location }}
# and will move hosts into them which might lead to significant data movement in the cluster!
#
# In order for the playbook to create CRUSH hierarchy, you have to setup your Ansible inventory file like so:
#
# [osds]
# ceph-osd-01 osd_crush_location="{ 'root': 'mon-roottt', 'rack': 'mon-rackkkk', 'pod': 'monpod', 'host': 'ceph-osd-01' }"
#
# Note that 'host' is mandatory and that you need to submit at least two bucket type (including the host)
#create_crush_tree: false
########## ##########
# DOCKER # # DOCKER #

View File

@ -28,39 +28,6 @@ client_admin_ceph_authtool_cap:
mds: allow * mds: allow *
mgr: allow * mgr: allow *
###############
# CRUSH RULES #
###############
crush_rule_config: false
crush_rule_hdd:
name: HDD
root: default
type: host
class: hdd
default: false
crush_rule_ssd:
name: SSD
root: default
type: host
class: ssd
default: false
crush_rules:
- "{{ crush_rule_hdd }}"
- "{{ crush_rule_ssd }}"
# Caution: this will create crush roots and racks according to hostvars {{ osd_crush_location }}
# and will move hosts into them which might lead to significant data movement in the cluster!
#
# In order for the playbook to create CRUSH hierarchy, you have to setup your Ansible inventory file like so:
#
# [osds]
# ceph-osd-01 osd_crush_location="{ 'root': 'mon-roottt', 'rack': 'mon-rackkkk', 'pod': 'monpod', 'host': 'ceph-osd-01' }"
#
# Note that 'host' is mandatory and that you need to submit at least two bucket type (including the host)
create_crush_tree: false
########## ##########
# DOCKER # # DOCKER #

View File

@ -117,6 +117,39 @@ lvm_volumes: []
crush_device_class: "" crush_device_class: ""
osds_per_device: 1 osds_per_device: 1
###############
# CRUSH RULES #
###############
crush_rule_config: false
crush_rule_hdd:
name: HDD
root: default
type: host
class: hdd
default: false
crush_rule_ssd:
name: SSD
root: default
type: host
class: ssd
default: false
crush_rules:
- "{{ crush_rule_hdd }}"
- "{{ crush_rule_ssd }}"
# Caution: this will create crush roots and racks according to hostvars {{ osd_crush_location }}
# and will move hosts into them which might lead to significant data movement in the cluster!
#
# In order for the playbook to create CRUSH hierarchy, you have to setup your Ansible inventory file like so:
#
# [osds]
# ceph-osd-01 osd_crush_location="{ 'root': 'mon-roottt', 'rack': 'mon-rackkkk', 'pod': 'monpod', 'host': 'ceph-osd-01' }"
#
# Note that 'host' is mandatory and that you need to submit at least two bucket type (including the host)
create_crush_tree: false
########## ##########
# DOCKER # # DOCKER #

View File

@ -7,13 +7,13 @@
register: config_crush_hierarchy register: config_crush_hierarchy
delegate_to: '{{ groups[mon_group_name][0] }}' delegate_to: '{{ groups[mon_group_name][0] }}'
when: when:
- hostvars[groups[mon_group_name][0]]['create_crush_tree'] | default(false) | bool - hostvars[groups[mon_group_name][0]]['create_crush_tree'] | default(create_crush_tree) | bool
- osd_crush_location is defined - osd_crush_location is defined
- name: create configured crush rules - name: create configured crush rules
command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd crush rule {{ 'create-replicated' if item.class is defined else 'create-simple' }} {{ item.name }} {{ item.root }} {{ item.type }} {{ item.class | default('') }}" command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd crush rule {{ 'create-replicated' if item.class is defined else 'create-simple' }} {{ item.name }} {{ item.root }} {{ item.type }} {{ item.class | default('') }}"
changed_when: false changed_when: false
with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | unique }}" with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | default(crush_rules) | unique }}"
delegate_to: '{{ groups[mon_group_name][0] }}' delegate_to: '{{ groups[mon_group_name][0] }}'
run_once: true run_once: true
@ -21,7 +21,7 @@
command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd -f json crush rule dump {{ item.name }}" 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 register: info_ceph_default_crush_rule
changed_when: false changed_when: false
with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | unique }}" with_items: "{{ hostvars[groups[mon_group_name][0]]['crush_rules'] | default(crush_rules) | unique }}"
delegate_to: '{{ groups[mon_group_name][0] }}' delegate_to: '{{ groups[mon_group_name][0] }}'
run_once: true run_once: true
when: item.default | bool when: item.default | bool

View File

@ -87,7 +87,7 @@
- name: include crush_rules.yml - name: include crush_rules.yml
include_tasks: crush_rules.yml include_tasks: crush_rules.yml
when: hostvars[groups[mon_group_name][0]]['crush_rule_config'] | default(false) | bool when: hostvars[groups[mon_group_name][0]]['crush_rule_config'] | default(crush_rule_config) | bool
- name: set_fact openstack_keys_tmp - preserve backward compatibility after the introduction of the ceph_keys module - name: set_fact openstack_keys_tmp - preserve backward compatibility after the introduction of the ceph_keys module
set_fact: set_fact: