From: Ricardo Marques Date: Tue, 7 May 2019 11:28:19 +0000 (+0100) Subject: mgr/dashboard: All RBD features are supported by 'tcmu:runner' X-Git-Tag: v15.1.0~2740^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f971270a22855753d33ac0dd0e14455297c637a2;p=ceph-ci.git mgr/dashboard: All RBD features are supported by 'tcmu:runner' Fixes: https://tracker.ceph.com/issues/39607 Signed-off-by: Ricardo Marques --- diff --git a/src/pybind/mgr/dashboard/controllers/iscsi.py b/src/pybind/mgr/dashboard/controllers/iscsi.py index f939c9d1b1d..da25f4c70a6 100644 --- a/src/pybind/mgr/dashboard/controllers/iscsi.py +++ b/src/pybind/mgr/dashboard/controllers/iscsi.py @@ -431,9 +431,9 @@ class IscsiTarget(RESTController): image = disk['image'] backstore = disk['backstore'] required_rbd_features = settings['required_rbd_features'][backstore] - supported_rbd_features = settings['supported_rbd_features'][backstore] + unsupported_rbd_features = settings['unsupported_rbd_features'][backstore] IscsiTarget._validate_image(pool, image, backstore, required_rbd_features, - supported_rbd_features) + unsupported_rbd_features) initiators = [] for group in groups: @@ -444,7 +444,7 @@ class IscsiTarget(RESTController): component='iscsi') @staticmethod - def _validate_image(pool, image, backstore, required_rbd_features, supported_rbd_features): + def _validate_image(pool, image, backstore, required_rbd_features, unsupported_rbd_features): try: ioctx = mgr.rados.open_ioctx(pool) try: @@ -459,14 +459,14 @@ class IscsiTarget(RESTController): required_rbd_features)), code='image_missing_required_features', component='iscsi') - if img.features() & supported_rbd_features != img.features(): + if img.features() & unsupported_rbd_features != 0: raise DashboardException(msg='Image {} cannot be exported using {} ' 'backstore because it contains unsupported ' - 'features (supported features are ' + 'features (' '{})'.format(image, backstore, format_bitmask( - supported_rbd_features)), + unsupported_rbd_features)), code='image_contains_unsupported_features', component='iscsi') diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts index 65e5764c7dd..3b3ffd9243f 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts @@ -37,9 +37,9 @@ describe('IscsiTargetFormComponent', () => { 'backstore:1': 0, 'backstore:2': 0 }, - supported_rbd_features: { - 'backstore:1': 61, - 'backstore:2': 61 + unsupported_rbd_features: { + 'backstore:1': 0, + 'backstore:2': 0 }, backstores: ['backstore:1', 'backstore:2'], default_backstore: 'backstore:1' diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts index 04016d78838..d8620421fe3 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts @@ -32,7 +32,7 @@ export class IscsiTargetFormComponent implements OnInit { disk_default_controls: any; backstores: string[]; default_backstore: string; - supported_rbd_features: any; + unsupported_rbd_features: any; required_rbd_features: any; isEdit = false; @@ -124,7 +124,7 @@ export class IscsiTargetFormComponent implements OnInit { this.disk_default_controls = data[3].disk_default_controls; this.backstores = data[3].backstores; this.default_backstore = data[3].default_backstore; - this.supported_rbd_features = data[3].supported_rbd_features; + this.unsupported_rbd_features = data[3].unsupported_rbd_features; this.required_rbd_features = data[3].required_rbd_features; // rbdService.list() @@ -685,11 +685,11 @@ export class IscsiTargetFormComponent implements OnInit { validFeatures(image, backstore) { const imageFeatures = image.features; const requiredFeatures = this.required_rbd_features[backstore]; - const supportedFeatures = this.supported_rbd_features[backstore]; + const unsupportedFeatures = this.unsupported_rbd_features[backstore]; // tslint:disable-next-line:no-bitwise const validRequiredFeatures = (imageFeatures & requiredFeatures) === requiredFeatures; // tslint:disable-next-line:no-bitwise - const validSupportedFeatures = (imageFeatures & supportedFeatures) === imageFeatures; + const validSupportedFeatures = (imageFeatures & unsupportedFeatures) === 0; return validRequiredFeatures && validSupportedFeatures; } diff --git a/src/pybind/mgr/dashboard/tests/test_iscsi.py b/src/pybind/mgr/dashboard/tests/test_iscsi.py index 300052960b9..949bf629b50 100644 --- a/src/pybind/mgr/dashboard/tests/test_iscsi.py +++ b/src/pybind/mgr/dashboard/tests/test_iscsi.py @@ -503,9 +503,9 @@ class IscsiClientMock(object): "rbd": 0, "user:rbd": 4, }, - "supported_rbd_features": { - "rbd": 135, - "user:rbd": 61, + "unsupported_rbd_features": { + "rbd": 88, + "user:rbd": 0, }, "disk_default_controls": { "user:rbd": {