Назад | Перейти на главную страницу

Как сгенерировать и установить языковой стандарт с помощью ansible?

Я ищу идемпотентную доступную роль / задачу, чтобы гарантировать, что определенная локаль (например, en_US.UTF-8) установлена ​​по умолчанию. Он должен сгенерировать языковой стандарт (только при необходимости) и установить его по умолчанию (также только при необходимости).

Для первой части я бы зарегистрировал вывод locale -a | grep "{{ locale_name }}" и при необходимости сгенерировать.

Что касается второй части, мне интересно, достаточно ли каждый раз запускать update-locale, потому что сама эта команда в любом случае идемпотентна.

В localectl команда из ответа @mniess всегда будет сообщать как "измененные", даже если новые значения равны текущим. Вот что я лично установил, чтобы установить оба LANG и LANGUAGE и решите эту проблему:

- name: Ensure localisation files for '{{ config_system_locale }}' are available
  locale_gen:
    name: "{{ config_system_locale }}"
    state: present

- name: Ensure localisation files for '{{ config_system_language }}' are available
  locale_gen:
    name: "{{ config_system_language }}"
    state: present

- name: Get current locale and language configuration
  command: localectl status
  register: locale_status
  changed_when: false

- name: Parse 'LANG' from current locale and language configuration
  set_fact:
    locale_lang: "{{ locale_status.stdout | regex_search('LANG=([^\n]+)', '\\1') | first }}"

- name: Parse 'LANGUAGE' from current locale and language configuration
  set_fact:
    locale_language: "{{ locale_status.stdout | regex_search('LANGUAGE=([^\n]+)', '\\1') | default([locale_lang], true) | first }}"

- name: Configure locale to '{{ config_system_locale }}' and language to '{{ config_system_language }}'
  command: localectl set-locale LANG={{ config_system_locale }} LANGUAGE={{ config_system_language }}
  changed_when: locale_lang != config_system_locale or locale_language != config_system_language

Кроме того, это то, что у меня есть в group_vars/main.yml:

config_system_locale: 'pt_PT.UTF-8'
config_system_language: 'en_US.UTF-8'

Вот что у меня получилось:

- name: Ensure the locale exists
  locale_gen:
    name: en_US.UTF-8
    state: present
- name: set as default locale
  command: localectl set-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8