blob: 5b1a8320adf1d502e66db4eb9a92adff85efa562 [file] [log] [blame]
Mateusz Loseead60e2019-04-09 13:13:30 +02001{%- from "ceph/map.jinja" import osd, common with context %}
2
3ceph_osd_packages:
4 pkg.installed:
5 - names: {{ osd.pkgs }}
6
7/etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf:
8 file.managed:
9 - source: salt://ceph/files/{{ common.version }}/ceph.conf.{{ grains.os_family }}
10 - template: jinja
11 - require:
12 - pkg: ceph_osd_packages
13
14{% set ceph_version = pillar.ceph.common.version %}
15
16{%- if osd.backend is defined %}
17
18{%- for backend_name, backend in osd.backend.iteritems() %}
19
20{%- for disk in backend.disks %}
21
22{%- if disk.get('enabled', True) %}
23
24{% set dev = disk.dev %}
25
26# for uniqueness
27{% set dev_device = dev + disk.get('data_partition_prefix', '') + disk.get('data_partition', 1)|string %}
28
29#{{ dev }}{{ disk.get('data_partition', 1) }}
30
31zap_disk_{{ dev_device }}:
32 cmd.run:
33 - name: "ceph-disk zap {{ dev }}"
34 - unless: "ceph-disk list | grep {{ dev }} | grep -e 'ceph' -e 'mounted'"
35 - require:
36 - pkg: ceph_osd_packages
37 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
38 {%- if grains.get('noservices') %}
39 - onlyif: /bin/false
40 {%- endif %}
41
42{%- if disk.journal is defined %}
43
44zap_disk_journal_{{ disk.journal }}_for_{{ dev_device }}:
45 cmd.run:
46 - name: "ceph-disk zap {{ disk.journal }}"
47 - unless: "ceph-disk list | grep {{ disk.journal }} | grep -e 'ceph' -e 'mounted'"
48 - require:
49 - pkg: ceph_osd_packages
50 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
51 - cmd: zap_disk_{{ dev_device }}
52 {%- if grains.get('noservices') %}
53 - onlyif: /bin/false
54 {%- endif %}
55
56{%- endif %}
57
58{%- if disk.block_db is defined %}
59
60zap_disk_blockdb_{{ disk.block_db }}_for_{{ dev_device }}:
61 cmd.run:
62 - name: "ceph-disk zap {{ disk.block_db }}"
63 - unless: "ceph-disk list | grep {{ disk.block_db }} | grep -e 'ceph' -e 'mounted'"
64 - require:
65 - pkg: ceph_osd_packages
66 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
67 - cmd: zap_disk_{{ dev_device }}
68 {%- if grains.get('noservices') %}
69 - onlyif: /bin/false
70 {%- endif %}
71
72{%- endif %}
73
74{%- if disk.block_wal is defined %}
75
76zap_disk_blockwal_{{ disk.block_wal }}_for_{{ dev_device }}:
77 cmd.run:
78 - name: "ceph-disk zap {{ disk.block_wal }}"
79 - unless: "ceph-disk list | grep {{ disk.block_wal }} | grep -e 'ceph' -e 'mounted'"
80 - require:
81 - pkg: ceph_osd_packages
82 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
83 - cmd: zap_disk_{{ dev_device }}
84 {%- if grains.get('noservices') %}
85 - onlyif: /bin/false
86 {%- endif %}
87
88{%- endif %}
89
90{%- set cmd = [] %}
91{%- do cmd.append('--cluster ' + common.get('cluster_name', 'ceph')) %}
92{%- do cmd.append('--cluster-uuid ' + common.fsid) %}
93{%- if disk.get('dmcrypt', False) %}
94 {%- do cmd.append('--dmcrypt') %}
95 {%- do cmd.append('--dmcrypt-key-dir ' + disk.get('dmcrypt_key_dir', '/etc/ceph/dmcrypt-keys')) %}
96{%- endif %}
97{%- if disk.lockbox_partition is defined %}
98 {%- do cmd.append('--lockbox-partition-number ' + disk.lockbox_partition|string) %}
99{%- endif %}
100{%- do cmd.append("--prepare-key /etc/ceph/" + common.get('cluster_name', 'ceph') + ".client.bootstrap-osd.keyring") %}
101{%- if disk.data_partition is defined %}
102 {%- do cmd.append('--data-partition-number ' + disk.data_partition|string) %}
103{%- endif %}
104{%- if disk.data_partition_size is defined %}
105 {%- do cmd.append('--data-partition-size ' + disk.data_partition_size|string) %}
106{%- endif %}
107{%- if backend_name == 'bluestore' %}
108 {%- do cmd.append('--bluestore') %}
109 {%- if disk.block_partition is defined %}
110 {%- do cmd.append('--block-partition-number ' + disk.block_partition|string) %}
111 {%- endif %}
112 {%- if disk.block_db is defined %}
113 {%- if disk.block_db_dmcrypt is defined and not disk.block_db_dmcrypt %}
114 {%- do cmd.append('--block-db-non-dmcrypt') %}
115 {%- elif disk.get('block_db_dmcrypt', False) %}
116 {%- do cmd.append('--block-db-dmcrypt') %}
117 {%- endif %}
118 {%- if disk.block_db_partition is defined %}
119 {%- do cmd.append('--block-db-partition-number ' + disk.block_db_partition|string) %}
120 {%- endif %}
121 {%- do cmd.append('--block.db ' + disk.block_db) %}
122 {%- endif %}
123 {%- if disk.block_wal is defined %}
124 {%- if disk.block_wal_dmcrypt is defined and not disk.block_wal_dmcrypt %}
125 {%- do cmd.append('--block-wal-non-dmcrypt') %}
126 {%- elif disk.get('block_wal_dmcrypt', False) %}
127 {%- do cmd.append('--block-wal-dmcrypt') %}
128 {%- endif %}
129 {%- if disk.block_wal_partition is defined %}
130 {%- do cmd.append('--block-wal-partition-number ' + disk.block_wal_partition|string) %}
131 {%- endif %}
132 {%- do cmd.append('--block.wal ' + disk.block_wal) %}
133 {%- endif %}
134 {%- do cmd.append(dev) %}
135{%- elif backend_name == 'filestore' and ceph_version not in ['kraken', 'jewel'] %}
136 {%- if disk.journal_dmcrypt is defined and not disk.journal_dmcrypt %}
137 {%- do cmd.append('--journal-non-dmcrypt') %}
138 {%- elif disk.get('journal_dmcrypt', False) %}
139 {%- do cmd.append('--journal-dmcrypt') %}
140 {%- endif %}
141 {%- if disk.journal_partition is defined %}
142 {%- do cmd.append('--journal-partition-number ' + disk.journal_partition|string) %}
143 {%- endif %}
144 {%- do cmd.append('--filestore') %}
145 {%- do cmd.append(dev) %}
146 {%- if disk.journal is defined %}
147 {%- do cmd.append(disk.journal) %}
148 {%- endif %}
149{%- elif backend_name == 'filestore' %}
150 {%- if disk.journal_dmcrypt is defined and not disk.journal_dmcrypt %}
151 {%- do cmd.append('--journal-non-dmcrypt') %}
152 {%- elif disk.get('journal_dmcrypt', False) %}
153 {%- do cmd.append('--journal-dmcrypt') %}
154 {%- endif %}
155 {%- if disk.journal_partition is defined %}
156 {%- do cmd.append('--journal-partition-number ' + disk.journal_partition|string) %}
157 {%- endif %}
158 {%- do cmd.append(dev) %}
159 {%- if disk.journal is defined %}
160 {%- do cmd.append(disk.journal) %}
161 {%- endif %}
162{%- endif %}
163
164prepare_disk_{{ dev_device }}:
165 cmd.run:
166 - name: "yes | ceph-disk prepare {{ cmd|join(' ') }}"
167 - unless: "ceph-disk list | grep {{ dev_device }} | grep -e 'ceph' -e 'mounted'"
168 - require:
169 - cmd: zap_disk_{{ dev_device }}
170 - pkg: ceph_osd_packages
171 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
172 {%- if grains.get('noservices') %}
173 - onlyif: /bin/false
174 {%- endif %}
175
176reload_partition_table_{{ dev_device }}:
177 cmd.run:
178 - name: "partprobe"
179 - unless: "lsblk -p | grep {{ dev_device }} -A1 | grep -v lockbox | grep {{ dev_device }} | grep ceph | grep osd"
180 - require:
181 - cmd: prepare_disk_{{ dev_device }}
182 - cmd: zap_disk_{{ dev_device }}
183 - pkg: ceph_osd_packages
184 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
185 {%- if grains.get('noservices') %}
186 - onlyif: /bin/false
187 {%- else %}
188 - onlyif: ceph-disk list | grep {{ dev_device }} | grep ceph
189 {%- endif %}
190
191activate_disk_{{ dev_device }}:
192 cmd.run:
193{%- if disk.get('dmcrypt', False) %}
194 - name: "ceph-disk activate --dmcrypt --activate-key /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.client.bootstrap-osd.keyring {{ dev_device }}"
195{%- else %}
196 - name: "ceph-disk activate --activate-key /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.client.bootstrap-osd.keyring {{ dev_device }}"
197{%- endif %}
198 - unless: "lsblk -p | grep {{ dev_device }} -A1 | grep -v lockbox | grep {{ dev_device }} | grep ceph | grep osd"
199 - require:
200 - cmd: prepare_disk_{{ dev_device }}
201 - cmd: zap_disk_{{ dev_device }}
202 - pkg: ceph_osd_packages
203 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
204 {%- if grains.get('noservices') %}
205 - onlyif: /bin/false
206 {%- else %}
207 - onlyif: ceph-disk list | grep {{ dev_device }} | grep ceph
208 {%- endif %}
209
210{%- endif %}
211
212{%- endfor %}
213
214{%- endfor %}
215
216{%- endif %}
217
218osd_services_global:
219 service.running:
220 - enable: true
221 - names: ['ceph-osd.target']
222 - watch:
223 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
224 {%- if grains.get('noservices') %}
225 - onlyif: /bin/false
226 {%- endif %}
227
228osd_services:
229 service.running:
230 - enable: true
231 - names: ['ceph.target']
232 - watch:
233 - file: /etc/ceph/{{ common.get('cluster_name', 'ceph') }}.conf
234 {%- if grains.get('noservices') %}
235 - onlyif: /bin/false
236 {%- endif %}