OpenStack Compute (Nova)
Go to file
Lee Yarwood eae6aa8094 libvirt: Re-initialise volumes, encryptors, and vifs on hard reboot
We call _hard_reboot during reboot, power_on, and
resume_state_on_host_boot. It functions essentially by tearing as much
of an instance as possible before recreating it, which additionally
makes it useful to operators for attempting automated recovery of
instances in an inconsistent state.

The Libvirt driver would previously only call _destroy and
_undefine_domain when hard rebooting an instance. This would leave vifs
plugged, volumes connected, and encryptors attached on the host. It
also means that when we try to restart the instance, we assume all
these things are correctly configured. If they are not, the instance
may fail to start at all, or may be incorrectly configured when
starting.

For example, consider an instance with an encrypted volume after a
compute host reboot. When we attempt to start the instance, power_on
will call _hard_reboot. The volume will be coincidentally re-attached
as a side-effect of calling _get_guest_xml(!), but when we call
_create_domain_and_network we pass reboot=True, which tells it not to
reattach the encryptor, as it is assumed to be already attached. We
are therefore left presenting the encrypted volume data directly to
the instance without decryption.

The approach in this patch is to ensure we recreate the instance as
fully as possible during hard reboot. This means not passing
vifs_already_plugged and reboot to _create_domain_and_network, which
in turn requires that we fully destroy the instance first. This
addresses the specific problem given in the example, but also a whole
class of potential volume and vif related issues of inconsistent
state.

Because we now always tear down volumes, encryptors, and vifs, we are
relying on the tear down of these things to be idempotent.  This
highlighted that detach of the luks and cryptsetup encryptors were not
idempotent. We depend on the fixes for those os-brick drivers.

NOTE(melwitt): In Ocata, we don't go through os-brick to handle detach
of encrypted volumes and instead have our code under
nova/volume/encryptors/. We're already ignoring exit code 4 for "not
found" in cryptsetup.py and this makes luks.py consistent with that.
We need to be able to ignore "already detached" encrypted volumes with
this patch because of the re-initialization during hard reboot.

 Conflicts:
	nova/tests/unit/virt/libvirt/test_driver.py
	nova/virt/libvirt/driver.py

NOTE(melwitt): The conflicts are due to _create_domain_and_network
taking an additional disk_info argument in Ocata and the method for
getting instance disk info was named _get_instance_disk_info instead
of _get_instance_disk_info_from_config in Ocata.

Closes-bug: #1724573
Change-Id: Id188d48609f3d22d14e16c7f6114291d547a8986
(cherry picked from commit 3f8daf0804)
2018-01-09 01:09:59 +00:00
api-guide/source Removes unnecessary utf-8 encoding 2016-12-20 10:27:01 +07:00
api-ref/source fix nova accepting invalid availability zone name with ':' 2017-10-04 18:11:23 -04:00
contrib Merge "changed quantum to neutron in vif-openstack" 2014-03-05 10:45:05 +00:00
devstack Skip test_rebuild_server_in_error_state for cells v1 2017-08-22 18:42:29 +00:00
doc Merge "Fix 'force' parameter in os-quota-sets PUT schema" into stable/ocata 2017-12-14 22:26:54 +00:00
etc/nova Fix doc generation warnings 2017-03-06 18:51:19 +09:00
gate move gate hooks to gate/ 2017-01-04 11:05:16 +00:00
nova libvirt: Re-initialise volumes, encryptors, and vifs on hard reboot 2018-01-09 01:09:59 +00:00
plugins/xenserver XenAPI Remove useless files when use os-xenapi lib 2017-01-10 18:06:17 -08:00
releasenotes Make request_spec.spec MediumText 2017-12-18 19:43:54 +00:00
tools Prepare for using standard python tests 2017-02-09 18:01:02 +00:00
.coveragerc Remove nova/openstack/* from .coveragerc 2016-10-12 16:20:49 -04:00
.gitignore doc: Integrate oslo_policy.sphinxpolicygen 2016-10-20 10:31:01 +01:00
.gitreview Update .gitreview for stable/ocata 2017-02-03 19:10:42 +00:00
.mailmap Add mailmap entry 2014-05-07 12:14:26 -07:00
.testr.conf [placement] Adjust the name of the gabbi tests 2016-09-20 19:14:44 +00:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:37 +00:00
HACKING.rst hacking: Use uuidutils or uuidsentinel to generate UUID 2016-11-29 11:49:24 +05:30
LICENSE initial commit 2010-05-27 23:05:26 -07:00
MAINTAINERS Add a maintainers file 2015-05-23 03:22:07 +10:00
README.rst Show team and repo badges on README 2016-11-25 13:55:29 +01:00
babel.cfg Get rid of distutils.extra. 2012-02-08 19:30:39 -08:00
bindep.txt Update bindep.txt for doc builds 2017-11-21 20:09:30 +00:00
requirements.txt Updated from global requirements 2017-08-09 01:01:23 +00:00
run_tests.sh Add description on how to run ./run_test.sh -8 2016-01-11 13:17:04 +00:00
setup.cfg Fix doc generation warnings 2017-03-06 18:51:19 +09:00
setup.py Updated from global requirements 2015-09-17 16:41:48 +00:00
test-requirements.txt Updated from global requirements 2017-01-26 18:48:41 +00:00
tests-functional-py3.txt Remove invalid URL in gabbi tests 2017-01-17 21:10:45 +00:00
tests-py3.txt Enable virt.vmwareapi test cases on Python 2017-01-18 11:14:24 +08:00
tox.ini Update UPPER_CONSTRAINTS_FILE for stable/ocata 2017-02-03 19:10:44 +00:00

README.rst

Team and repository tags

image

OpenStack Nova

OpenStack Nova provides a cloud computing fabric controller, supporting a wide variety of compute technologies, including: libvirt (KVM, Xen, LXC and more), Hyper-V, VMware, XenServer and OpenStack Ironic.

OpenStack Nova is distributed under the terms of the Apache License, Version 2.0. The full terms and conditions of this license are detailed in the LICENSE file.

API

To learn how to use Nova's API, consult the documentation available online at:

http://developer.openstack.org/api-guide/compute/ http://developer.openstack.org/api-ref/compute/

For more information on OpenStack APIs, SDKs and CLIs, please see:

http://www.openstack.org/appdev/ http://developer.openstack.org/

Operators

To learn how to deploy and configure OpenStack Nova, consult the documentation available online at:

http://docs.openstack.org

For information about the different compute (hypervisor) drivers supported by Nova, please read:

http://docs.openstack.org/developer/nova/feature_classification.html

In the unfortunate event that bugs are discovered, they should be reported to the appropriate bug tracker. If you obtained the software from a 3rd party operating system vendor, it is often wise to use their own bug tracker for reporting problems. In all other cases use the master OpenStack bug tracker, available at:

http://bugs.launchpad.net/nova

Developers

For information on how to contribute to Nova, please see the contents of the CONTRIBUTING.rst.

Any new code must follow the development guidelines detailed in the HACKING.rst file, and pass all unit tests.

Further developer focused documentation is available at:

http://docs.openstack.org/developer/nova/