Update drivers to new base class structure

https://blueprints.launchpad.net/cinder/+spec/abc-driver-update

The new abc structure was introduced by bp/abc-volume-drivers [1]. All drivers needs to get updated in order to benefit from the new structure.

Problem description

Instead of raising NotImplementedErrors during runtime this features allows to discovers the drivers feature set during startup and makes it discoverable for CI/code check systems.

Use Cases

The support matrix (see [2] for a draft implementation) can be extracted to see the graduation process of new functionality moving to a common function implemented by all drivers.

Proposed change

All cinder volume drivers needs to get updated with the following approach:

class FooDriver(driver.RetypeVD, driver.TransferVD, driver.ExtendVD,
                driver.CloneableVD, driver.CloneableImageVD,
                driver.SnapshotVD, driver.BaseVD)

A drivers must inherit from BaseVD and implement the basic functions. In order to mark that a driver does implement further feature sets it must inherit from the corresponding class.

If all drivers implement a certain feature set the functions will be moved to BasicVD at the end.

Alternatives

No porting at all, which would make the [1] pointless.

Data model impact

None.

REST API impact

None.

Security impact

None.

Notifications impact

None.

Other end user impact

None.

Performance Impact

See [1]

Other deployer impact

None.

Developer impact

This change will change all implemented drivers slightly. The functionality itself shouldn’t be changed at all but all driver need to be adopted to the new class model.

Implementation

Assignee(s)

Primary assignee:

Marc Koderer (m-koderer)

Other contributors:

All driver maintainers

Work Items

Etherpad if necessary.

Dependencies

None.

Testing

Individual driver unit tests needs to get adapted.

Documentation Impact

None.

References

[1]: https://review.openstack.org/#/c/114168/ [2]: https://review.openstack.org/#/c/160346/