| {%- from "linux/map.jinja" import system with context %} |
| {%- if system.enabled %} |
| |
| {%- set existing_groups = salt['group.getent']() %} |
| |
| include: |
| - linux.system.group |
| |
| {%- set defaults = system.get('defaults', {}).get('user', {}) %} |
| {%- if defaults %} |
| etc_default_useradd: |
| file.managed: |
| - name: /etc/default/useradd |
| - source: salt://linux/files/etc_default_useradd.jinja |
| - template: jinja |
| - user: root |
| - group: root |
| - mode: 644 |
| - defaults: |
| defaults: {{ defaults|yaml }} |
| {%- endif %} |
| |
| {%- for name, user in system.user.items() %} |
| {%- if user.enabled %} |
| {%- set requires = [] %} |
| {%- for group in user.get('groups', []) %} |
| {%- if group in system.get('group', {}).keys() %} |
| {%- do requires.append({'group': 'system_group_'+group}) %} |
| {%- endif %} |
| {%- endfor %} |
| |
| {%- if user.gid is not defined %} |
| {%- if name not in existing_groups|map(attribute="name") and system.get('create_default_group_for_user', False) %} |
| system_group_{{ name }}: |
| group.present: |
| - name: {{ name }} |
| - require_in: |
| - user: system_user_{{ name }} |
| {%- endif %} |
| {%- endif %} |
| |
| system_user_{{ name }}: |
| user.present: |
| - name: {{ name }} |
| - home: {{ user.home }} |
| {% if user.get('password') == False %} |
| - enforce_password: false |
| {% elif user.get('password') == None %} |
| - enforce_password: true |
| - password: '*' |
| {% elif user.get('password') %} |
| - enforce_password: true |
| - password: {{ user.password }} |
| - hash_password: {{ user.get('hash_password', False) }} |
| {% endif %} |
| {%- if user.gid is defined and user.gid %} |
| - gid: {{ user.gid }} |
| {%- elif name in existing_groups|map(attribute="name") or system.get('create_default_group_for_user', False) %} |
| - gid_from_name: true |
| {%- else %} |
| - gid: 65534 |
| {%- endif %} |
| {%- if user.groups is defined %} |
| - groups: {{ user.groups }} |
| {%- endif %} |
| {%- if user.optional_groups is defined %} |
| - optional_groups: {{ user.optional_groups }} |
| {%- endif %} |
| {%- if user.system is defined and user.system %} |
| - system: True |
| - shell: {{ user.get('shell', '/bin/false') }} |
| {%- else %} |
| - shell: {{ user.get('shell', '/bin/bash') }} |
| {%- endif %} |
| {%- if user.uid is defined and user.uid %} |
| - uid: {{ user.uid }} |
| {%- endif %} |
| {%- if user.unique is defined %} |
| - unique: {{ user.unique }} |
| {%- endif %} |
| {%- if user.maxdays is defined %} |
| - maxdays: {{ user.maxdays }} |
| {%- endif %} |
| {%- if user.mindays is defined %} |
| - mindays: {{ user.mindays }} |
| {%- endif %} |
| {%- if user.warndays is defined %} |
| - warndays: {{ user.warndays }} |
| {%- endif %} |
| {%- if user.inactdays is defined %} |
| - inactdays: {{ user.inactdays }} |
| {%- endif %} |
| - require: {{ requires|yaml }} |
| |
| system_user_home_{{ user.home }}: |
| file.directory: |
| - name: {{ user.home }} |
| - user: {{ name }} |
| - mode: {{ user.get('home_dir_mode', 700) }} |
| - makedirs: true |
| - require: |
| - user: system_user_{{ name }} |
| |
| {%- if user.get('sudo', False) %} |
| |
| /etc/sudoers.d/90-salt-user-{{ name|replace('.', '-') }}: |
| file.managed: |
| - source: salt://linux/files/sudoer |
| - template: jinja |
| - user: root |
| - group: root |
| - mode: 440 |
| - defaults: |
| user_name: {{ name }} |
| - require: |
| - user: system_user_{{ name }} |
| - check_cmd: /usr/sbin/visudo -c -f |
| |
| {%- else %} |
| |
| /etc/sudoers.d/90-salt-user-{{ name|replace('.', '-') }}: |
| file.absent |
| |
| {%- endif %} |
| {%- else %} |
| |
| system_user_{{ name }}: |
| user.absent: |
| - name: {{ name }} |
| - force: {{ user.get('force_delete', 'False') }} |
| |
| system_user_home_{{ user.home }}: |
| file.absent: |
| - name: {{ user.home }} |
| |
| /etc/sudoers.d/90-salt-user-{{ name|replace('.', '-') }}: |
| file.absent |
| |
| {%- endif %} |
| {%- endfor %} |
| {%- endif %} |
| |