about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bundles/containers/items.py19
-rw-r--r--bundles/svtree/items.py77
-rw-r--r--bundles/svtree/metadata.py9
-rw-r--r--bundles/www/items.py21
-rw-r--r--groups.py2
-rw-r--r--items/svc_s6rc.py8
6 files changed, 111 insertions, 25 deletions
diff --git a/bundles/containers/items.py b/bundles/containers/items.py
index eb28c44..ea5b341 100644
--- a/bundles/containers/items.py
+++ b/bundles/containers/items.py
@@ -12,6 +12,10 @@ svc_openrc = {
     },
 }
 
+directories = {
+    "/etc/s6-rc/src/containers/contents.d": { 'purge': True },
+}
+
 files = {
     "/etc/containers/containers.conf.d/10-firewall-driver.conf": {
         "needs": {
@@ -21,18 +25,18 @@ files = {
 
     "/etc/s6-rc/templates/container/+service-srv/run": { "mode": "0755" },
     "/etc/s6-rc/templates/container/+service-log/run": { "mode": "0755" },
-    "/etc/s6-rc/services/default/contents.d/containers": {
+    "/etc/s6-rc/src/default/contents.d/containers": {
         "content_type": "text",
         "content": "",
         "triggers": {
-            "svc_openrc:s6-rc-up:restart",
+            "svc_openrc:svtree:reload",
         },
     },
-    "/etc/s6-rc/services/containers/type": {
+    "/etc/s6-rc/src/containers/type": {
         "content_type": "text",
         "content": "bundle",
         "triggers": {
-            "svc_openrc:s6-rc-up:restart",
+            "svc_openrc:svtree:reload",
         },
     },
 
@@ -48,16 +52,11 @@ repo.libs.gen.add_files_recursive(
     join(repo.path, "bundles", "containers", "files"),
 )
 
-directories = {
-    "/etc/s6-rc/services/containers/contents.d": {}
-}
-
 for container, _ in node.metadata.get("containers", {}).items():
     svc_s6rc[container] = {
         "bundle": "containers",
         "generate": "container",
         "triggers": {
-            "svc_openrc:s6-rc-init:reload",
-            "svc_openrc:s6-rc-up:reload",
+            "svc_openrc:svtree:reload",
         },
     }
diff --git a/bundles/svtree/items.py b/bundles/svtree/items.py
new file mode 100644
index 0000000..809f869
--- /dev/null
+++ b/bundles/svtree/items.py
@@ -0,0 +1,77 @@
+if node.os != "alpine":
+    raise BundleError(f"{node.name}: OS {node.os} is not supported.")
+
+git_deploy = {
+    "/opt/svtree": {
+        'repo': "https://git.sr.ht/~robertgzr/svtree",
+        'rev': "master",
+    },
+}
+
+symlinks = {
+    "/etc/init.d/svtree": {
+        'target': "/opt/svtree/openrc.service",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+    "/etc/s6-rc/templates/service": {
+        'target': "/opt/svtree/templates/service",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+    "/usr/bin/sv": {
+        'target': "/opt/svtree/bin/sv",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+}
+
+directories = {
+    "/opt/svtree": {},
+
+    "/etc/s6-rc/src": { 'purge': True },
+    "/etc/s6-rc/templates": { 'purge': True },
+    '/etc/s6-rc/generate': { 'purge': True },
+
+    "/etc/s6-rc/src/default/contents.d": { 'purge': True },
+
+    "/etc/s6-rc/src/services/contents.d": { 'purge': True },
+    "/etc/s6-rc/services": { 'purge': True },
+}
+
+files = {
+    "/etc/s6-rc/src/default/type": {
+        "content_type": "text",
+        "content": "bundle",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+
+    "/etc/s6-rc/src/services/type": {
+        "content_type": "text",
+        "content": "bundle",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+    "/etc/s6-rc/src/default/contents.d/services": {
+        "content_type": "text",
+        "content": "",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+}
+
+svc_openrc = {
+    "svtree": {
+        'enabled': True,
+        'running': True,
+        'needs': {"symlink:/etc/init.d/svtree"},
+    },
+}
+
+for service, _ in node.metadata.get("services", {}).items():
+    svc_s6rc[service] = {
+        'runlevel': "default",
+        'bundle': "services",
+        'generate': "service",
+    }
diff --git a/bundles/svtree/metadata.py b/bundles/svtree/metadata.py
new file mode 100644
index 0000000..0ddc51b
--- /dev/null
+++ b/bundles/svtree/metadata.py
@@ -0,0 +1,9 @@
+defaults = {
+    "apk": {
+        "packages": {
+            "coreutils": {}, # TODO: make scripts busybox compatible
+            "s6-rc": {},
+            "s6-portable-utils": {},
+        },
+    },
+}
diff --git a/bundles/www/items.py b/bundles/www/items.py
index 7805991..b6f0cfd 100644
--- a/bundles/www/items.py
+++ b/bundles/www/items.py
@@ -3,23 +3,25 @@ if node.os != "alpine":
 
 from os.path import join
 
+directories = {
+    "/etc/s6-rc/src/www/contents.d": { 'purge': True }
+}
+
 files = {
     "/etc/s6-rc/templates/www/+service-srv/run": { "mode": "0755" },
     "/etc/s6-rc/templates/www/+service-log/run": { "mode": "0755" },
-    "/etc/s6-rc/services/default/contents.d/www": {
+    "/etc/s6-rc/src/default/contents.d/www": {
         "content_type": "text",
         "content": "",
         "triggers": {
-            "svc_openrc:s6-rc-init:reload",
-            "svc_openrc:s6-rc-up:restart",
+            "svc_openrc:svtree:reload",
         },
     },
-    "/etc/s6-rc/services/www/type": {
+    "/etc/s6-rc/src/www/type": {
         "content_type": "text",
         "content": "bundle",
         "triggers": {
-            "svc_openrc:s6-rc-init:reload",
-            "svc_openrc:s6-rc-up:restart",
+            "svc_openrc:svtree:reload",
         },
     },
 }
@@ -29,12 +31,11 @@ repo.libs.gen.add_files_recursive(
     join(repo.path, "bundles", "www", "files"),
 )
 
-directories = {
-    "/etc/s6-rc/services/www/contents.d": {}
-}
-
 for www, _ in node.metadata.get("www", {}).items():
     svc_s6rc[www] = {
         "bundle": "www",
         "generate": "www",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
     }
diff --git a/groups.py b/groups.py
index d7d55f0..67c683c 100644
--- a/groups.py
+++ b/groups.py
@@ -15,7 +15,7 @@ groups = {
             "motd",
             "node-exporter",
             "restic-backup",
-            "s6",
+            "svtree",
             "syncthing",
             "tailscale",
             "tgnotify",
diff --git a/items/svc_s6rc.py b/items/svc_s6rc.py
index 429c04a..c827f05 100644
--- a/items/svc_s6rc.py
+++ b/items/svc_s6rc.py
@@ -8,8 +8,8 @@ S6RC_ROOT = "/etc/s6-rc"
 def generate_request_path(template, service) -> str:
     return Path(S6RC_ROOT, "generate", f"{template}.{service}").as_posix()
 
-def service_dependency_path(bundle, service) -> str:
-    return Path(S6RC_ROOT, "services", bundle, "contents.d", service).as_posix()
+def bundle_dependency_path(bundle, service) -> str:
+    return Path(S6RC_ROOT, "src", bundle, "contents.d", service).as_posix()
 
 def have_generate_template(node, template) -> bool:
     template_path = Path(S6RC_ROOT, "templates", template)
@@ -43,7 +43,7 @@ def generate_service(node, template, service) -> bool:
 def is_service_registered(node, bundle, service) -> bool:
     try:
         result = node.run(
-            f"test -f {quote(service_dependency_path(bundle, service))}",
+            f"test -f {quote(bundle_dependency_path(bundle, service))}",
         )
         return result.return_code == 0
     except:
@@ -51,7 +51,7 @@ def is_service_registered(node, bundle, service) -> bool:
 
 def register_service(node, bundle, service) -> bool:
     result = node.run(
-        f"touch {quote(service_dependency_path(bundle, service))}",
+        f"touch {quote(bundle_dependency_path(bundle, service))}",
     )
     return result.return_code == 0