cinder-specs/specs/mitaka/use-cinder-without-nova.rst
Ivan Kolodyazhny 79b63bf363 Attach/detach volumes without Nova
Related blueprint: use-cinder-without-nova

Change-Id: Ifbf1ee3883e81713f665daf8ed8e6ca587206b81
2015-12-10 17:23:24 +02:00

236 lines
5.6 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==================================
Attach/detach volumes without Nova
==================================
https://blueprints.launchpad.net/cinder/+spec/use-cinder-without-nova
Services like Ironic want to use Cinder w/o Nova. Also it would be useful
to attach Cinder volumes not only for Nova/Ironic instances: e.g. make
simple CLI to attach volume to some host (VM, workstation, etc) outside
OpenStack cloud.
Problem description
===================
Currently there is not a tool which could automate all the attach/detach
process without using Nova.
Use Cases
=========
* Attach volume to Ironic instance
* Attach volume to any virtual/baremetal host which is not provisioned by Nova
or Ironic
* Attach volume to Magnum container
* Attach volume to Docker container
Proposed change
===============
Provide a command-line (CLI) tool and Python API which could interact with
Cinder and attach volumes to the local host. It will be implemented as
python-cinderclient extension and won't require to add any dependency if
extension is not used. This extension won't be installed by default. Users
will be able to install it using PIP or OS package management tool::
pip install python-brick-cinderclient-ext
CLI interface e.g.::
cinder local-attach <volume_id>
cinder local-detach [--attachment-id attachment-id] <volume_id>
cinder get-connector
In case of Ironic when we don't want to install any package into the user's
instances. Users could install package themselves via `pip` or OS package
managers (apt, yum, etc.).
After this command cinder client will call Cinder API to change volume
status to 'in-use' because we don't know when user will attach volume to the
host.
Volume attachment::
cinder local-attach [--mountpoint /mnt/disk]
[--multipath True]
[--enforce-multipath True]
[--mode rw]
<volume_id>
Volume detachment::
cinder local-detach [--attachment-id id]
[--multipath True]
[--enforce-multipath True]
[--device-info device-info]
<volume_id>
'attachment_uuid' is required option only for multi-attachment scenario.
Detach procedure should contain the following steps:
* disconnect_volume
* terminate_connection with a 'force' flag
* detach
Force detach feature is out of scope of this spec and will be described in a
separate spec.
Get connector details:
cinder get-connector
Since mount/unmount is admin only operation we need to run python-cinderclient
as root to not add oslo.rootwrap dependency.
Alternatives
------------
1. Cinder already has all needed APIs. Any API consumer could use existing
methods to implement attach/detach actions without Nova.
2. We can implement needed API inside new python-brickclient.
3. We can introduce new binary (e.g.: brick) inside python-cinderclient
project.
In such case we'll have two different clients inside single repository.
From the packager's point of view it will increase numbers of possible
python-cinderclient packages. E.g.: python-cinderclient-iscsci,
python-cinderclient-rbd, etc.
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
TBD
Notifications impact
--------------------
None
Other end user impact
---------------------
This change will provide new CLI options and Python for python-cinderclient.
Performance Impact
------------------
None
Other deployer impact
---------------------
* Deployers could install new package to have new functionality
Developer impact
----------------
* All drivers should implement initialize_connection which could be invoked
several times without any side-effect. We've filed bugs for some of the
drivers.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
Ivan Kolodyazhny <e0ne>
Work Items
----------
* Implement proof-of-concept based on a python-cinderclient
* Get feedback and complete the spec
* Fix typos in the spec
* Make changes to Cinder API if needed
* Unit-tests and Tempest tests are required
* Functional tests on python-cinderclient gates will be implemented
* New repository for python-brick-cinderclient-ext is needed
Dependencies
============
* os-brick
* python-cinderclient
* Linux: open-iscsi, ceph-common, nfs-common or other tool to attach and detach
volumes via drivers' protocols
Windows: tools for Windows to be able to attach and detach volume via
drivers' protocols.
Testing
=======
* Unit-tests should be implemented
* New python-cinderclient API will be tested via functional tests on gates
to test attach/detach features without Nova instances.
* Functional tests for Ironic will be implemented to test attach/detach
features to Ironic instances.
Documentation Impact
====================
User manual will be updated to contain information about python-cinderclient
extension.
References
==========
* https://review.openstack.org/254878 and related patches
* http://lists.openstack.org/pipermail/openstack-dev/2015-July/068763.html
* https://etherpad.openstack.org/p/liberty-cinder-ironic-integration
* https://blueprints.launchpad.net/ironic/+spec/volume-connection-information
* python-brickclient Proof-of-Concept implementation: https://github.com/e0ne/python-brickclient
* Cinder Meeting Minutes: http://goo.gl/ztuYTa
* http://eavesdrop.openstack.org/meetings/cinder/2015/cinder.2015-11-11-16.00.log.html