Skip to content

Commit

Permalink
Add AlmaLinux OS support (#872)
Browse files Browse the repository at this point in the history
AlmaLinux OS is RHEL-compatible so all the changes needed are trivial.
  • Loading branch information
andrewlukoshko committed May 7, 2021
1 parent 1387754 commit 8cf40a7
Show file tree
Hide file tree
Showing 14 changed files with 62 additions and 17 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ get in contact with that distribution and send them our way!

| Supported OSes | Supported Public Clouds | Supported Private Clouds |
| --- | --- | --- |
| Alpine Linux<br />ArchLinux<br />Debian<br />Fedora<br />FreeBSD<br />Gentoo Linux<br />NetBSD<br />OpenBSD<br />RHEL/CentOS<br />SLES/openSUSE<br />Ubuntu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | Amazon Web Services<br />Microsoft Azure<br />Google Cloud Platform<br />Oracle Cloud Infrastructure<br />Softlayer<br />Rackspace Public Cloud<br />IBM Cloud<br />Digital Ocean<br />Bigstep<br />Hetzner<br />Joyent<br />CloudSigma<br />Alibaba Cloud<br />OVH<br />OpenNebula<br />Exoscale<br />Scaleway<br />CloudStack<br />AltCloud<br />SmartOS<br />HyperOne<br />Vultr<br />Rootbox<br /> | Bare metal installs<br />OpenStack<br />LXD<br />KVM<br />Metal-as-a-Service (MAAS)<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />|
| Alpine Linux<br />ArchLinux<br />Debian<br />Fedora<br />FreeBSD<br />Gentoo Linux<br />NetBSD<br />OpenBSD<br />RHEL/CentOS/AlmaLinux<br />SLES/openSUSE<br />Ubuntu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | Amazon Web Services<br />Microsoft Azure<br />Google Cloud Platform<br />Oracle Cloud Infrastructure<br />Softlayer<br />Rackspace Public Cloud<br />IBM Cloud<br />Digital Ocean<br />Bigstep<br />Hetzner<br />Joyent<br />CloudSigma<br />Alibaba Cloud<br />OVH<br />OpenNebula<br />Exoscale<br />Scaleway<br />CloudStack<br />AltCloud<br />SmartOS<br />HyperOne<br />Vultr<br />Rootbox<br /> | Bare metal installs<br />OpenStack<br />LXD<br />KVM<br />Metal-as-a-Service (MAAS)<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />|

## To start developing cloud-init

Expand Down
4 changes: 2 additions & 2 deletions cloudinit/config/cc_ntp.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
frequency = PER_INSTANCE
NTP_CONF = '/etc/ntp.conf'
NR_POOL_SERVERS = 4
distros = ['alpine', 'centos', 'debian', 'fedora', 'opensuse', 'rhel',
'sles', 'ubuntu']
distros = ['almalinux', 'alpine', 'centos', 'debian', 'fedora', 'opensuse',
'rhel', 'sles', 'ubuntu']

NTP_CLIENT_CONFIG = {
'chrony': {
Expand Down
4 changes: 2 additions & 2 deletions cloudinit/config/cc_yum_add_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
**Module frequency:** per always
**Supported distros:** centos, fedora, rhel
**Supported distros:** almalinux, centos, fedora, rhel
**Config keys**::
Expand All @@ -36,7 +36,7 @@

from cloudinit import util

distros = ['centos', 'fedora', 'rhel']
distros = ['almalinux', 'centos', 'fedora', 'rhel']


def _canonicalize_id(repo_id):
Expand Down
2 changes: 1 addition & 1 deletion cloudinit/distros/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
'debian': ['debian', 'ubuntu'],
'freebsd': ['freebsd'],
'gentoo': ['gentoo'],
'redhat': ['amazon', 'centos', 'fedora', 'rhel'],
'redhat': ['almalinux', 'amazon', 'centos', 'fedora', 'rhel'],
'suse': ['opensuse', 'sles'],
}

Expand Down
9 changes: 9 additions & 0 deletions cloudinit/distros/almalinux.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# This file is part of cloud-init. See LICENSE file for license information.

from cloudinit.distros import rhel


class Distro(rhel.Distro):
pass

# vi: ts=4 expandtab
2 changes: 1 addition & 1 deletion cloudinit/net/sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

LOG = logging.getLogger(__name__)
NM_CFG_FILE = "/etc/NetworkManager/NetworkManager.conf"
KNOWN_DISTROS = ['centos', 'fedora', 'rhel', 'suse']
KNOWN_DISTROS = ['almalinux', 'centos', 'fedora', 'rhel', 'suse']


def _make_header(sep='#'):
Expand Down
35 changes: 35 additions & 0 deletions cloudinit/tests/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,31 @@
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"
""")

OS_RELEASE_ALMALINUX_8 = dedent("""\
NAME="AlmaLinux"
VERSION="8.3 (Purple Manul)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.3"
PLATFORM_ID="platform:el8"
PRETTY_NAME="AlmaLinux 8.3 (Purple Manul)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:almalinux:almalinux:8.3:GA"
HOME_URL="https://almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"
ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8"
ALMALINUX_MANTISBT_PROJECT_VERSION="8.3"
""")

REDHAT_RELEASE_CENTOS_6 = "CentOS release 6.10 (Final)"
REDHAT_RELEASE_CENTOS_7 = "CentOS Linux release 7.5.1804 (Core)"
REDHAT_RELEASE_REDHAT_6 = (
"Red Hat Enterprise Linux Server release 6.10 (Santiago)")
REDHAT_RELEASE_REDHAT_7 = (
"Red Hat Enterprise Linux Server release 7.5 (Maipo)")
REDHAT_RELEASE_ALMALINUX_8 = (
"AlmaLinux release 8.3 (Purple Manul)")


OS_RELEASE_DEBIAN = dedent("""\
Expand Down Expand Up @@ -502,6 +521,22 @@ def test_get_linux_copr_centos(self, m_os_release, m_path_exists):
dist = util.get_linux_distro()
self.assertEqual(('centos', '7', 'Core'), dist)

@mock.patch('cloudinit.util.load_file')
def test_get_linux_almalinux8_rhrelease(self, m_os_release, m_path_exists):
"""Verify almalinux 8 read from redhat-release."""
m_os_release.return_value = REDHAT_RELEASE_ALMALINUX_8
m_path_exists.side_effect = TestGetLinuxDistro.redhat_release_exists
dist = util.get_linux_distro()
self.assertEqual(('almalinux', '8.3', 'Purple Manul'), dist)

@mock.patch('cloudinit.util.load_file')
def test_get_linux_almalinux8_osrelease(self, m_os_release, m_path_exists):
"""Verify almalinux 8 read from os-release."""
m_os_release.return_value = OS_RELEASE_ALMALINUX_8
m_path_exists.side_effect = TestGetLinuxDistro.os_release_exists
dist = util.get_linux_distro()
self.assertEqual(('almalinux', '8.3', 'Purple Manul'), dist)

@mock.patch('cloudinit.util.load_file')
def test_get_linux_debian(self, m_os_release, m_path_exists):
"""Verify we get the correct name and release name on Debian."""
Expand Down
4 changes: 2 additions & 2 deletions cloudinit/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -521,8 +521,8 @@ def system_info():
if system == "linux":
linux_dist = info['dist'][0].lower()
if linux_dist in (
'alpine', 'arch', 'centos', 'debian', 'fedora', 'rhel',
'suse'):
'almalinux', 'alpine', 'arch', 'centos', 'debian', 'fedora',
'rhel', 'suse'):
var = linux_dist
elif linux_dist in ('ubuntu', 'linuxmint', 'mint'):
var = 'ubuntu'
Expand Down
6 changes: 3 additions & 3 deletions config/cloud.cfg.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ disable_root: false
disable_root: true
{% endif %}

{% if variant in ["alpine", "amazon", "centos", "fedora", "rhel"] %}
{% if variant in ["almalinux", "alpine", "amazon", "centos", "fedora", "rhel"] %}
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
{% if variant == "amazon" %}
resize_rootfs: noblock
Expand Down Expand Up @@ -153,7 +153,7 @@ cloud_final_modules:
# (not accessible to handlers/transforms)
system_info:
# This will affect which distro class gets used
{% if variant in ["alpine", "amazon", "arch", "centos", "debian",
{% if variant in ["almalinux", "alpine", "amazon", "arch", "centos", "debian",
"fedora", "freebsd", "netbsd", "openbsd", "rhel",
"suse", "ubuntu"] %}
distro: {{ variant }}
Expand Down Expand Up @@ -206,7 +206,7 @@ system_info:
primary: http://ports.ubuntu.com/ubuntu-ports
security: http://ports.ubuntu.com/ubuntu-ports
ssh_svcname: ssh
{% elif variant in ["alpine", "amazon", "arch", "centos", "fedora",
{% elif variant in ["almalinux", "alpine", "amazon", "arch", "centos", "fedora",
"rhel", "suse"] %}
# Default user name + that default users groups (if added/used)
default_user:
Expand Down
2 changes: 1 addition & 1 deletion systemd/cloud-init-generator.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ default() {

check_for_datasource() {
local ds_rc=""
{% if variant in ["rhel", "fedora", "centos"] %}
{% if variant in ["almalinux", "rhel", "fedora", "centos"] %}
local dsidentify="/usr/libexec/cloud-init/ds-identify"
{% else %}
local dsidentify="/usr/lib/cloud-init/ds-identify"
Expand Down
2 changes: 1 addition & 1 deletion systemd/cloud-init.service.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ After=systemd-networkd-wait-online.service
{% if variant in ["ubuntu", "unknown", "debian"] %}
After=networking.service
{% endif %}
{% if variant in ["centos", "fedora", "rhel"] %}
{% if variant in ["almalinux", "centos", "fedora", "rhel"] %}
After=network.service
After=NetworkManager.service
{% endif %}
Expand Down
2 changes: 1 addition & 1 deletion tests/unittests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def test_wb_devel_schema_subcommand_doc_content(self):
self._call_main(['cloud-init', 'devel', 'schema', '--docs', 'all'])
expected_doc_sections = [
'**Supported distros:** all',
'**Supported distros:** alpine, centos, debian, fedora',
'**Supported distros:** almalinux, alpine, centos, debian, fedora',
'**Config schema**:\n **resize_rootfs:** (true/false/noblock)',
'**Examples**::\n\n runcmd:\n - [ ls, -l, / ]\n'
]
Expand Down
1 change: 1 addition & 0 deletions tools/.github-cla-signers
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ ajmyyra
AlexBaranowski
Aman306
andrewbogott
andrewlukoshko
antonyc
aswinrajamannar
beezly
Expand Down
4 changes: 2 additions & 2 deletions tools/render-cloudcfg
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import argparse
import os
import sys

VARIANTS = ["alpine", "amazon", "arch", "centos", "debian", "fedora",
"freebsd", "netbsd", "openbsd", "rhel", "suse", "ubuntu",
VARIANTS = ["almalinux", "alpine", "amazon", "arch", "centos", "debian",
"fedora", "freebsd", "netbsd", "openbsd", "rhel", "suse", "ubuntu",
"unknown"]


Expand Down

0 comments on commit 8cf40a7

Please sign in to comment.