class Chef::Resource::Locale

Public Instance Methods

define_resource_requirements() click to toggle source

Avoid running this resource on platforms that don’t use /etc/locale.conf

# File lib/chef/resource/locale.rb, line 108
def define_resource_requirements
  requirements.assert(:all_actions) do |a|
    a.assertion { LOCALE_PLATFORM_FAMILIES.include?(node[:platform_family]) }
    a.failure_message(Chef::Exceptions::ProviderNotFound, "The locale resource is not supported on platform family: #{node[:platform_family]}")
  end

  requirements.assert(:all_actions) do |a|
    a.assertion do
      # RHEL/CentOS type platforms don't have locale-gen
      # Windows has locale-gen as part of the install, but not in the path
      which("locale-gen") || windows?
    end
    a.failure_message(Chef::Exceptions::ProviderNotFound, "The locale resource requires the locale-gen tool")
  end
end
generate_locales() click to toggle source

Generates the localization files from templates using locale-gen. @see manpages.ubuntu.com/manpages/cosmic/man8/locale-gen.8.html @raise [Mixlib::ShellOut::ShellCommandFailed] not a supported language or locale

# File lib/chef/resource/locale.rb, line 128
def generate_locales
  shell_out!("locale-gen #{unavailable_locales.join(" ")}", timeout: 1800)
end
get_system_locale_windows() click to toggle source

Gets the System-locale setting for the current computer. @see docs.microsoft.com/en-us/powershell/module/international/get-winsystemlocale @return [String] the current value of the System-locale setting.

# File lib/chef/resource/locale.rb, line 95
def get_system_locale_windows
  powershell_exec("Get-WinSystemLocale").result["Name"]
end
lc_all(arg = nil) click to toggle source

@deprecated Use {#lc_env} instead of this property.

{#lc_env} uses Hash with specific LC var as key.

@raise [Chef::Deprecated]

# File lib/chef/resource/locale.rb, line 71
def lc_all(arg = nil)
  unless arg.nil?
    Chef.deprecated(:locale_lc_all, "Changing LC_ALL can break #{ChefUtils::Dist::Infra::PRODUCT}'s parsing of command output in unexpected ways.\n Use one of the more specific LC_ properties as needed.")
  end
end
new_content() click to toggle source

@return [String] Contents that are required to be

updated in /etc/locale.conf
# File lib/chef/resource/locale.rb, line 174
def new_content
  @new_content ||= begin
    content = {}
    content = new_resource.lc_env.dup if new_resource.lc_env
    content["LANG"] = new_resource.lang if new_resource.lang
    content.sort.map { |t| t.join("=") }.join("\n") + "\n"
  end
end
set_system_locale() click to toggle source

Sets the system locale for the current computer.

# File lib/chef/resource/locale.rb, line 134
def set_system_locale
  if windows?
    # Sets the system locale for the current computer.
    # @see https://docs.microsoft.com/en-us/powershell/module/internationalcmdlets/set-winsystemlocale
    #
    response = powershell_exec("Set-WinSystemLocale -SystemLocale #{new_resource.lang}")
    raise response.errors.join(" ") if response.error?
  else
    generate_locales unless unavailable_locales.empty?
    update_locale
  end
end
unavailable_locales() click to toggle source

@return [Array<String>] Locales that user wants to set but are not available on

the system. They are required to be generated.
# File lib/chef/resource/locale.rb, line 163
def unavailable_locales
  @unavailable_locales ||= begin
    available = shell_out!("locale -a").stdout.split("\n")
    required = [new_resource.lang, new_resource.lc_env.values].flatten.compact.uniq
    required - available
  end
end
update_locale() click to toggle source

Updates system locale by appropriately writing them in /etc/locale.conf @note This locale change won’t affect the current run. At this time it is an exercise left to the user to restart or reboot if the locale change is required at later part of the client run. @see wiki.archlinux.org/index.php/locale#Setting_the_system_locale

# File lib/chef/resource/locale.rb, line 153
def update_locale
  file "Updating system locale" do
    path LOCALE_CONF
    content new_content
  end
end