diff options
author | Chad Smith <chad.smith@canonical.com> | 2022-12-15 13:03:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-15 13:03:36 -0700 |
commit | 040090a31f483014ec78cd353bb55bfae121bebd (patch) | |
tree | b3d63e3fd99f558ac8508f0bc08f8f170e5ef191 /cloudinit/util.py | |
parent | 3a2232084f53fdae901e2bf34726466b8809be5a (diff) | |
download | cloud-init-git-040090a31f483014ec78cd353bb55bfae121bebd.tar.gz |
nocloud: add support for dmi variable expansion for seedfrom URL
NoCloud meta-data seedfrom (or kernel commandline seedfrom) URL can
now provide variable expansion for system-specific DMI values as seen
in /sys/class/dmi/id on Linux or kenv on FreeBSD platforms.
Variable names of the format __dmi.SOME_VAR__ will be replaced when
determining the URL from which NoCloud datasource GETs its user-data
and meta-data.
This allows for a common templated seedfrom URL which can be reused
for mass deployments, but can allow for unique URLs based on classes
of DMI system characteristics such as chassis serial, product name,
UUID etc.
LP: #1994980
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r-- | cloudinit/util.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py index 96cd1b74..2ba0e077 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -38,7 +38,7 @@ from functools import lru_cache, total_ordering from typing import Callable, Deque, Dict, List, TypeVar from urllib import parse -from cloudinit import importer +from cloudinit import features, importer from cloudinit import log as logging from cloudinit import ( mergers, @@ -976,14 +976,17 @@ def load_yaml(blob, default=None, allowed=(dict,)): def read_seeded(base="", ext="", timeout=5, retries=10, file_retries=0): if base.find("%s") >= 0: - ud_url = base % ("user-data" + ext) - vd_url = base % ("vendor-data" + ext) - md_url = base % ("meta-data" + ext) + ud_url = base.replace("%s", "user-data" + ext) + vd_url = base.replace("%s", "vendor-data" + ext) + md_url = base.replace("%s", "meta-data" + ext) else: + if features.NOCLOUD_SEED_URL_APPEND_FORWARD_SLASH: + if base[-1] != "/" and parse.urlparse(base).query == "": + # Append fwd slash when no query string and no %s + base += "/" ud_url = "%s%s%s" % (base, "user-data", ext) vd_url = "%s%s%s" % (base, "vendor-data", ext) md_url = "%s%s%s" % (base, "meta-data", ext) - md_resp = url_helper.read_file_or_url( md_url, timeout=timeout, retries=retries ) |