summaryrefslogtreecommitdiffstats
path: root/roles/locales/tasks/main.yml
blob: f4ef8f1b7fdb05476333b2e949a6d516c1cf5b8b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
- name: "Include OS-specific variables"
  ansible.builtin.include_vars: "{{ ansible_facts['os_family'] | lower }}.yml"

- name: "Ensure locales package is installed"
  become: true
  ansible.builtin.package:
    name: "{{ locales_package }}"
    state: "present"

- name: "Read locale.gen file"
  ansible.builtin.slurp:
    src: "/etc/locale.gen"
  register: locales_content

- name: "Validate locale entries exist in locale.gen"
  ansible.builtin.assert:
    that:
      - "item in (locales_content.content | b64decode)"
    fail_msg: "Locale '{{ item }}' not found in /etc/locale.gen."
  loop: "{{ locales }}"

- name: "Check if required locales are generated"
  ansible.builtin.shell: |
    set -o pipefail
    locale -a | grep 'utf8$' | sed 's/.utf8$/.UTF-8 UTF-8/'
  args:
    executable: /bin/bash
  register: locales_available
  changed_when: false

- name: "Generate locales if missing"
  become: true
  when: locales | difference(locales_available.stdout_lines) | length > 0
  block:
    - name: "Update locale.gen"
      ansible.builtin.lineinfile:
        dest: "/etc/locale.gen"
        mode: "0644"
        regexp: "^#{{ item }}"
        line: "{{ item }}"
      loop: "{{ locales }}"

    - name: "Generate locales"
      ansible.builtin.command:
        cmd: "locale-gen"
      changed_when: true

- name: "Update locale.conf"
  become: true
  ansible.builtin.copy:
    dest: "/etc/locale.conf"
    mode: "0644"
    content: |
      LANG={{ locales_lang }}
      LANGUAGE={{ locales_language }}
      LC_CTYPE={{ locales_lc_ctype }}
      LC_NUMERIC={{ locales_lc_numeric }}
      LC_TIME={{ locales_lc_time }}
      LC_COLLATE={{ locales_lc_collate }}
      LC_MONETARY={{ locales_lc_monetary }}
      LC_MESSAGES={{ locales_lc_messages }}
      LC_PAPER={{ locales_lc_paper }}
      LC_NAME={{ locales_lc_name }}
      LC_ADDRESS={{ locales_lc_address }}
      LC_TELEPHONE={{ locales_lc_telephone }}
      LC_MEASUREMENT={{ locales_lc_measurement }}
      LC_IDENTIFICATION={{ locales_lc_identification }}