summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-06-21 19:46:16 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-06-21 19:46:16 -0700
commitc49507a221464ce0f9747d4371f8e3d1d1b30abd (patch)
tree1bb749e85c7c83837c4ebdd425ed24cb7edc125b
parent340c8f337751152cc54bdbeb9f9428c35fa720a1 (diff)
downloadvyos-cloud-init-c49507a221464ce0f9747d4371f8e3d1d1b30abd.tar.gz
vyos-cloud-init-c49507a221464ce0f9747d4371f8e3d1d1b30abd.zip
Updated so that the locale that is being written out currently in 'cc_locale'
now will be done by the distro classes (since its not the same for rhel and ubuntu). Remove the template also since it will just be created by the ubuntu distro class (its just one line).
-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}}"