From 47423ebb57eb67ed318f5e91f9f837796f63f501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Gon=C3=A7alves?= Date: Thu, 8 Feb 2024 13:30:58 +0100 Subject: feat(roles/unix_users): create unix users --- roles/unix_users/defaults/main.yml | 8 ++++++++ roles/unix_users/meta/main.yml | 26 +++++++++++++++++++++++++ roles/unix_users/tasks/main.yml | 39 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 roles/unix_users/defaults/main.yml create mode 100644 roles/unix_users/meta/main.yml create mode 100644 roles/unix_users/tasks/main.yml diff --git a/roles/unix_users/defaults/main.yml b/roles/unix_users/defaults/main.yml new file mode 100644 index 0000000..83edad2 --- /dev/null +++ b/roles/unix_users/defaults/main.yml @@ -0,0 +1,8 @@ +--- + +unix_users__enabled_uid_min: 2001 +unix_users__enabled_uid_max: 2100 +unix_users__enabled_uid_slots: "{{ range( + unix_users__enabled_uid_min, + unix_users__enabled_uid_max + ) }}" diff --git a/roles/unix_users/meta/main.yml b/roles/unix_users/meta/main.yml new file mode 100644 index 0000000..1de5f3f --- /dev/null +++ b/roles/unix_users/meta/main.yml @@ -0,0 +1,26 @@ +--- + +argument_specs: + main: + short_description: unix_users main entrypoint. + options: + + unix_users__enabled_uid_min: + type: int + required: true + + unix_users__enabled_uid_max: + type: int + required: true + + unix_users__users: + type: list + elements: dict + required: true + options: + username: + type: str + required: true + comment: + type: str + required: false diff --git a/roles/unix_users/tasks/main.yml b/roles/unix_users/tasks/main.yml new file mode 100644 index 0000000..291e134 --- /dev/null +++ b/roles/unix_users/tasks/main.yml @@ -0,0 +1,39 @@ +--- + +- name: retrieve all users + ansible.builtin.getent: + database: passwd + register: unix_users__register_getent + +- name: parse all users in uid range + ansible.builtin.set_fact: + unix_users__parsed_getent: "[ + {% for name, attributes in + unix_users__register_getent.ansible_facts.getent_passwd.items() %} + {{ { 'name': name, 'uid': (attributes[2] | int) } }}, + {% endfor %} + ]" + +- name: retrieve minimum available uid + ansible.builtin.set_fact: + unix_users__available_uid_min: "{{ unix_users__parsed_getent + | map(attribute='uid') + | select('in', unix_users__enabled_uid_slots) + | max + | default(unix_users__enabled_uid_min) + | int }}" + +- name: create user with specific uid + ansible.builtin.user: + name: "{{ item.username }}" + uid: "{{ (unix_users__available_uid_min | int) + (index | int) }}" + loop: "{{ unix_users__users }}" + loop_control: + index_var: index + when: item.username not in (unix_users__parsed_getent | map(attribute='name')) + +- name: update user informations + ansible.builtin.user: + name: "{{ item.username }}" + comment: "{{ item.comment | normalize_unicode_to_ansii }}" + loop: "{{ unix_users__users }}" -- cgit v1.2.3