crush map fix
Change-Id: I1c860bbe370b85458326c0dfaaef8eefd6f75abe
diff --git a/README.rst b/README.rst
index 579ac19..9312c48 100644
--- a/README.rst
+++ b/README.rst
@@ -202,14 +202,12 @@
host: 10.0.0.3
keyring:
admin:
- key: AQBHPYhZv5mYDBAAvisaSzCTQkC5gywGUp/voA==
caps:
mds: "allow *"
mgr: "allow *"
mon: "allow *"
osd: "allow *"
bootstrap-osd:
- key: BQBHPYhZv5mYDBAAvisaSzCTQkC5gywGUp/voA==
caps:
mon: "allow profile bootstrap-osd"
@@ -247,11 +245,9 @@
enabled: true
keyring:
mon:
- key: AQAnQIhZ6in5KxAAdf467upoRMWFcVg5pbh1yg==
caps:
mon: "allow *"
admin:
- key: AQBHPYhZv5mYDBAAvisaSzCTQkC5gywGUp/voA==
caps:
mds: "allow *"
mgr: "allow *"
@@ -284,15 +280,22 @@
ceph:
common:
- config:
- osd:
- key: value
+ version: luminous
+ fsid: a619c5fc-c4ed-4f22-9ed2-66cf2feca23d
+ public_network: 10.0.0.0/24, 10.1.0.0/24
+ cluster_network: 10.10.0.0/24, 10.11.0.0/24
+ keyring:
+ bootstrap-osd:
+ caps:
+ mon: "allow profile bootstrap-osd"
+ ....
osd:
enabled: true
ceph_host_id: '39'
- journal_size: 20480
- bluestore_block_db_size: 1073741824 (1G)
- bluestore_block_wal_size: 1073741824 (1G)
+ crush_parent: rack01
+ journal_size: 20480 (20G)
+ bluestore_block_db_size: 10073741824 (10G)
+ bluestore_block_wal_size: 10073741824 (10G)
bluestore_block_size: 807374182400 (800G)
backend:
filestore:
@@ -485,7 +488,7 @@
max_size: 10
steps:
- take crushroot.performanceblock.satahss.1
- - choseleaf firstn 0 type failure_domain
+ - chooseleaf firstn 0 type failure_domain
- emit
Ceph monitoring
diff --git a/ceph/files/crushmap b/ceph/files/crushmap
index a1065c4..07a441a 100644
--- a/ceph/files/crushmap
+++ b/ceph/files/crushmap
@@ -6,30 +6,27 @@
{%- set osds = {} -%}
{%- set weights = {} -%}
-# the following for loop must be changed
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() -%}
+ {%- if node_grains.ceph.ceph_disk is defined -%}
+ {# load OSDs and compute weight#}
+ {%- set node_weight = [] -%}
+ {%- for osd_id, osd in node_grains.ceph.ceph_disk.iteritems() -%}
+ {%- do osd.update({'host': node_grains.nodename }) -%}
+ {%- do osds.update({osd_id: osd}) -%}
+ {%- do node_weight.append(osd.weight|float) -%}
+ {%- endfor -%}
-#{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() -%}
-# {%- if node_grains.ceph_osd_host_id is defined -%}
-# {# load OSDs and compute weight#}
-# {%- set node_weight = [] -%}
-# {%- for osd_relative_id, osd in node_grains.ceph_osd_disk.iteritems() -%}
-# {%- set osd_id = node_grains.ceph_osd_host_id ~ osd_relative_id -%}
-# {%- do osd.update({'host': node_grains.nodename }) -%}
-# {%- do osds.update({osd_id: osd}) -%}
-# {%- do node_weight.append(osd.weight) -%}
-# {%- endfor -%}
-#
-# {%- do hosts.update({node_grains.nodename: {'weight': node_weight|sum, 'parent': node_grains.ceph_crush_parent }}) -%}
-#
-# {%- endif -%}
-#{%- endfor -%}
+ {%- do hosts.update({node_grains.nodename: {'weight': node_weight|sum, 'parent': node_grains.ceph_crush_parent }}) -%}
+
+ {%- endif -%}
+{%- endfor -%}
{%- set _crush = setup.crush -%}
{%- set _buckets = [] %}
# tunables
{%- for k, v in _crush.get('tunables', {}).iteritems() %}
-tunable {{ k }}: {{ v }}
+tunable {{ k }} {{ v }}
{%- endfor %}
# types
@@ -39,26 +36,29 @@
{%- endfor %}
# devices
-{%- for disk_id, disk in osds.iteritems() %}
+{% for disk_id, disk in osds|dictsort %}
device {{ disk_id }} osd.{{ disk_id }}{%- if disk.get('class') %} class {{ disk.class }}{% endif %}
{%- endfor %}
+{% set count = [1] %}
+
# host buckets
{%- for bucket in hosts %}
{%- set weight = [] %}
host {{ bucket }} {
- id -{{ loop.index }}
+ id -{{ count[0] }}
alg straw2
hash 0
{%- for disk_id, disk in osds.iteritems() %}
{%- if disk.host == bucket %}
item osd.{{ disk_id }} weight {{ disk.weight }}
- {%- do weight.append(disk.weight) %}
+ {%- do weight.append(disk.weight|float) %}
{%- endif %}
{%- endfor %}
{%- do weights.update({'host-' ~ bucket: weight|sum}) %}
# weight: {{ weights['host-' ~ bucket] }}
# parent: {{ hosts[bucket].parent }}
+ {% if count.append(count.pop() + 1) %}{% endif %}
}
{%- endfor %}
@@ -67,7 +67,7 @@
{%- for resource in _crush.get(i, {}) -%}
{% set weight = [] %}
{{ i }} {{ resource.name }} {
- id -{{ loop.index }}
+ id -{{ count[0] }}
alg {{ resource.get('alg', 'straw2') }}
hash {{ resource.get('hash', 0) }}
@@ -96,21 +96,21 @@
{%- do weights.update({i ~ '-' ~ resource.name: weight|sum }) %}
# weight: {{ weight|sum }}
}
+{% if count.append(count.pop() + 1) %}{% endif %}
{%- endfor %}
{%- endfor %}
# rules
{%- for rule_name, rule in _crush.get('rule', {}).iteritems() %}
rule {{ rule_name }} {
- {%- for opt_name, opt in rule.iteritems() %}
- {%- if opt is iterable and opt is not string -%}
- {%- for i in opt %}
- {{ opt_name }} {{ i }}
- {%- endfor %}
- {%- else %}
- {{ opt_name }} {{ opt }}
- {%- endif %}
+ ruleset {{ rule.ruleset }}
+ type {{ rule.type }}
+ min_size {{ rule.min_size }}
+ max_size {{ rule.max_size }}
+ {%- for step in rule.steps %}
+ step {{ step }}
{%- endfor %}
}
{% endfor %}
# end crush map
+
diff --git a/ceph/meta/salt.yml b/ceph/meta/salt.yml
index e69de29..1dc9a8c 100644
--- a/ceph/meta/salt.yml
+++ b/ceph/meta/salt.yml
@@ -0,0 +1,9 @@
+grain:
+ {%- if pillar.get('ceph', {}).get('osd', {}).get('enabled', False) %}
+ {%- from "ceph/map.jinja" import osd with context %}
+ {%- if osd.crush_parent is defined %}
+ ceph:
+ {%- set ceph_crush_parent = {'ceph_crush_parent': osd.crush_parent} %}
+ {{ ceph_crush_parent|yaml(False)|indent(4) }}
+ {%- endif %}
+ {%- endif %}
\ No newline at end of file
diff --git a/tests/pillar/ceph_osd_single.sls b/tests/pillar/ceph_osd_single.sls
index 3138ed7..81d0fa8 100644
--- a/tests/pillar/ceph_osd_single.sls
+++ b/tests/pillar/ceph_osd_single.sls
@@ -27,6 +27,7 @@
osd: "allow *"
osd:
enabled: true
+ crush_parent: rack01
version: kraken
host_id: 10
backend: