nas-storage.yml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. ---
  2. - hosts: nas
  3. gather_facts: true
  4. become: true
  5. roles:
  6. # - snapraid
  7. # - mergerfs
  8. # - linux-system-roles.firewall
  9. # - linux-system-roles.selinux
  10. - vladgh.samba.server
  11. vars_files:
  12. - "{{ playbook_dir }}/../vars/vault.yaml"
  13. vars:
  14. # don't allow playbook to auto reboot server when changes are made to mountpoints
  15. ALLOW_REBOOT_ON_STORAGE_CHANGE: False
  16. samba_guest_account: "{{ vaulted_media_user }}"
  17. samba_map_to_guest: bad user
  18. samba_netbios_name: "{{ ansible_hostname }}"
  19. samba_load_printers: false
  20. samba_mitigate_cve_2017_7494: false # enabling this breaks share browsing plus this is already mitigated by SELinux
  21. samba_apple_extensions: true
  22. samba_shares_root: /mergerfs
  23. samba_users:
  24. - name: "{{ vaulted_media_user }}"
  25. password: "{{ vaulted_media_password }}"
  26. samba_shares:
  27. - name: Data
  28. path: /mergerfs/public
  29. force_create_mode: '0664'
  30. force_directory_mode: '0775'
  31. guest_ok: "yes"
  32. writable: "yes"
  33. public: "yes"
  34. owner: "{{ vaulted_media_user }}"
  35. group: "{{ vaulted_media_group }}"
  36. - name: private
  37. path: /mergerfs/private
  38. force_create_mode: '0664'
  39. force_directory_mode: '0775'
  40. valid_users: "{{ vaulted_media_user }}"
  41. write_list: "{{ vaulted_media_user }}"
  42. owner: "{{ vaulted_media_user }}"
  43. group: "{{ vaulted_media_group }}"
  44. snapraid_parity_disks:
  45. - path: /mnt/parity1
  46. parity: parity
  47. disk: /dev/mapper/luks-parity1
  48. crypted_disk: /dev/disk/by-id/ata-WDC_WD181KFGX-68CKWN0_PNG3X8PP
  49. opts: _netdev
  50. - path: /mnt/parity2
  51. parity: 2-parity
  52. disk: /dev/mapper/luks-parity2
  53. crypted_disk: /dev/disk/by-id/ata-WDC_WD181KFGX-68CKWN0_PNG3V8TP
  54. opts: _netdev
  55. snapraid_data_disks:
  56. - path: /mnt/disk1
  57. disk: /dev/mapper/luks-disk1
  58. #crypted_disk: /dev/disk/by-id/ata-WDC_WD101EFBX-68B0AN0_VCJW0TDP
  59. crypted_disk: /dev/disk/by-id/ata-WDC_WD122KFBX-68CCHN0_WD-B01N8S9D
  60. opts: _netdev
  61. owner: "{{ vaulted_media_user }}"
  62. group: "{{ vaulted_media_group }}"
  63. - path: /mnt/disk2
  64. disk: /dev/mapper/luks-disk2
  65. #crypted_disk: /dev/disk/by-id/ata-WDC_WD101EFAX-68LDBN0_VCG6YNSN
  66. crypted_disk: /dev/disk/by-id/ata-WDC_WD122KFBX-68CCHN0_WD-B01NABXD
  67. opts: _netdev
  68. owner: "{{ vaulted_media_user }}"
  69. group: "{{ vaulted_media_group }}"
  70. - path: /mnt/disk3
  71. disk: /dev/mapper/luks-disk3
  72. #crypted_disk: /dev/disk/by-id/ata-WDC_WD101EFAX-68LDBN0_VCG6VGPN
  73. crypted_disk: /dev/disk/by-id/ata-WDC_WD122KFBX-68CCHN0_WD-B01N8ERD
  74. opts: _netdev
  75. owner: "{{ vaulted_media_user }}"
  76. group: "{{ vaulted_media_group }}"
  77. - path: /mnt/disk4
  78. disk: /dev/mapper/luks-disk4
  79. #crypted_disk: /dev/disk/by-id/ata-WDC_WD140EFGX-68B0GN0_9LJ4N5JG
  80. crypted_disk: /dev/disk/by-id/ata-WDC_WD122KFBX-68CCHN0_WD-B01N99HD
  81. opts: _netdev
  82. owner: "{{ vaulted_media_user }}"
  83. group: "{{ vaulted_media_group }}"
  84. - path: /mnt/disk5
  85. disk: /dev/mapper/luks-disk5
  86. #crypted_disk: /dev/disk/by-id/ata-WDC_WD140EFGX-68B0GN0_9LJB0KBG
  87. crypted_disk: /dev/disk/by-id/ata-WDC_WD122KFBX-68CCHN0_WD-B01N9P2D
  88. opts: _netdev
  89. owner: "{{ vaulted_media_user }}"
  90. group: "{{ vaulted_media_group }}"
  91. - path: /mnt/disk6
  92. disk: /dev/mapper/luks-disk6
  93. crypted_disk: /dev/disk/by-id/ata-WDC_WD181KFGX-68CKWN0_T0GTUVWF
  94. opts: _netdev
  95. owner: "{{ vaulted_media_user }}"
  96. group: "{{ vaulted_media_group }}"
  97. mergerfs_disks: "{{ snapraid_data_disks }}"
  98. mergerfs_fstab:
  99. - path: /mergerfs
  100. owner: "{{ vaulted_media_user }}"
  101. group: "{{ vaulted_media_group }}"
  102. source: /mnt/disk*
  103. opts:
  104. - allow_other
  105. - minfreespace=10G
  106. - category.create=mfs
  107. - use_ino
  108. - func.getattr=newest
  109. - fsname=mergerfs
  110. - _netdev
  111. - nonempty
  112. selinux_booleans:
  113. - name: samba_share_fusefs
  114. state: on
  115. persistent: yes
  116. firewall:
  117. - service: samba
  118. state: enabled
  119. - service: netbios-ns
  120. state: enabled
  121. server_notifications_topic: "{{ vaulted_server_notifications_topic }}"
  122. pre_tasks:
  123. - name: Create Media Group
  124. group:
  125. name: "{{ vaulted_media_group }}"
  126. gid: "{{ vaulted_media_gid }}"
  127. - name: Create Media User
  128. user:
  129. name: "{{ vaulted_media_user }}"
  130. uid: "{{ vaulted_media_uid }}"
  131. groups: "{{ vaulted_media_group }}"
  132. append: yes
  133. shell: /bin/bash
  134. - name: Ensure disks are configured in /etc/crypttab
  135. lineinfile:
  136. path: /etc/crypttab
  137. regexp: '^{{ item.disk | split("/") | last }}'
  138. line: '{{ item.disk | split("/") | last }} {{ item.crypted_disk }} none {{ item.opts }}'
  139. with_items:
  140. - "{{ snapraid_parity_disks }}"
  141. - "{{ snapraid_data_disks }}"
  142. notify:
  143. - Reboot
  144. - name: Ensure disks are configured in /etc/fstab
  145. mount:
  146. path: "{{ item.path }}"
  147. src: "{{ item.disk }}"
  148. fstype: xfs
  149. opts: "{{ item.opts }}"
  150. state: present
  151. with_items:
  152. - "{{ snapraid_parity_disks }}"
  153. - "{{ snapraid_data_disks }}"
  154. notify:
  155. - Reboot
  156. - name: Ensure mountpoints exist
  157. file:
  158. path: "{{ item.path }}"
  159. state: directory
  160. with_items:
  161. - "{{ snapraid_parity_disks }}"
  162. - "{{ snapraid_data_disks }}"
  163. notify:
  164. - Reboot
  165. - meta: flush_handlers
  166. handlers:
  167. - name: Reboot
  168. reboot:
  169. post_reboot_delay: 120 # wait 2 minutes for disks to fully decrypt and mount themselves
  170. when:
  171. - ALLOW_REBOOT_ON_STORAGE_CHANGE == True