From cdb862e96827a4c68aaaa71850dddb2a6e2104c0 Mon Sep 17 00:00:00 2001 From: Shane Poage Date: Fri, 21 Aug 2015 15:42:25 -0500 Subject: [PATCH] Added feature to allow syncing arbitrary sets of files per user. --- README.rst | 5 +++++ pillar.example | 7 +++++++ users/files/user/.keep | 0 users/init.sls | 9 ++++++++- users/user_files.sls | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 users/files/user/.keep create mode 100644 users/user_files.sls diff --git a/README.rst b/README.rst index 84c9a9f..4d784d7 100644 --- a/README.rst +++ b/README.rst @@ -46,3 +46,8 @@ True in pillar per user. Defaults to False Ensures the vimrc file exists in the users home directory. Set manage_vimrc: True in pillar per user. Defaults to False This depends on the vim-formula to be installed + +``users.user_files`` +--------------- + +Permits the abitrary management of files. See pillar.example for configuration details. diff --git a/pillar.example b/pillar.example index 022b3f7..2413aaa 100644 --- a/pillar.example +++ b/pillar.example @@ -84,6 +84,13 @@ users: 44444444 55555555 + user_files: + enabled: True + # 'source' allows you to define an arbitrary directory to sync, useful to use for default files. + # should be a salt fileserver path either with or without 'salt://' + # if not present, it defaults to 'salt://users/files/user/ + source: users/files/default + ## Absent user cuser: absent: True diff --git a/users/files/user/.keep b/users/files/user/.keep new file mode 100644 index 0000000..e69de29 diff --git a/users/init.sls b/users/init.sls index 47e3b36..9c52855 100644 --- a/users/init.sls +++ b/users/init.sls @@ -2,6 +2,7 @@ {% from "users/map.jinja" import users with context %} {% set used_sudo = [] %} {% set used_googleauth = [] %} +{% set used_user_files = [] %} {%- for name, user in pillar.get('users', {}).items() if user.absent is not defined or not user.absent %} @@ -14,9 +15,12 @@ {%- if 'google_auth' in user %} {%- do used_googleauth.append(1) %} {%- endif %} +{%- if pillar.get('users:' + name + ':user_files:enabled', False) %} +{%- do used_user_files.append(1) %} +{%- endif %} {%- endfor %} -{%- if used_sudo or used_googleauth %} +{%- if used_sudo or used_googleauth or used_user_files %} include: {%- if used_sudo %} - users.sudo @@ -24,6 +28,9 @@ include: {%- if used_googleauth %} - users.googleauth {%- endif %} +{%- if used_user_files %} + - users.user_files +{%- endif %} {%- endif %} {% for name, user in pillar.get('users', {}).items() diff --git a/users/user_files.sls b/users/user_files.sls new file mode 100644 index 0000000..990c9b3 --- /dev/null +++ b/users/user_files.sls @@ -0,0 +1,36 @@ +{% from "users/map.jinja" import users with context -%} + +include: + - users + +{%- for username, user in pillar.get('users', {}).items() if (user.absent is not defined or not user.absent) -%} +{%- set user_files = pillar.get('users:' + username + ':user_files', {'enabled': False}) -%} + +{%- if user_files.enabled -%} +{%- set user_group = pillar.get(('users:' + username + ':prime_group:name'), username) -%} + +{%- if user_files.source is defined -%} +{%- if user_files.source.startswith('salt://') -%} +{%- set file_source = user_files.source -%} +{%- else -%} +{%- set file_source = ('salt://' + user.user_files.source) -%} +{%- endif -%} +{%- else -%} +{%- set file_source = ('salt://users/files/user/' + username) -%} +{%- endif -%} + +users_userfiles_{{ username }}_recursive: + file.recurse: + - name: {{ user.home }} + - source: {{ file_source }} + - user: {{ username }} + - group: {{ user_group }} + - clean: False + - include_empty: True + - keep_symlinks: True + - require: + - user: users_{{ username }}_user + - file: users_{{ username }}_user + +{% endif -%} +{% endfor -%}