Saltstack Official Users Formula
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 line
3.1KB

  1. include:
  2. - users.sudo
  3. {% for name, user in pillar.get('users', {}).items() %}
  4. {% if user == None %}
  5. {% set user = {} %}
  6. {% endif %}
  7. {% set home = user.get('home', "/home/%s" % name) %}
  8. {% for group in user.get('groups', []) %}
  9. {{ group }}_group:
  10. group:
  11. - name: {{ group }}
  12. - present
  13. {% endfor %}
  14. {{ name }}_user:
  15. file.directory:
  16. - name: {{ home }}
  17. - user: {{ name }}
  18. - group: {{ name }}
  19. - mode: 0755
  20. - require:
  21. - user: {{ name }}
  22. - group: {{ name }}
  23. group.present:
  24. - name: {{ name }}
  25. - gid: {{ user['uid'] }}
  26. user.present:
  27. - name: {{ name }}
  28. - home: {{ home }}
  29. - shell: {{ user.get('shell', '/bin/bash') }}
  30. {% if 'uid' in user -%}
  31. - uid: {{ user['uid'] }}
  32. {% endif %}
  33. - gid_from_name: True
  34. {% if 'fullname' in user %}
  35. - fullname: {{ user['fullname'] }}
  36. {% endif %}
  37. - groups:
  38. - {{ name }}
  39. {% for group in user.get('groups', []) %}
  40. - {{ group }}
  41. {% endfor %}
  42. - require:
  43. - group: {{ name }}
  44. {% for group in user.get('groups', []) %}
  45. - group: {{ group }}
  46. {% endfor %}
  47. user_keydir_{{ name }}:
  48. file.directory:
  49. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh
  50. - user: {{ name }}
  51. - group: {{ name }}
  52. - makedirs: True
  53. - mode: 744
  54. - require:
  55. - user: {{ name }}
  56. - group: {{ name }}
  57. {% for group in user.get('groups', []) %}
  58. - group: {{ group }}
  59. {% endfor %}
  60. {% if 'privkey' in user %}
  61. user_{{ name }}_private_key:
  62. file.managed:
  63. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh/id_rsa
  64. - user: {{ name }}
  65. - group: {{ name }}
  66. - mode: 600
  67. - source: salt://keys/{{ user['privkey'] }}
  68. - require:
  69. - user: {{ name }}_user
  70. {% for group in user.get('groups', []) %}
  71. - group: {{ group }}_group
  72. {% endfor %}
  73. user_{{ name }}_public_key:
  74. file.managed:
  75. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh/id_rsa.pub
  76. - user: {{ name }}
  77. - group: {{ name }}
  78. - mode: 644
  79. - source: salt://keys/{{ user['privkey'] }}.pub
  80. - require:
  81. - user: {{ name }}_user
  82. {% for group in user.get('groups', []) %}
  83. - group: {{ group }}_group
  84. {% endfor %}
  85. {% endif %}
  86. {% if 'ssh_auth' in user %}
  87. {% for auth in user['ssh_auth'] %}
  88. ssh_auth_{{ name }}_{{ loop.index0 }}:
  89. ssh_auth.present:
  90. - user: {{ name }}
  91. - name: {{ auth }}
  92. - require:
  93. - file: {{ name }}_user
  94. - user: {{ name }}_user
  95. {% endfor %}
  96. {% endif %}
  97. {% if 'sudouser' in user and user['sudouser'] %}
  98. sudoer-{{ name }}:
  99. file.managed:
  100. - name: /etc/sudoers.d/{{ name }}
  101. - user: root
  102. - group: root
  103. - mode: '0440'
  104. /etc/sudoers.d/{{ name }}:
  105. file.append:
  106. - text:
  107. - "{{ name }} ALL=(ALL) NOPASSWD: ALL"
  108. - require:
  109. - file: sudoer-defaults
  110. - file: sudoer-{{ name }}
  111. {% else %}
  112. /etc/sudoers.d/{{ name }}:
  113. file.absent:
  114. - name: /etc/sudoers.d/{{ name }}
  115. {% endif %}
  116. {% endfor %}
  117. {% for user in pillar.get('absent_users', []) %}
  118. {{ user }}:
  119. user.absent
  120. /etc/sudoers.d/{{ user }}:
  121. file.absent:
  122. - name: /etc/sudoers.d/{{ user }}
  123. {% endfor %}