'nodes': JList(JObj({}, allow_unknown=True)),
'roots': JList(int)
}))
+
+ @DashboardTestCase.RunAs('test', 'test', ['pool-manager', 'cluster-manager'])
+ def test_create_erasure_with_ssd(self):
+ data = self._get('/api/osd/0')
+ self.assertStatus(200)
+ device_class = data['osd_metadata']['default_device_class']
+ self.create_and_delete_rule({
+ 'pool_type': 'erasure',
+ 'name': 'some_erasure_crush_rule',
+ 'profile': 'default',
+ 'failure_domain': 'osd',
+ 'device_class': device_class
+ })
return r
raise NotFound('No such crush rule')
- def create(self, name, root, failure_domain, device_class=None):
- rule = {
- 'name': name,
- 'root': root,
- 'type': failure_domain,
- 'class': device_class
- }
- CephService.send_command('mon', 'osd crush rule create-replicated', **rule)
+ def create(self, name, failure_domain, device_class=None, root=None, profile=None,
+ pool_type='replication'):
+ if pool_type == 'erasure':
+ rule = {
+ 'name': name,
+ 'profile': profile,
+ 'type': failure_domain,
+ 'class': device_class
+ }
+ CephService.send_command('mon', 'osd crush rule create-erasure', **rule)
+ else:
+ rule = {
+ 'name': name,
+ 'root': root,
+ 'type': failure_domain,
+ 'class': device_class
+ }
+ CephService.send_command('mon', 'osd crush rule create-replicated', **rule)
def delete(self, name):
CephService.send_command('mon', 'osd crush rule rm', name=name)