Skip to content

Commit

Permalink
Merge "nocloud: add configurable meta/user data paths"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and openstack-gerrit committed Jun 10, 2024
2 parents 2c2bb5e + e5a97d7 commit 96376a5
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 5 deletions.
1 change: 1 addition & 0 deletions cloudbaseinit/conf/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
'cloudbaseinit.conf.packet.PacketOptions',
'cloudbaseinit.conf.vmwareguestinfo.VMwareGuestInfoConfigOptions',
'cloudbaseinit.conf.gce.GCEOptions',
'cloudbaseinit.conf.nocloud.NoCloudOptions',
)


Expand Down
47 changes: 47 additions & 0 deletions cloudbaseinit/conf/nocloud.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Copyright 2024 Cloudbase Solutions Srl
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

"""Config options available for the OpenStack metadata service."""

from oslo_config import cfg

from cloudbaseinit.conf import base as conf_base


class NoCloudOptions(conf_base.Options):

"""Config options available for the OpenStack metadata service."""

def __init__(self, config):
super(NoCloudOptions, self).__init__(config, group="nocloud")
self._options = [
cfg.StrOpt(
"metadata_file", default="meta-data",
help="The file name where the service looks for"
"metadata"),
cfg.StrOpt(
"userdata_file", default="user-data",
help="The file name where the service looks for"
"userdata"),
]

def register(self):
"""Register the current options to the global ConfigOpts object."""
group = cfg.OptGroup(self.group_name, title='NoCloud Options')
self._config.register_group(group)
self._config.register_opts(self._options, group=group)

def list(self):
"""Return a list which contains all the available options."""
return self._options
4 changes: 3 additions & 1 deletion cloudbaseinit/metadata/services/baseconfigdrive.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@

class BaseConfigDriveService(base.BaseMetadataService):

def __init__(self, drive_label, metadata_file):
def __init__(self, drive_label, metadata_file,
userdata_file='user-data'):
super(BaseConfigDriveService, self).__init__()
self._drive_label = drive_label
self._metadata_file = metadata_file
self._userdata_file = userdata_file
self._metadata_path = None
self._searched_types = set()
self._searched_locations = set()
Expand Down
8 changes: 5 additions & 3 deletions cloudbaseinit/metadata/services/nocloudservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -541,17 +541,19 @@ class NoCloudConfigDriveService(baseconfigdrive.BaseConfigDriveService):

def __init__(self):
super(NoCloudConfigDriveService, self).__init__(
'cidata', 'meta-data')
'cidata', CONF.nocloud.metadata_file,
CONF.nocloud.userdata_file)
self._meta_data = {}

def get_user_data(self):
return self._get_cache_data("user-data")
return self._get_cache_data(self._userdata_file)

def _get_meta_data(self):
if self._meta_data:
return self._meta_data

raw_meta_data = self._get_cache_data("meta-data", decode=True)
raw_meta_data = self._get_cache_data(
self._metadata_file, decode=True)
try:
self._meta_data = (
serialization.parse_json_yaml(raw_meta_data))
Expand Down
9 changes: 8 additions & 1 deletion doc/source/services.rst
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,15 @@ similar to the EC2 metadata in terms of how the metadata files are named and str

The metadata is provided on a config-drive (vfat or iso9660) with the label cidata or CIDATA.

The folder structure for NoCloud is:
The default folder structure for NoCloud is:

* /user-data
* /meta-data

The user-data and meta-data files respect the EC2 metadata service format.

The names of the meta-data and user-data files can be configured.

Capabilities:

* instance id
Expand All @@ -153,6 +155,11 @@ Config options for `config_drive` section:
* types (list: ["vfat", "iso"])
* locations (list: ["cdrom", "hdd", "partition"])

Config options for `nocloud` section:

* metadata_file (string: "meta-data")
* userdata_file (string: "user-data")

Example metadata:

.. code-block:: yaml
Expand Down

0 comments on commit 96376a5

Please sign in to comment.