Page MenuHomeDevCentral

No OneTemporary

diff --git a/roles/devserver/webserver-home/files/setup-web-home.py b/roles/devserver/webserver-home/files/setup-web-home.py
index b90356b..c2fae7e 100755
--- a/roles/devserver/webserver-home/files/setup-web-home.py
+++ b/roles/devserver/webserver-home/files/setup-web-home.py
@@ -1,75 +1,68 @@
#!/usr/bin/env python3
# -------------------------------------------------------------
# Setup web home
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Nasqueron
# Description: Create folder and symlink for public_html
# License: BSD-2-Clause
# -------------------------------------------------------------
import os
-import shutil
import sys
# -------------------------------------------------------------
# Web setup
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def is_clean(username):
return not os.path.exists(f"/var/home-wwwroot/{username}") and not os.path.exists(
f"/home/{username}/public_html"
)
def is_valid_setup(username):
return (
os.path.exists(f"/var/home-wwwroot/{username}")
and not os.path.islink(f"/var/home-wwwroot/{username}")
and os.path.islink(f"/home/{username}/public_html")
and os.readlink(f"/home/{username}/public_html")
== f"/var/home-wwwroot/{username}"
)
-def setup(username):
- os.mkdir(f"/var/home-wwwroot/{username}", mode=0o755)
- shutil.chown(f"/var/home-wwwroot/{username}", user=username, group="web")
- os.symlink(f"/var/home-wwwroot/{username}", f"/home/{username}/public_html")
-
-
# -------------------------------------------------------------
# Application entry point
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def run(username):
if is_valid_setup(username):
print("Setup is already done and looks correct.", file=sys.stderr)
- sys.exit(4)
+ sys.exit(0)
if not is_clean(username):
print(
"Directories exist but aren't correct, check them manually.",
file=sys.stderr,
)
sys.exit(2)
- try:
- setup(username)
- except OSError as e:
- print(e, file=sys.stderr)
- sys.exit(8)
+ print(
+ "Nothing detected., apply Salt state roles/devserver/webserver-home to create it.",
+ file=sys.stderr,
+ )
+ sys.exit(4)
if __name__ == "__main__":
argc = len(sys.argv)
if argc < 2:
print(f"Usage: {sys.argv[0]} <username>", file=sys.stderr)
sys.exit(1)
run(sys.argv[1])
diff --git a/roles/devserver/webserver-home/init.sls b/roles/devserver/webserver-home/init.sls
index aad77d0..1631296 100644
--- a/roles/devserver/webserver-home/init.sls
+++ b/roles/devserver/webserver-home/init.sls
@@ -1,36 +1,94 @@
# -------------------------------------------------------------
# Salt — Provision a development server
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Nasqueron
# License: Trivial work, not eligible to copyright
# -------------------------------------------------------------
{% from "map.jinja" import dirs with context %}
# -------------------------------------------------------------
# Home directories
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/var/home-wwwroot:
file.directory:
- mode: 711
- group: web
{{ dirs.bin }}/setup-web-home:
file.managed:
- source: salt://roles/devserver/webserver-home/files/setup-web-home.py
- mode: 755
+# -------------------------------------------------------------
+# ZFS datasets
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+{% if salt["node.has"]("zfs:pool") %}
+
+{% set tank = salt["node.get"]("zfs:pool") %}
+{% set users = salt["forest.get_users"]() %}
+
+{{ tank }}/var/home-wwwroot:
+ zfs.filesystem_present:
+ - properties:
+ mountpoint: /var/home-wwwroot
+ compression: zstd
+
+zfs_webserver_home_permissions_sets:
+ cmd.run:
+ - name: |
+ zfs allow -s @local allow,clone,create,diff,hold,mount,promote,receive,release,rollback,snapshot,send {{ tank }}/var/home-wwwroot
+ zfs allow -s @descendent allow,clone,create,diff,destroy,hold,mount,promote,receive,release,rename,rollback,snapshot,send {{ tank }}/var/home-wwwroot
+ touch /var/home-wwwroot/.zfs-permissions-set
+ - creates: /var/home-wwwroot/.zfs-permissions-set
+
+{% for username in users %}
+{% set webserver_home_directory = tank + "/var/home-wwwroot/" + username %}
+
+{{ webserver_home_directory }}:
+ zfs.filesystem_present:
+ - properties:
+ compression: zstd
+ "com.sun:auto-snapshot": "true"
+
+zfs_permissions_webserver_home_local_{{ username }}:
+ cmd.run:
+ - name: zfs allow -lu {{ username }} @local {{ webserver_home_directory }}
+ - onchanges:
+ - zfs: {{ webserver_home_directory }}
+
+zfs_permissions_webserver_home_descendant_{{ username }}:
+ cmd.run:
+ - name: zfs allow -du {{ username }} @descendent {{ webserver_home_directory }}
+ - onchanges:
+ - zfs: {{ webserver_home_directory }}
+
+/var/home-wwwroot/{{ username }}:
+ file.directory:
+ - user: {{ username }}
+ - group: web
+ - dir_mode: 755
+
+/home/{{ username }}/public_html:
+ file.symlink:
+ - target: /var/home-wwwroot/{{ username }}
+
+{% endfor %}
+
+{% endif %}
+
# -------------------------------------------------------------
# Default vhost
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ dirs.etc }}/nginx/vhosts/001-server.conf:
file.managed:
- source: salt://roles/devserver/webserver-home/files/001-server.conf
- mode: 644
- template: jinja
- context:
hostname: {{ grains.host }}
fqdn: {{ grains.fqdn }}
ips: "{{ salt["node.get_all_ips"]() }}"

File Metadata

Mime Type
text/x-diff
Expires
Tue, Aug 18, 14:40 (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4004960
Default Alt Text
(5 KB)

Event Timeline