Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions cloudinit/distros/rhel.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Author: Joshua Harlow <harlowja@yahoo-inc.com>
#
# This file is part of cloud-init. See LICENSE file for license information.
import os

from cloudinit import distros, helpers
from cloudinit import log as logging
Expand Down Expand Up @@ -57,11 +58,25 @@ def __init__(self, name, cfg, paths):
# should only happen say once per instance...)
self._runner = helpers.Runners(paths)
self.osfamily = "redhat"
self.default_locale = "en_US.UTF-8"
self.system_locale = None
cfg["ssh_svcname"] = "sshd"

def install_packages(self, pkglist):
self.package_command("install", pkgs=pkglist)

def get_locale(self):
"""Return the default locale if set, else use system locale"""

# read system locale value
if not self.system_locale:
self.system_locale = self._read_system_locale()

# Return system_locale setting if valid, else use default locale
return (
self.system_locale if self.system_locale else self.default_locale
)

def apply_locale(self, locale, out_fn=None):
if self.uses_systemd():
if not out_fn:
Expand All @@ -75,6 +90,23 @@ def apply_locale(self, locale, out_fn=None):
}
rhel_util.update_sysconfig_file(out_fn, locale_cfg)

def _read_system_locale(self, keyname="LANG"):
"""Read system default locale setting, if present"""
if self.uses_systemd():
locale_fn = self.systemd_locale_conf_fn
else:
locale_fn = self.locale_conf_fn

if not locale_fn:
raise ValueError("Invalid path: %s" % locale_fn)

if os.path.exists(locale_fn):
(_exists, contents) = rhel_util.read_sysconfig_file(locale_fn)
if keyname in contents:
return contents[keyname]
else:
return None

def _write_hostname(self, hostname, filename):
# systemd will never update previous-hostname for us, so
# we need to do it ourselves
Expand Down
10 changes: 6 additions & 4 deletions tests/unittests/distros/test_generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,14 @@ def test_get_locale_ubuntu(self, m_locale):
locale = d.get_locale()
self.assertEqual("C.UTF-8", locale)

def test_get_locale_rhel(self):
"""Test rhel distro returns NotImplementedError exception"""
@mock.patch("cloudinit.distros.rhel.Distro._read_system_locale")
def test_get_locale_rhel(self, m_locale):
"""Test rhel distro returns locale set to C.UTF-8"""
m_locale.return_value = "C.UTF-8"
cls = distros.fetch("rhel")
d = cls("rhel", {}, None)
with self.assertRaises(NotImplementedError):
d.get_locale()
locale = d.get_locale()
self.assertEqual("C.UTF-8", locale)

def test_expire_passwd_uses_chpasswd(self):
"""Test ubuntu.expire_passwd uses the passwd command."""
Expand Down
1 change: 1 addition & 0 deletions tools/.github-cla-signers
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ renanrodrigo
rhansen
riedel
sarahwzadara
shi2wei3
slingamn
slyon
smoser
Expand Down