From cdb862e96827a4c68aaaa71850dddb2a6e2104c0 Mon Sep 17 00:00:00 2001 From: Shane Poage Date: Fri, 21 Aug 2015 15:42:25 -0500 Subject: [PATCH 1/2] 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 -%} From b986e1e7f2c86098c30c2700acaebc83c5b9c880 Mon Sep 17 00:00:00 2001 From: Shane Poage Date: Fri, 21 Aug 2015 15:52:36 -0500 Subject: [PATCH 2/2] Skips user if it's enabled without a specified source, and their directory does not exist. --- users/init.sls | 2 +- users/user_files.sls | 32 ++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/users/init.sls b/users/init.sls index 9c52855..a50f13a 100644 --- a/users/init.sls +++ b/users/init.sls @@ -15,7 +15,7 @@ {%- if 'google_auth' in user %} {%- do used_googleauth.append(1) %} {%- endif %} -{%- if pillar.get('users:' + name + ':user_files:enabled', False) %} +{%- if salt['pillar.get']('users:' ~ name ~ ':user_files:enabled', False) %} {%- do used_user_files.append(1) %} {%- endif %} {%- endfor %} diff --git a/users/user_files.sls b/users/user_files.sls index 990c9b3..66363ae 100644 --- a/users/user_files.sls +++ b/users/user_files.sls @@ -3,22 +3,29 @@ 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}) -%} - +{% set userfile_dirs = salt['cp.list_master_dirs'](prefix='users/files/user/') -%} +{%- for username, user in salt['pillar.get']('users', {}).items() if (user.absent is not defined or not user.absent) -%} +{%- set user_files = salt['pillar.get'](('users:' ~ username ~ ':user_files'), {'enabled': False}) -%} +{%- set user_group = salt['pillar.get'](('users:' ~ username ~ ':prime_group:name'), username) -%} {%- 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 -%} + {%- if user_files.source.startswith('salt://') -%} + {%- set file_source = user_files.source -%} + {%- else -%} + {%- set file_source = ('salt://' ~ user.user_files.source) -%} + {%- endif -%} + {%- set skip_user = False -%} {%- else -%} -{%- set file_source = ('salt://' + user.user_files.source) -%} -{%- endif -%} -{%- else -%} -{%- set file_source = ('salt://users/files/user/' + username) -%} + {%- if ('users/files/user/' ~ username) in userfile_dirs -%} + {%- set file_source = ('salt://users/files/user/' ~ username) -%} + {%- set skip_user = False -%} + {%- else -%} + {%- set skip_user = True -%} + {%- endif -%} {%- endif -%} +{%- if not skip_user %} users_userfiles_{{ username }}_recursive: file.recurse: - name: {{ user.home }} @@ -31,6 +38,7 @@ users_userfiles_{{ username }}_recursive: - require: - user: users_{{ username }}_user - file: users_{{ username }}_user - {% endif -%} -{% endfor -%} + +{%- endif -%} +{%- endfor -%}