diff --git a/users/init.sls b/users/init.sls index b62aef1..1330680 100644 --- a/users/init.sls +++ b/users/init.sls @@ -4,6 +4,8 @@ {% set used_googleauth = [] %} {% set used_user_files = [] %} {% set used_polkit = [] %} +{%- set create_dirs = [] %} +{%- set created_groups = [] %} {% for group, setting in salt['pillar.get']('groups', {}).items() %} {% if setting.absent is defined and setting.absent or setting.get('state', "present") == 'absent' %} @@ -11,6 +13,7 @@ users_group_absent_{{ group }}: group.absent: - name: {{ group }} {% else %} +{%- do created_groups.append(group) %} users_group_present_{{ group }}: group.present: - name: {{ group }} @@ -75,9 +78,33 @@ include: {%- set user_group = name -%} {%- endif %} +{%- if createhome %} +{%- set required_dir = salt['file.dirname'](home) %} +{%- do create_dirs.append(required_dir) %} +{%- endif %} + {%- if not ( 'sudoonly' in user and user['sudoonly'] ) %} -{% for group in user.get('groups', []) %} -users_{{ name }}_{{ group }}_group: + +{#- create prime group #} +{%- if user_group not in created_groups %} +{%- do created_groups.append(user_group) %} +users_group_present_{{ user_group }}: + group.present: + - name: {{ user_group }} + {%- if 'prime_group' in user and 'gid' in user['prime_group'] %} + - gid: {{ user['prime_group']['gid'] }} + {%- elif 'uid' in user %} + - gid: {{ user['uid'] }} + {%- endif %} + {% if 'system' in user and user['system'] %} + - system: True + {% endif %} +{%- endif %} + +{#- create required groups #} +{%- for group in user.get('groups', []) if group not in created_groups %} +{%- do created_groups.append(group) %} +users_group_present_{{ group }}: group.present: - name: {{ group }} {% if group == 'sudo' %} @@ -85,16 +112,6 @@ users_{{ name }}_{{ group }}_group: {% endif %} {% endfor %} -{# in case home subfolder doesn't exist, create it before the user exists #} -{% if createhome -%} -users_{{ name }}_user_prereq: - file.directory: - - name: {{ salt['file.dirname'](home) }} - - makedirs: True - - prereq: - - user: users_{{ name }}_user -{%- endif %} - users_{{ name }}_user: {% if createhome -%} file.directory: @@ -107,16 +124,6 @@ users_{{ name }}_user: - user: users_{{ name }}_user - group: {{ user_group }} {%- endif %} - group.present: - - name: {{ user_group }} - {%- if 'prime_group' in user and 'gid' in user['prime_group'] %} - - gid: {{ user['prime_group']['gid'] }} - {%- elif 'uid' in user %} - - gid: {{ user['uid'] }} - {%- endif %} - {% if 'system' in user and user['system'] %} - - system: True - {% endif %} user.present: - name: {{ name }} - home: {{ home }} @@ -207,6 +214,9 @@ users_{{ name }}_user: {% for group in user.get('groups', []) -%} - group: {{ group }} {% endfor %} + {%- if createhome and required_dir != '/' %} + - file: users_prereq_dir_{{ required_dir }} + {%- endif %} {% if 'ssh_keys' in user or @@ -568,6 +578,14 @@ users_{{ name }}_user_gitconfig_absent_{{ key }}: {% endfor %} +{#- create directories for homes #} +{%- for dir in create_dirs|unique|reject('equalto', '/') %} +users_prereq_dir_{{ dir }}: + file.directory: + - name: {{ dir }} + - makedirs: True +{%- endfor %} + {% for name, user in pillar.get('users', {}).items() if user.absent is defined and user.absent %}