summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/config/cc_locale.py25
-rw-r--r--cloudinit/distros/__init__.py4
-rw-r--r--cloudinit/distros/rhel.py31
-rw-r--r--cloudinit/distros/ubuntu.py11
-rw-r--r--templates/default-locale.tmpl1
5 files changed, 48 insertions, 24 deletions
diff --git a/cloudinit/config/cc_locale.py b/cloudinit/config/cc_locale.py
index 3fb4c5d9..6feaae9d 100644
--- a/cloudinit/config/cc_locale.py
+++ b/cloudinit/config/cc_locale.py
@@ -18,41 +18,20 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import os
-
-from cloudinit import templater
from cloudinit import util
-def apply_locale(locale, cfgfile, cloud, log):
- # TODO this command might not work on RH...
- if os.path.exists('/usr/sbin/locale-gen'):
- util.subp(['locale-gen', locale], capture=False)
- if os.path.exists('/usr/sbin/update-locale'):
- util.subp(['update-locale', locale], capture=False)
- if not cfgfile:
- return
- template_fn = cloud.get_template_filename('default-locale')
- if not template_fn:
- log.warn("No template filename found to write to %s", cfgfile)
- else:
- templater.render_to_file(template_fn, cfgfile, {'locale': locale})
-
-
def handle(name, cfg, cloud, log, args):
if len(args) != 0:
locale = args[0]
else:
locale = util.get_cfg_option_str(cfg, "locale", cloud.get_locale())
- locale_cfgfile = util.get_cfg_option_str(cfg, "locale_configfile",
- "/etc/default/locale")
-
if not locale:
log.debug(("Skipping module named %s, "
"no 'locale' configuration found"), name)
return
log.debug("Setting locale to %s", locale)
-
- apply_locale(locale, locale_cfgfile, cloud, log)
+ locale_cfgfile = util.get_cfg_option_str(cfg, "locale_configfile")
+ cloud.distro.apply_locale(locale, locale_cfgfile)
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
index f9a97da7..c324ddf6 100644
--- a/cloudinit/distros/__init__.py
+++ b/cloudinit/distros/__init__.py
@@ -83,6 +83,10 @@ class Distro(object):
return False
@abc.abstractmethod
+ def apply_locale(self, locale, out_fn=None):
+ raise NotImplementedError()
+
+ @abc.abstractmethod
def set_timezone(self, tz):
raise NotImplementedError()
diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py
index 5cbefa6e..df63d559 100644
--- a/cloudinit/distros/rhel.py
+++ b/cloudinit/distros/rhel.py
@@ -30,6 +30,10 @@ LOG = logging.getLogger(__name__)
NETWORK_FN_TPL = '/etc/sysconfig/network-scripts/ifcfg-%s'
+# See: http://tiny.cc/6r99fw
+# For what alot of these files that are being written
+# are and the format of them
+
class Distro(distros.Distro):
@@ -83,6 +87,33 @@ class Distro(distros.Distro):
LOG.debug("Setting hostname to %s", hostname)
util.subp(['hostname', hostname])
+ def apply_locale(self, locale, out_fn=None):
+ if not out_fn:
+ out_fn = self._paths.join(False, '/etc/sysconfig/i18n')
+ ro_fn = self._paths.join(True, '/etc/sysconfig/i18n')
+ # Update the 'LANG' if it exists instead of appending
+ old_contents = self._read_conf(ro_fn)
+ adjusted = False
+ new_contents = []
+ for entry in old_contents:
+ if not entry:
+ continue
+ if len(entry) == 1:
+ new_contents.append(entry[0])
+ continue
+ (cmd, args) = entry
+ cmd_c = cmd.strip().lower()
+ if cmd_c == 'lang':
+ args = "%s" % (locale)
+ adjusted = True
+ new_contents.append("=".join([cmd, args]))
+ # Guess not found, append it
+ if not adjusted:
+ new_contents.append("# Added by cloud-init")
+ new_contents.append('LANG="%s"' % (locale))
+ contents = "\n".join(new_contents)
+ util.write_file(out_fn, contents, 0644)
+
def _write_hostname(self, hostname, out_fn):
old_contents = []
if os.path.isfile(out_fn):
diff --git a/cloudinit/distros/ubuntu.py b/cloudinit/distros/ubuntu.py
index 15af2e7f..e8b95374 100644
--- a/cloudinit/distros/ubuntu.py
+++ b/cloudinit/distros/ubuntu.py
@@ -41,6 +41,17 @@ class Distro(distros.Distro):
# should only happen say once per instance...)
self._runner = helpers.Runners(paths)
+ def apply_locale(self, locale, out_fn=None):
+ if not out_fn:
+ out_fn = self._paths.join(False, '/etc/default/locale')
+ util.subp(['locale-gen', locale], capture=False)
+ util.subp(['update-locale', locale], capture=False)
+ contents = [
+ "# Created by cloud-init",
+ 'LANG="%s"' % (locale),
+ ]
+ util.write_file(out_fn, "\n".join(contents))
+
def install_packages(self, pkglist):
self._update_package_sources()
self.package_command('install', pkglist)
diff --git a/templates/default-locale.tmpl b/templates/default-locale.tmpl
deleted file mode 100644
index 5ee7e454..00000000
--- a/templates/default-locale.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-LANG="{{locale}}"