Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F44337790
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rOPS Nasqueron Operations
Attached
Detach File
Event Timeline
Log In to Comment