4.6 KiB
Allow vendors to provide cloud-config via DynamicJSON vendor data
https://blueprints.launchpad.net/nova/+spec/dynamicjson-vendordata-cloud-config
Problem description
Current implementation of DynamicJSON wraps all responses to service-name specific objects. This feature is [supported by cloud-init](https://cloudinit.readthedocs.io/en/latest/reference/datasources/openstack.html#vendor-data) but not possible to use with current DynamicJSON vendor data implementation. Have to be implemented for open source project to allow vendors store cloud-config in Consul Key-Value in easy way https://github.com/ib-systems/openstack-consul-dynamic-vendordata
There is old abandoned issue: [1](https://bugs.launchpad.net/cloud-init/+bug/1841104)
Use Cases
Providing cloud-config via vendor data could be used to update packages or to install/upgrade and not to use user-data for this to let user customize generic instances with his own settings. While developing https://github.com/ib-systems/openstack-consul-dynamic-vendordata observed that current implementation doesn't allow to provide cloud-config via vendor data.
Proposed change
I propose to let vendors define cloud-init specific vendor data
source like
` vendordata_dynamic_targets = 'cloud-init@http://10.10.10.10:8000/ocdv'
`
to provide cloud-init as expected format to cloud-init. Following this
way vendor need to return single-lined #cloud-config to get it work.
Additional check at DynamicJSON provider is required [here](https://opendev.org/openstack/nova/src/branch/master/nova/api/metadata/vendordata_dynamic.py#L95)
` if service_name == "cloud-init": return res.text if res and res.text: # TODO(mikal): Use the Cache-Control response header to do some # sensible form of caching here. return jsonutils.loads(res.text)
`
Alternatives
None
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
This have to be explicitly configured by cloud operator for example
` vendordata_dynamic_targets = 'cloud-init@http://10.10.10.10:8000/ocdv'
`
Developer impact
None
Upgrade impact
None
Implementation
Assignee(s)
- Primary assignee:
- Other contributors:
-
None
Feature Liaison
Liaison Needed
Work Items
- Create patch that handle cloud-init service name and bypass json parse stage;
- Look on members review to add fixes if needed;
- Merge to other releases;
Dependencies
This feature doesn't require new library or any dependencies.
https://github.com/ib-systems/openstack-consul-dynamic-vendordata depends on dynamic vendor data implementation. This is open source project that allow vendors to provide cloud-config via vendor-data using Consul Key-Value feature. This is very useful in case operator working with a lot of geographically distributed clouds along with a distributed Consul cluster used by cloud management tools for example billing software.
Testing
Since this change could be "2 lines" hardcoded no tests needed, but i'm ready to create one if needed.
Documentation Impact
https://docs.openstack.org/nova/latest/admin/vendordata.html
We could add paragraph that in case operator would like to provide cloud-config over dynamic vendor data he need to configure specific service like "cloud-init@controller:8000/ocdv"
References
- - [https://bugs.launchpad.net/cloud-init/+bug/1841104](Old issue that been
-
abandoned)
[https://github.com/ib-systems/openstack-consul-dynamic-vendordata](OpenStack Consul dynamic vendor data) project to let operator manage vendor-data using Consul Key-Value feature.
History
Optional section intended to be used each time the spec is updated to describe new design, API or any database schema updated. Useful to let reader understand what's happened along the time.
Release Name | Description |
---|---|
2024.2 Dalmatian | Introduced |