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).
This commit is contained in:
Joshua Harlow 2012-06-21 19:46:16 -07:00
parent 052605c0f1
commit 5f586faf98
5 changed files with 48 additions and 24 deletions

View File

@ -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)

View File

@ -82,6 +82,10 @@ class Distro(object):
return self._interface_action('up')
return False
@abc.abstractmethod
def apply_locale(self, locale, out_fn=None):
raise NotImplementedError()
@abc.abstractmethod
def set_timezone(self, tz):
raise NotImplementedError()

View File

@ -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):

View File

@ -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)

View File

@ -1 +0,0 @@
LANG="{{locale}}"