Skip to content

Commit 2038b3e

Browse files
authored
Merge pull request ceph#58224 from Serrini/fix-66490-main
mgr/dashboard: add restful api for creating crush rule with type of 'erasure' Reviewed-by: Nizamudeen A <[email protected]>
2 parents 59acb54 + 3a7f8e5 commit 2038b3e

File tree

3 files changed

+36
-9
lines changed

3 files changed

+36
-9
lines changed

qa/tasks/mgr/dashboard/test_crush_rule.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,16 @@ def test_crush_rule_info(self):
8282
'nodes': JList(JObj({}, allow_unknown=True)),
8383
'roots': JList(int)
8484
}))
85+
86+
@DashboardTestCase.RunAs('test', 'test', ['pool-manager', 'cluster-manager'])
87+
def test_create_erasure_with_ssd(self):
88+
data = self._get('/api/osd/0')
89+
self.assertStatus(200)
90+
device_class = data['osd_metadata']['default_device_class']
91+
self.create_and_delete_rule({
92+
'pool_type': 'erasure',
93+
'name': 'some_erasure_crush_rule',
94+
'profile': 'default',
95+
'failure_domain': 'osd',
96+
'device_class': device_class
97+
})

src/pybind/mgr/dashboard/controllers/crush_rule.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,24 @@ def get(self, name):
3838
return r
3939
raise NotFound('No such crush rule')
4040

41-
def create(self, name, root, failure_domain, device_class=None):
42-
rule = {
43-
'name': name,
44-
'root': root,
45-
'type': failure_domain,
46-
'class': device_class
47-
}
48-
CephService.send_command('mon', 'osd crush rule create-replicated', **rule)
41+
def create(self, name, failure_domain, device_class=None, root=None, profile=None,
42+
pool_type='replication'):
43+
if pool_type == 'erasure':
44+
rule = {
45+
'name': name,
46+
'profile': profile,
47+
'type': failure_domain,
48+
'class': device_class
49+
}
50+
CephService.send_command('mon', 'osd crush rule create-erasure', **rule)
51+
else:
52+
rule = {
53+
'name': name,
54+
'root': root,
55+
'type': failure_domain,
56+
'class': device_class
57+
}
58+
CephService.send_command('mon', 'osd crush rule create-replicated', **rule)
4959

5060
def delete(self, name):
5161
CephService.send_command('mon', 'osd crush rule rm', name=name)

src/pybind/mgr/dashboard/openapi.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,15 @@ paths:
42064206
type: string
42074207
name:
42084208
type: string
4209+
pool_type:
4210+
default: replication
4211+
type: string
4212+
profile:
4213+
type: string
42094214
root:
42104215
type: string
42114216
required:
42124217
- name
4213-
- root
42144218
- failure_domain
42154219
type: object
42164220
responses:

0 commit comments

Comments
 (0)