refactor(users): change system.users from list to dict keyed by username

This commit is contained in:
MORAWSKI Norbert
2026-03-20 14:33:13 +01:00
parent 398f1b081d
commit c0e672a32a
9 changed files with 73 additions and 83 deletions

View File

@@ -39,33 +39,24 @@
no_log: true
vars:
system_input: "{{ system | default({}) }}"
system_users_input: "{{ system_input.users | default([]) }}"
system_first_user: >-
{{
system_users_input[0]
if (system_users_input is iterable and system_users_input is not string
and system_users_input is not mapping and system_users_input | length > 0)
else {}
}}
system_users_input: "{{ system_input.users | default({}) }}"
_first_entry: "{{ system_users_input | dict2items | first | default({'key': '', 'value': {}}) }}"
_first_name: "{{ _first_entry.key }}"
_first_attrs: "{{ _first_entry.value if _first_entry.value is mapping else {} }}"
system_root_input: "{{ (system_input.root | default({})) if (system_input.root is mapping) else {} }}"
prompt_user_name: "{{ user_name | default(system_user_name | default(''), true) | string }}"
prompt_user_key: "{{ user_public_key | default(user_key | default(system_user_key | default(''), true), true) | string | trim }}"
prompt_user_password: "{{ user_password | default(system_user_password | default(''), true) | string }}"
prompt_root_password: "{{ root_password | default(system_root_password | default(''), true) | string }}"
resolved_user:
name: >-
{{
system_first_user.name | string
if (system_first_user.name | default('') | string | length) > 0
else prompt_user_name
}}
resolved_name: "{{ _first_name if (_first_name | length > 0) else prompt_user_name }}"
resolved_attrs:
keys: >-
{{
system_first_user['keys']
if (system_first_user['keys'] is defined
and system_first_user['keys'] is iterable
and system_first_user['keys'] is not string
and system_first_user['keys'] | length > 0)
_first_attrs['keys']
if (_first_attrs['keys'] is defined
and _first_attrs['keys'] is iterable
and _first_attrs['keys'] is not string
and _first_attrs['keys'] | length > 0)
else (
[prompt_user_key]
if (prompt_user_key | length > 0)
@@ -74,8 +65,8 @@
}}
password: >-
{{
system_first_user.password | string
if (system_first_user.password | default('') | string | length) > 0
_first_attrs.password | string
if (_first_attrs.password | default('') | string | length) > 0
else prompt_user_password
}}
ansible.builtin.set_fact:
@@ -84,14 +75,7 @@
system_input
| combine(
{
'users': (
[resolved_user]
+ (system_users_input[1:]
if (system_users_input is sequence
and system_users_input is not string
and system_users_input | length > 1)
else [])
),
'users': system_users_input | combine({resolved_name: (_first_attrs | combine(resolved_attrs, recursive=True))}),
'root': {
'password': (
(system_root_input.password | default('') | string | length) > 0
@@ -206,10 +190,12 @@
when:
- post_reboot_can_connect | bool
no_log: true
vars:
_primary: "{{ (system_cfg.users | dict2items | selectattr('value.password', 'defined') | first) }}"
ansible.builtin.set_fact:
ansible_user: "{{ system_cfg.users[0].name }}"
ansible_password: "{{ system_cfg.users[0].password }}"
ansible_become_password: "{{ system_cfg.users[0].password }}"
ansible_user: "{{ _primary.key }}"
ansible_password: "{{ _primary.value.password }}"
ansible_become_password: "{{ _primary.value.password }}"
ansible_ssh_extra_args: "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
ansible_python_interpreter: /usr/bin/python3