summaryrefslogtreecommitdiff
path: root/cloudinit/config
diff options
context:
space:
mode:
authorsshedi <53473811+sshedi@users.noreply.github.com>2021-06-18 22:23:44 +0530
committerGitHub <noreply@github.com>2021-06-18 11:53:44 -0500
commit35aa9db6f8e2ba05d366776c0e8d97f52217e930 (patch)
treee3c14005ed078aea1cc0425ec8bea3db9f16602e /cloudinit/config
parentf5a244960c3f1591d022c081d816bc9604512629 (diff)
downloadvyos-cloud-init-35aa9db6f8e2ba05d366776c0e8d97f52217e930.tar.gz
vyos-cloud-init-35aa9db6f8e2ba05d366776c0e8d97f52217e930.zip
Add support for VMware PhotonOS (#909)
Also added a new (currently experimental) systemd-networkd renderer, and includes a small refactor to cc_resolv_conf.py to support the resolved.conf used by systemd-resolved.
Diffstat (limited to 'cloudinit/config')
-rw-r--r--cloudinit/config/cc_ntp.py26
-rw-r--r--cloudinit/config/cc_resolv_conf.py25
-rw-r--r--cloudinit/config/cc_yum_add_repo.py4
-rw-r--r--cloudinit/config/tests/test_resolv_conf.py28
4 files changed, 56 insertions, 27 deletions
diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py
index 70c24610..acf3251d 100644
--- a/cloudinit/config/cc_ntp.py
+++ b/cloudinit/config/cc_ntp.py
@@ -25,7 +25,7 @@ frequency = PER_INSTANCE
NTP_CONF = '/etc/ntp.conf'
NR_POOL_SERVERS = 4
distros = ['almalinux', 'alpine', 'centos', 'debian', 'fedora', 'opensuse',
- 'rhel', 'rocky', 'sles', 'ubuntu']
+ 'photon', 'rhel', 'rocky', 'sles', 'ubuntu']
NTP_CLIENT_CONFIG = {
'chrony': {
@@ -80,24 +80,37 @@ DISTRO_CLIENT_CONFIG = {
'confpath': '/etc/chrony/chrony.conf',
},
},
- 'rhel': {
+ 'opensuse': {
+ 'chrony': {
+ 'service_name': 'chronyd',
+ },
'ntp': {
+ 'confpath': '/etc/ntp.conf',
'service_name': 'ntpd',
},
- 'chrony': {
- 'service_name': 'chronyd',
+ 'systemd-timesyncd': {
+ 'check_exe': '/usr/lib/systemd/systemd-timesyncd',
},
},
- 'opensuse': {
+ 'photon': {
'chrony': {
'service_name': 'chronyd',
},
'ntp': {
- 'confpath': '/etc/ntp.conf',
'service_name': 'ntpd',
+ 'confpath': '/etc/ntp.conf'
},
'systemd-timesyncd': {
'check_exe': '/usr/lib/systemd/systemd-timesyncd',
+ 'confpath': '/etc/systemd/timesyncd.conf',
+ },
+ },
+ 'rhel': {
+ 'ntp': {
+ 'service_name': 'ntpd',
+ },
+ 'chrony': {
+ 'service_name': 'chronyd',
},
},
'sles': {
@@ -551,7 +564,6 @@ def handle(name, cfg, cloud, log, _args):
# Select which client is going to be used and get the configuration
ntp_client_config = select_ntp_client(ntp_cfg.get('ntp_client'),
cloud.distro)
-
# Allow user ntp config to override distro configurations
ntp_client_config = util.mergemanydict(
[ntp_client_config, ntp_cfg.get('config', {})], reverse=True)
diff --git a/cloudinit/config/cc_resolv_conf.py b/cloudinit/config/cc_resolv_conf.py
index 466dad03..c51967e2 100644
--- a/cloudinit/config/cc_resolv_conf.py
+++ b/cloudinit/config/cc_resolv_conf.py
@@ -30,7 +30,7 @@ are configured correctly.
**Module frequency:** per instance
-**Supported distros:** alpine, fedora, rhel, sles
+**Supported distros:** alpine, fedora, photon, rhel, sles
**Config keys**::
@@ -47,18 +47,23 @@ are configured correctly.
"""
from cloudinit import log as logging
-from cloudinit.settings import PER_INSTANCE
from cloudinit import templater
+from cloudinit.settings import PER_INSTANCE
from cloudinit import util
LOG = logging.getLogger(__name__)
frequency = PER_INSTANCE
-distros = ['alpine', 'fedora', 'opensuse', 'rhel', 'sles']
+distros = ['alpine', 'fedora', 'opensuse', 'photon', 'rhel', 'sles']
+
+RESOLVE_CONFIG_TEMPLATE_MAP = {
+ '/etc/resolv.conf': 'resolv.conf',
+ '/etc/systemd/resolved.conf': 'systemd.resolved.conf',
+}
-def generate_resolv_conf(template_fn, params, target_fname="/etc/resolv.conf"):
+def generate_resolv_conf(template_fn, params, target_fname):
flags = []
false_flags = []
@@ -104,12 +109,18 @@ def handle(name, cfg, cloud, log, _args):
if "resolv_conf" not in cfg:
log.warning("manage_resolv_conf True but no parameters provided!")
- template_fn = cloud.get_template_filename('resolv.conf')
- if not template_fn:
+ try:
+ template_fn = cloud.get_template_filename(
+ RESOLVE_CONFIG_TEMPLATE_MAP[cloud.distro.resolv_conf_fn])
+ except KeyError:
log.warning("No template found, not rendering /etc/resolv.conf")
return
- generate_resolv_conf(template_fn=template_fn, params=cfg["resolv_conf"])
+ generate_resolv_conf(
+ template_fn=template_fn,
+ params=cfg["resolv_conf"],
+ target_fname=cloud.disro.resolve_conf_fn
+ )
return
# vi: ts=4 expandtab
diff --git a/cloudinit/config/cc_yum_add_repo.py b/cloudinit/config/cc_yum_add_repo.py
index 7daa6bd9..67f09686 100644
--- a/cloudinit/config/cc_yum_add_repo.py
+++ b/cloudinit/config/cc_yum_add_repo.py
@@ -18,7 +18,7 @@ entry, the config entry will be skipped.
**Module frequency:** per always
-**Supported distros:** almalinux, centos, fedora, rhel, rocky
+**Supported distros:** almalinux, centos, fedora, photon, rhel, rocky
**Config keys**::
@@ -36,7 +36,7 @@ from configparser import ConfigParser
from cloudinit import util
-distros = ['almalinux', 'centos', 'fedora', 'rhel', 'rocky']
+distros = ['almalinux', 'centos', 'fedora', 'photon', 'rhel', 'rocky']
def _canonicalize_id(repo_id):
diff --git a/cloudinit/config/tests/test_resolv_conf.py b/cloudinit/config/tests/test_resolv_conf.py
index 6546a0b5..45a06c22 100644
--- a/cloudinit/config/tests/test_resolv_conf.py
+++ b/cloudinit/config/tests/test_resolv_conf.py
@@ -1,9 +1,8 @@
-from unittest import mock
-
import pytest
+from unittest import mock
from cloudinit.config.cc_resolv_conf import generate_resolv_conf
-
+from tests.unittests.test_distros.test_create_users import MyBaseDistro
EXPECTED_HEADER = """\
# Your system has been configured with 'manage-resolv-conf' set to true.
@@ -14,22 +13,28 @@ EXPECTED_HEADER = """\
class TestGenerateResolvConf:
+
+ dist = MyBaseDistro()
+ tmpl_fn = "templates/resolv.conf.tmpl"
+
@mock.patch("cloudinit.config.cc_resolv_conf.templater.render_to_file")
- def test_default_target_fname_is_etc_resolvconf(self, m_render_to_file):
- generate_resolv_conf("templates/resolv.conf.tmpl", mock.MagicMock())
+ def test_dist_resolv_conf_fn(self, m_render_to_file):
+ self.dist.resolve_conf_fn = "/tmp/resolv-test.conf"
+ generate_resolv_conf(self.tmpl_fn,
+ mock.MagicMock(),
+ self.dist.resolve_conf_fn)
assert [
- mock.call(mock.ANY, "/etc/resolv.conf", mock.ANY)
+ mock.call(mock.ANY, self.dist.resolve_conf_fn, mock.ANY)
] == m_render_to_file.call_args_list
@mock.patch("cloudinit.config.cc_resolv_conf.templater.render_to_file")
def test_target_fname_is_used_if_passed(self, m_render_to_file):
- generate_resolv_conf(
- "templates/resolv.conf.tmpl", mock.MagicMock(), "/use/this/path"
- )
+ path = "/use/this/path"
+ generate_resolv_conf(self.tmpl_fn, mock.MagicMock(), path)
assert [
- mock.call(mock.ANY, "/use/this/path", mock.ANY)
+ mock.call(mock.ANY, path, mock.ANY)
] == m_render_to_file.call_args_list
# Patch in templater so we can assert on the actual generated content
@@ -75,7 +80,8 @@ class TestGenerateResolvConf:
def test_flags_and_options(
self, m_write_file, params, expected_extra_line
):
- generate_resolv_conf("templates/resolv.conf.tmpl", params)
+ target_fn = "/etc/resolv.conf"
+ generate_resolv_conf(self.tmpl_fn, params, target_fn)
expected_content = EXPECTED_HEADER
if expected_extra_line is not None: