[openstack-dev] Documenting config drive - what do you want to see?

Mathieu Gagné mgagne at calavera.ca
Wed May 24 15:05:17 UTC 2017

On Wed, May 24, 2017 at 10:39 AM, Matt Riedemann <mriedemos at gmail.com>
> Rocky tipped me off to a request to document config drive which came up
at the Boston Forum, and I tracked that down to Clark's wishlist etherpad
[1] (L195) which states:
> "Document the config drive. The only way I have been able to figure out
how to make a config drive is by either reading nova's source code or by
reading cloud-init's source code."
> So naturally I have some questions, and I'm looking to flesh the idea /
request out a bit so we can start something in the in-tree nova devref.
> Question the first: is this existing document [2] helpful? At a high
level, that's more about 'how' rather than 'what', as in what's in the
config drive.

Thanks, I didn't know about that page. I usually read sources or boot an
instance and check by myself.

> Question the second: are people mostly looking for documentation on the
content of the config drive? I assume so, because without reading the
source code you wouldn't know, which is the terrible part.

I usually boot an instance and inspect the config drive. Usually it's for
network_data.json since (in our case) we support various network models
(flat, nic teaming, tagged vlan, etc.) and need a concrete example of each.

> Based on this, I can think of a few things we can do:
> 1. Start documenting the versions which come out of the metadata API
service, which regardless of whether or not you're using it, is used to
build the config drive. I'm thinking we could start with something like the
in-tree REST API version history [3]. This would basically be a change log
of each version, e.g. in 2016-06-30 you got device tags, in 2017-02-22 you
got vlan tags, etc.


I'm not sure about the format as there is a lot of cases to cover.

* There a multiple supported config drive versions (2012-08-10, ...,
2017-02-22) so we need to document them all.
* How do we plan on making it easy for someone to understand which fields
will be available in each versions?
* If a field is removed, how will it be expressed in the documentation?
* Could a field change type in the future? (object vs list of objects for
* The idea of a documentation similar to the REST API version history is
good. I however wouldn't have the patience to mentally "compute" the
resulting config drive. So I think we need both (history + schema/examples).
* We should document the purpose of each field and how a user can populate
or use that field. For example, I have no idea what's the purpose of the
"launch_index" field but I suspect it's related to the --max-count
parameter with nova boot command.

> 2. Start documenting the contents similar to the response tables in the
compute API reference [4]. For example, network_data.json has an example
response in this spec [5]. So have an example response and a table with an
explanation of fields in the response, so describe ethernet_mac_address and
vif_id, their type, whether or not they are optional or required, and in
which version they were added to the response, similar to how we document
microversions in the compute REST API reference.


> [1] https://etherpad.openstack.org/p/openstack-user-api-improvements
> [2] https://docs.openstack.org/user-guide/cli-config-drive.html
> [3]
> [4] https://developer.openstack.org/api-ref/compute/
> [5]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20170524/dc2188e4/attachment.html>

More information about the OpenStack-dev mailing list