nova-specs/specs/juno/implemented/libvirt-driver-domain-metad...

159 lines
4.1 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==============================
Libvirt driver domain metadata
==============================
https://blueprints.launchpad.net/nova/+spec/libvirt-driver-domain-metadata
Metadata will be recorded in the libvirt domain XML configuration to provide
information about the Nova instance that the domain corresponds to. The aim
is to provide information that can be useful to administrators troubleshooting
compute hosts.
Problem description
===================
When troubleshooting a compute node there will be a number of running libvirt
domains which correspond to Nova instances. There may also be other running
domains which were not launched by Nova, for example, utility guests run by
libguestfs for file injection. The libvirt domain uuid will match that of the
Nova instance, but there is more information about a Nova instance that could
usefully be provided to administrators. For example, the identity of the
tenant who launched it, the original flavor name and/or settings, the time at
which the domain was launched, and the version number of the Nova instance that
launched it (can be relevant if Nova is upgraded while a VM is running).
Proposed change
===============
The Libvirt domain XML configuration schema allows for applications to insert
arbitrary metadata under a private XML namespace. The proposal is to make use
of this to define some metadata that is relevant to Nova, specifically it will
record
- The nova package version
- The display name of the instance (as matching 'nova list')
- The name of the flavor
- The creation time of the instance
- The user and project ID/name of owner
- The root disk glance image or cinder volume UUID
This would correspond to the following XML blob
::
<domain type='kvm'>
...rest of domain XML config...
<metadata>
<nova:instance xmlns:nova="http://openstack.org/nova/instance/1">
<nova:package version="2014.2.3"/>
<nova:flavor name="m1.small">
<nova:memory>512</nova:memory>
<nova:disk>10</nova:disk>
....
</nova:flavor>
<nova:name>demo1vm</nova:name>
<nova:creationTime>2014-12-25 12:03:20</nova:creationTime>
<nova:owner>
<nova:user uuid="85bd45c0...213684">joe</nova:user>
<nova:project uuid="d33b8c0e...342d69">acmecorp</nova:project>
</nova:owner>
<nova:root type="image|volume" uuid="69f2991b...f29a8bc"/>
</nova:instance>
</metadata>
</domain>
Alternatives
------------
Administrators can ask libvirt for the UUID of the running instance and then
attempt to trace all the information back via Nova APIs. If Nova itself is in
some failure scenario though, this would not be possible. It also places more
burden on the administrator to trace the info which could be provided directly
in the Libvirt XML.
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
None
Other deployer impact
---------------------
The compute host administrator will be able to ask libvirt to provide the XML
config for the running instance and from there find out various useful pieces
of metadata about the instance.
Developer impact
----------------
None, this is entirely within the libvirt driver impl
Implementation
==============
Assignee(s)
-----------
Primary assignee:
berrange
Work Items
----------
* Extend the nova/virt/libvirt/config.py object model to represent the
proposed metadata schema for Nova
* Extend the nova/virt/libvirt/driver.py get_guest_config() method to fill
in the metadata when generating guest XML config
Dependencies
============
None
Testing
=======
None required beyond unit tests
Documentation Impact
====================
Document that the libvirt XML config contains this metadata as an aid
for administrators debugging compute nodes.
References
==========
* Libvirt XML format docs http://libvirt.org/formatdomain.html#elementsMetadata