From 786b30043384c08ef8cf1a0fdd11f973c6e5955d Mon Sep 17 00:00:00 2001 From: Sergey Cherevko Date: Wed, 18 Dec 2024 13:03:05 +0300 Subject: [PATCH] Add MSVSphere support --- cloudinit/config/cc_ca_certs.py | 8 ++++ cloudinit/config/cc_ntp.py | 8 ++++ cloudinit/config/cc_yum_add_repo.py | 1 + cloudinit/distros/__init__.py | 1 + cloudinit/distros/msvsphere.py | 7 +++ cloudinit/net/sysconfig.py | 1 + cloudinit/sources/DataSourceRbxCloud.py | 2 +- cloudinit/util.py | 1 + config/cloud.cfg.tmpl | 2 +- doc/rtd/reference/availability.rst | 2 +- doc/rtd/reference/network-config.rst | 4 +- packages/pkg-deps.json | 14 ++++++ systemd/cloud-final.service.tmpl | 2 +- systemd/cloud-init-generator.tmpl | 2 +- systemd/cloud-init-local.service.tmpl | 10 ++-- systemd/cloud-init.service.tmpl | 4 +- templates/chrony.conf.msvsphere.tmpl | 54 +++++++++++++++++++++ templates/ntp.conf.msvsphere.tmpl | 64 +++++++++++++++++++++++++ tests/unittests/test_cli.py | 2 +- tests/unittests/test_net.py | 1 + tests/unittests/test_render_template.py | 1 + tests/unittests/test_util.py | 40 ++++++++++++++++ tools/read-dependencies | 5 +- tools/render-template | 1 + tools/run-container | 4 +- 25 files changed, 223 insertions(+), 18 deletions(-) create mode 100644 cloudinit/distros/msvsphere.py create mode 100644 templates/chrony.conf.msvsphere.tmpl create mode 100644 templates/ntp.conf.msvsphere.tmpl diff --git a/cloudinit/config/cc_ca_certs.py b/cloudinit/config/cc_ca_certs.py index 3f6b8fb..9b69e29 100644 --- a/cloudinit/config/cc_ca_certs.py +++ b/cloudinit/config/cc_ca_certs.py @@ -38,6 +38,13 @@ DISTRO_OVERRIDES = { "ca_cert_config": None, "ca_cert_update_cmd": ["update-ca-trust"], }, + "msvsphere": { + "ca_cert_path": "/usr/share/pki/ca-trust-source/", + "ca_cert_filename": "anchors/cloud-init-ca-certs.crt", + "ca_cert_config": None, + "ca_cert_system_path": "/etc/pki/ca-trust/", + "ca_cert_update_cmd": ["update-ca-trust"], + }, "opensuse": { "ca_cert_path": "/etc/pki/trust/", "ca_cert_local_path": "/usr/share/pki/trust/", @@ -82,6 +89,7 @@ distros = [ "alpine", "debian", "fedora", + "msvsphere", "rhel", "opensuse", "opensuse-microos", diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py index 1f636d0..71cf3f1 100644 --- a/cloudinit/config/cc_ntp.py +++ b/cloudinit/config/cc_ntp.py @@ -172,6 +172,14 @@ DISTRO_CLIENT_CONFIG = { "check_exe": "/lib/systemd/systemd-timesyncd", }, }, + "msvsphere": { + "ntp": { + "service_name": "ntpd", + }, + "chrony": { + "service_name": "chronyd", + }, + }, "opensuse": { "chrony": { "service_name": "chronyd", diff --git a/cloudinit/config/cc_yum_add_repo.py b/cloudinit/config/cc_yum_add_repo.py index 1ab5008..cdc3c4d 100644 --- a/cloudinit/config/cc_yum_add_repo.py +++ b/cloudinit/config/cc_yum_add_repo.py @@ -31,6 +31,7 @@ distros = [ "cloudlinux", "eurolinux", "fedora", + "msvsphere", "mariner", "openeuler", "OpenCloudOS", diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 9c4d6b2..3a2dede 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -74,6 +74,7 @@ OSFAMILIES = { "fedora", "mariner", "miraclelinux", + "msvsphere", "openmandriva", "photon", "rhel", diff --git a/cloudinit/distros/msvsphere.py b/cloudinit/distros/msvsphere.py new file mode 100644 index 0000000..6ceaf6d --- /dev/null +++ b/cloudinit/distros/msvsphere.py @@ -0,0 +1,7 @@ +# This file is part of cloud-init. See LICENSE file for license information. + +from cloudinit.distros import rhel + + +class Distro(rhel.Distro): + pass diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py index 622b8fa..11e2e46 100644 --- a/cloudinit/net/sysconfig.py +++ b/cloudinit/net/sysconfig.py @@ -27,6 +27,7 @@ KNOWN_DISTROS = [ "eurolinux", "fedora", "miraclelinux", + "msvsphere", "openeuler", "OpenCloudOS", "openmandriva", diff --git a/cloudinit/sources/DataSourceRbxCloud.py b/cloudinit/sources/DataSourceRbxCloud.py index 6729e84..0286812 100644 --- a/cloudinit/sources/DataSourceRbxCloud.py +++ b/cloudinit/sources/DataSourceRbxCloud.py @@ -60,7 +60,7 @@ def _sub_arp(cmd): def gratuitous_arp(items, distro): source_param = "-S" - if distro.name in ["fedora", "centos", "rhel"]: + if distro.name in ["fedora", "centos", "msvsphere", "rhel"]: source_param = "-s" for item in items: try: diff --git a/cloudinit/util.py b/cloudinit/util.py index c9b7287..451530e 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -658,6 +658,7 @@ def _get_variant(info): "fedora", "mariner", "miraclelinux", + "msvsphere", "openeuler", "opencloudos", "openmandriva", diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl index 0e785db..9f73036 100644 --- a/config/cloud.cfg.tmpl +++ b/config/cloud.cfg.tmpl @@ -3,7 +3,7 @@ # and base configuration. {% set is_bsd = variant in ["dragonfly", "freebsd", "netbsd", "openbsd"] %} {% set is_rhel = variant in ["almalinux", "centos", "cloudlinux", "eurolinux", - "miraclelinux", "rhel", "rocky", "virtuozzo"] %} + "miraclelinux", "msvsphere", "rhel", "rocky", "virtuozzo"] %} {% set gecos = ({"amazon": "EC2 Default User", "centos": "Cloud User", "debian": "Debian", "dragonfly": "DragonFly", "freebsd": "FreeBSD", "mariner": "MarinerOS", diff --git a/doc/rtd/reference/availability.rst b/doc/rtd/reference/availability.rst index f26417d..3aa1cc3 100644 --- a/doc/rtd/reference/availability.rst +++ b/doc/rtd/reference/availability.rst @@ -27,7 +27,7 @@ NetBSD, OpenBSD and DragonFlyBSD: - NetBSD - OpenBSD - Photon OS -- RHEL/CentOS/AlmaLinux/Rocky Linux/EuroLinux +- RHEL/CentOS/AlmaLinux/Rocky Linux/EuroLinux/MSVSphere - SLES/openSUSE - Ubuntu diff --git a/doc/rtd/reference/network-config.rst b/doc/rtd/reference/network-config.rst index d9e67cf..b4a89fa 100644 --- a/doc/rtd/reference/network-config.rst +++ b/doc/rtd/reference/network-config.rst @@ -273,7 +273,7 @@ Example output: .. code-block:: usage: /usr/bin/cloud-init devel net-convert [-h] -p PATH -k {eni,network_data.json,yaml,azure-imds,vmware-imc} -d PATH -D - {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openEuler} + {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,msvsphere,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openEuler} [-m name,mac] [--debug] -O {eni,netplan,networkd,sysconfig,network-manager} options: @@ -284,7 +284,7 @@ Example output: The format of the given network config -d PATH, --directory PATH directory to place output in - -D {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openeuler}, --distro {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openEuler} + -D {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,msvsphere,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openeuler}, --distro {alpine,arch,debian,ubuntu,freebsd,dragonfly,gentoo,cos,netbsd,openbsd,almalinux,amazon,centos,cloudlinux,eurolinux,fedora,mariner,miraclelinux,openmandriva,photon,rhel,rocky,virtuozzo,opensuse,sles,openEuler} -m name,mac, --mac name,mac interface name to mac mapping --debug enable debug logging to stderr. diff --git a/packages/pkg-deps.json b/packages/pkg-deps.json index 4ee0982..df7596c 100644 --- a/packages/pkg-deps.json +++ b/packages/pkg-deps.json @@ -41,6 +41,20 @@ "sudo" ] }, + "msvsphere" : { + "build-requires" : [ + "python3-devel" + ], + "requires" : [ + "e2fsprogs", + "iproute", + "net-tools", + "procps", + "rsyslog", + "shadow-utils", + "sudo" + ] + }, "redhat" : { "build-requires" : [ "python3-devel" diff --git a/systemd/cloud-final.service.tmpl b/systemd/cloud-final.service.tmpl index ab3daed..7bf773a 100644 --- a/systemd/cloud-final.service.tmpl +++ b/systemd/cloud-final.service.tmpl @@ -18,7 +18,7 @@ ExecStart=/usr/bin/cloud-init modules --mode=final RemainAfterExit=yes TimeoutSec=0 KillMode=process -{% if variant == "rhel" %} +{% if variant == ["msvsphere", "rhel"] %} # Restart NetworkManager if it is present and running. ExecStartPost=/bin/sh -c 'u=NetworkManager.service; \ out=$(systemctl show --property=SubState $u) || exit; \ diff --git a/systemd/cloud-init-generator.tmpl b/systemd/cloud-init-generator.tmpl index 3c9ca16..7aaecf8 100644 --- a/systemd/cloud-init-generator.tmpl +++ b/systemd/cloud-init-generator.tmpl @@ -21,7 +21,7 @@ CLOUD_SYSTEM_TARGET="/usr/lib/systemd/system/cloud-init.target" CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target" {% endif %} {% if variant in ["almalinux", "centos", "cloudlinux", "eurolinux", "fedora", - "miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky", "TencentOS", "virtuozzo"] %} + "miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "msvsphere", "rhel", "rocky", "TencentOS", "virtuozzo"] %} dsidentify="/usr/libexec/cloud-init/ds-identify" {% elif variant == "benchmark" %} dsidentify="/bin/true" diff --git a/systemd/cloud-init-local.service.tmpl b/systemd/cloud-init-local.service.tmpl index 3a1ca7f..07c77c4 100644 --- a/systemd/cloud-init-local.service.tmpl +++ b/systemd/cloud-init-local.service.tmpl @@ -1,23 +1,23 @@ ## template:jinja [Unit] Description=Initial cloud-init job (pre-networking) -{% if variant in ["ubuntu", "unknown", "debian", "rhel" ] %} +{% if variant in ["ubuntu", "unknown", "debian", "msvsphere", "rhel" ] %} DefaultDependencies=no {% endif %} Wants=network-pre.target After=hv_kvp_daemon.service After=systemd-remount-fs.service -{% if variant == "rhel" %} +{% if variant == ["msvsphere", "rhel"] %} Requires=dbus.socket After=dbus.socket {% endif %} Before=NetworkManager.service -{% if variant == "rhel" %} +{% if variant == ["msvsphere", "rhel"] %} Before=network.service {% endif %} Before=network-pre.target Before=shutdown.target -{% if variant == "rhel" %} +{% if variant == ["msvsphere", "rhel"] %} Before=firewalld.target Conflicts=shutdown.target {% endif %} @@ -32,7 +32,7 @@ ConditionEnvironment=!KERNEL_CMDLINE=cloud-init=disabled [Service] Type=oneshot -{% if variant == "rhel" %} +{% if variant == ["msvsphere", "rhel"] %} ExecStartPre=/bin/mkdir -p /run/cloud-init ExecStartPre=/sbin/restorecon /run/cloud-init ExecStartPre=/usr/bin/touch /run/cloud-init/enabled diff --git a/systemd/cloud-init.service.tmpl b/systemd/cloud-init.service.tmpl index bf91164..bed3338 100644 --- a/systemd/cloud-init.service.tmpl +++ b/systemd/cloud-init.service.tmpl @@ -1,7 +1,7 @@ ## template:jinja [Unit] Description=Initial cloud-init job (metadata service crawler) -{% if variant not in ["photon", "rhel"] %} +{% if variant not in ["photon", "rhel", "rhel"] %} DefaultDependencies=no {% endif %} Wants=cloud-init-local.service @@ -13,7 +13,7 @@ After=systemd-networkd-wait-online.service After=networking.service {% endif %} {% if variant in ["almalinux", "centos", "cloudlinux", "eurolinux", "fedora", - "miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky", + "miraclelinux", "msvsphere", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky", "suse", "TencentOS", "virtuozzo"] %} After=network.service diff --git a/templates/chrony.conf.msvsphere.tmpl b/templates/chrony.conf.msvsphere.tmpl new file mode 100644 index 0000000..5cd462a --- /dev/null +++ b/templates/chrony.conf.msvsphere.tmpl @@ -0,0 +1,54 @@ +## template:jinja +# Use public servers from the pool.ntp.org project. +# Please consider joining the pool (http://www.pool.ntp.org/join.html). +{% if pools %}# pools +{% endif %} +{% for pool in pools -%} +pool {{pool}} iburst +{% endfor %} +{%- if servers %}# servers +{% endif %} +{% for server in servers -%} +server {{server}} iburst +{% endfor %} +{% for peer in peers -%} +peer {{peer}} +{% endfor %} +{% for a in allow -%} +allow {{a}} +{% endfor %} + +# Record the rate at which the system clock gains/losses time. +driftfile /var/lib/chrony/drift + +# Allow the system clock to be stepped in the first three updates +# if its offset is larger than 1 second. +makestep 1.0 3 + +# Enable kernel synchronization of the real-time clock (RTC). +rtcsync + +# Enable hardware timestamping on all interfaces that support it. +#hwtimestamp * + +# Increase the minimum number of selectable sources required to adjust +# the system clock. +#minsources 2 + +# Allow NTP client access from local network. +#allow 192.168.0.0/16 + +# Serve time even if not synchronized to a time source. +#local stratum 10 + +# Specify file containing keys for NTP authentication. +#keyfile /etc/chrony.keys + +# Get TAI-UTC offset and leap seconds from the system tz database. +leapsectz right/UTC + +# Specify directory for log files. +logdir /var/log/chrony + +# Select which information is logged. +#log measurements statistics tracking diff --git a/templates/ntp.conf.msvsphere.tmpl b/templates/ntp.conf.msvsphere.tmpl new file mode 100644 index 0000000..9884df5 --- /dev/null +++ b/templates/ntp.conf.msvsphere.tmpl @@ -0,0 +1,64 @@ +## template:jinja + +# For more information about this file, see the man pages +# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). + +driftfile /var/lib/ntp/drift + +# Permit time synchronization with our time source, but do not +# permit the source to query or modify the service on this system. +restrict default kod nomodify notrap nopeer noquery +restrict -6 default kod nomodify notrap nopeer noquery + +# Permit all access over the loopback interface. This could +# be tightened as well, but to do so would effect some of +# the administrative functions. +restrict 127.0.0.1 +restrict -6 ::1 + +# Hosts on local network are less restricted. +#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap + +# Use public servers from the pool.ntp.org project. +# Please consider joining the pool (http://www.pool.ntp.org/join.html). +{% if pools %}# pools +{% endif %} +{% for pool in pools -%} +pool {{pool}} iburst +{% endfor %} +{%- if servers %}# servers +{% endif %} +{% for server in servers -%} +server {{server}} iburst +{% endfor %} +{% for peer in peers -%} +peer {{peer}} +{% endfor %} + +#broadcast 192.168.1.255 autokey # broadcast server +#broadcastclient # broadcast client +#broadcast 224.0.1.1 autokey # multicast server +#multicastclient 224.0.1.1 # multicast client +#manycastserver 239.255.254.254 # manycast server +#manycastclient 239.255.254.254 autokey # manycast client + +# Enable public key cryptography. +#crypto + +includefile /etc/ntp/crypto/pw + +# Key file containing the keys and key identifiers used when operating +# with symmetric key cryptography. +keys /etc/ntp/keys + +# Specify the key identifiers which are trusted. +#trustedkey 4 8 42 + +# Specify the key identifier to use with the ntpdc utility. +#requestkey 8 + +# Specify the key identifier to use with the ntpq utility. +#controlkey 8 + +# Enable writing of statistics records. +#statistics clockstats cryptostats loopstats peerstats diff --git a/tests/unittests/test_cli.py b/tests/unittests/test_cli.py index 986ea4d..e18cda3 100644 --- a/tests/unittests/test_cli.py +++ b/tests/unittests/test_cli.py @@ -334,7 +334,7 @@ class TestCLI: "mariner, miraclelinux, " "openbsd, openeuler, OpenCloudOS, openmandriva, " "opensuse, opensuse-microos, opensuse-tumbleweed, " - "opensuse-leap, photon, rhel, rocky, sle_hpc, " + "opensuse-leap, photon, msvsphere, rhel, rocky, sle_hpc, " "sle-micro, sles, TencentOS, ubuntu, virtuozzo", " **resize_rootfs:** ", "(``true``/``false``/``noblock``)", diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py index cb99193..4d3eccb 100644 --- a/tests/unittests/test_net.py +++ b/tests/unittests/test_net.py @@ -8811,6 +8811,7 @@ class TestNetRenderers(CiTestCase): "eurolinux", "fedora", "rhel", + "msvsphere", ] for distro_name in variants: m_info.return_value = {"variant": distro_name} diff --git a/tests/unittests/test_render_template.py b/tests/unittests/test_render_template.py index 150e61b..c802fba 100644 --- a/tests/unittests/test_render_template.py +++ b/tests/unittests/test_render_template.py @@ -21,6 +21,7 @@ DISTRO_VARIANTS = [ "netbsd", "openbsd", "photon", + "msvsphere", "rhel", "suse", "ubuntu", diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py index 70edb40..631f358 100644 --- a/tests/unittests/test_util.py +++ b/tests/unittests/test_util.py @@ -210,6 +210,28 @@ OS_RELEASE_MIRACLELINUX_8 = dedent( """ ) +OS_RELEASE_MSVSPHERE_9 = dedent( + """\ + NAME="MSVSphere" + VERSION="10.0 (Inferit)" + ID="msvsphere" + ID_LIKE="rhel centos fedora" + VERSION_ID="10.0" + PLATFORM_ID="platform:el10" + PRETTY_NAME="MSVSphere 10.0 (Inferit)" + ANSI_COLOR="0;34" + LOGO="fedora-logo-icon" + CPE_NAME="cpe:/o:ncsd:msvsphere:10::baseos" + HOME_URL="https://msvsphere-os.ru/" + BUG_REPORT_URL="https://bugs.msvsphere-os.ru/" + + MSVSPHERE_MANTISBT_PROJECT="MSVSphere-10" + MSVSPHERE_MANTISBT_PROJECT_VERSION="10.0" + REDHAT_SUPPORT_PRODUCT="MSVSphere" + REDHAT_SUPPORT_PRODUCT_VERSION="10.0" +""" +) + OS_RELEASE_ROCKY_8 = dedent( """\ NAME="Rocky Linux" @@ -311,6 +333,7 @@ REDHAT_RELEASE_ALMALINUX_8 = "AlmaLinux release 8.3 (Purple Manul)" REDHAT_RELEASE_EUROLINUX_7 = "EuroLinux release 7.9 (Minsk)" REDHAT_RELEASE_EUROLINUX_8 = "EuroLinux release 8.4 (Vaduz)" REDHAT_RELEASE_MIRACLELINUX_8 = "MIRACLE LINUX release 8.4 (Peony)" +REDHAT_RELEASE_MMSVSPHERE_10 = "MSVSphere release 10.0 (Inferit)" REDHAT_RELEASE_ROCKY_8 = "Rocky Linux release 8.3 (Green Obsidian)" REDHAT_RELEASE_VIRTUOZZO_8 = "Virtuozzo Linux release 8" REDHAT_RELEASE_CLOUDLINUX_8 = "CloudLinux release 8.4 (Valery Rozhdestvensky)" @@ -1121,6 +1144,22 @@ class TestGetLinuxDistro(CiTestCase): dist = util.get_linux_distro() self.assertEqual(("miraclelinux", "8", "Peony"), dist) + @mock.patch(M_PATH + "load_text_file") + def test_get_linux_msvsphere10_rhrelease(self, m_os_release, m_path_exists): + """Verify rocky linux 8 read from redhat-release.""" + m_os_release.return_value = REDHAT_RELEASE_MSVSPHERE_10 + m_path_exists.side_effect = TestGetLinuxDistro.redhat_release_exists + dist = util.get_linux_distro() + self.assertEqual(("msvsphere", "10.0", "Inferit"), dist) + + @mock.patch(M_PATH + "load_text_file") + def test_get_linux_msvsphere10_osrelease(self, m_os_release, m_path_exists): + """Verify rocky linux 8 read from os-release.""" + m_os_release.return_value = OS_RELEASE_MSVSPHERE_10 + m_path_exists.side_effect = TestGetLinuxDistro.os_release_exists + dist = util.get_linux_distro() + self.assertEqual(("msvsphere", "10.0", "Inferit"), dist) + @mock.patch(M_PATH + "load_text_file") def test_get_linux_rocky8_rhrelease(self, m_os_release, m_path_exists): """Verify rocky linux 8 read from redhat-release.""" @@ -1327,6 +1366,7 @@ class TestGetVariant: ({"system": "linux", "dist": ("ubuntu",)}, "ubuntu"), ({"system": "linux", "dist": ("linuxmint",)}, "ubuntu"), ({"system": "linux", "dist": ("mint",)}, "ubuntu"), + ({"system": "linux", "dist": ("msvsphere",)}, "msvsphere"), ({"system": "linux", "dist": ("redhat",)}, "rhel"), ({"system": "linux", "dist": ("opensuse",)}, "suse"), ({"system": "linux", "dist": ("opensuse-tumbleweed",)}, "suse"), diff --git a/tools/read-dependencies b/tools/read-dependencies index a3b2d73..3154138 100755 --- a/tools/read-dependencies +++ b/tools/read-dependencies @@ -27,6 +27,7 @@ DISTRO_PKG_TYPE_MAP = { "eurolinux": "redhat", "miraclelinux": "redhat", "rocky": "redhat", + "msvsphere": "redhat", "redhat": "redhat", "debian": "debian", "ubuntu": "debian", @@ -95,6 +96,7 @@ CI_SYSTEM_BASE_PKGS = { "common": ["make", "sudo", "tar"], "eurolinux": ["python3-tox"], "miraclelinux": ["python3-tox"], + "msvsphere": ["python3-tox"], "redhat": ["python3-tox"], "centos": ["python3-tox"], "ubuntu": ["devscripts", "python3-dev", "libssl-dev", "tox", "sbuild"], @@ -336,12 +338,13 @@ def pkg_install(pkg_list, distro, test_distro=False, dry_run=False): cmd = DISTRO_INSTALL_PKG_CMD[distro_family] install_cmd.extend(cmd) - if distro in ["centos", "redhat", "rocky", "eurolinux"]: + if distro in ["centos", "redhat", "rocky", "eurolinux", "msvsphere"]: # CentOS and Redhat need epel-release to access oauthlib and jsonschema subprocess.check_call(install_cmd + ["epel-release"]) if distro in [ "suse", "opensuse", + "msvsphere", "redhat", "rocky", "centos", diff --git a/tools/render-template b/tools/render-template index 5ef5a37..80e991f 100755 --- a/tools/render-template +++ b/tools/render-template @@ -26,6 +26,7 @@ def main(): "gentoo", "mariner", "miraclelinux", + "msvsphere", "netbsd", "openbsd", "openeuler", diff --git a/tools/run-container b/tools/run-container index f27c021..15d2ac5 100755 --- a/tools/run-container +++ b/tools/run-container @@ -249,7 +249,7 @@ apt_install() { install_packages() { get_os_info || return case "$OS_NAME" in - centos|rocky*) yum_install "$@";; + centos|msvsphere|rocky*) yum_install "$@";; opensuse*) zypper_install "$@";; debian|ubuntu) apt_install "$@" -y;; *) error "Do not know how to install packages on ${OS_NAME}"; @@ -499,7 +499,7 @@ main() { local build_pkg="" build_srcpkg="" pkg_ext="" distflag="" case "$OS_NAME" in - centos|rocky*) distflag="--distro=redhat";; + centos|msvsphere|rocky*) distflag="--distro=redhat";; opensuse*) distflag="--distro=suse";; esac -- 2.43.5