about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2026-02-23 14:13:58 +0100
committerRobert Günzler <r@gnzler.io>2026-02-23 14:13:58 +0100
commit1919fe9b5770fcda40c2c5c9eeef66dbaaa4099a (patch)
treecac3d873abcf18b258f63b09cc3611f88c37416f
parent4fa05f4c140205450f63337626680c65f2879896 (diff)
rewrite s6rc item type to use svtree
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '')
-rw-r--r--items/svc_s6rc.py45
1 files changed, 33 insertions, 12 deletions
diff --git a/items/svc_s6rc.py b/items/svc_s6rc.py
index c827f05..4f98e38 100644
--- a/items/svc_s6rc.py
+++ b/items/svc_s6rc.py
@@ -5,12 +5,15 @@ from bundlewrap.items import Item
 
 S6RC_ROOT = "/etc/s6-rc"
 
+
 def generate_request_path(template, service) -> str:
     return Path(S6RC_ROOT, "generate", f"{template}.{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)
     try:
@@ -21,6 +24,7 @@ def have_generate_template(node, template) -> bool:
     except:
         return False
 
+
 def is_service_generated(node, template, service) -> bool:
     try:
         result = node.run(
@@ -30,16 +34,21 @@ def is_service_generated(node, template, service) -> bool:
     except:
         return False
 
+
 def generate_service(node, template, service) -> bool:
     """
     This doesn't really generate the service from the template. Rather it
     requests the s6-rc-generate target to do it on boot.
     """
     result = node.run(
-        f"touch {quote(generate_request_path(template, service))}",
+        f"""
+        touch {quote(generate_request_path(template, service))}
+        sv reload
+        """
     )
     return result.return_code == 0
 
+
 def is_service_registered(node, bundle, service) -> bool:
     try:
         result = node.run(
@@ -49,27 +58,34 @@ def is_service_registered(node, bundle, service) -> bool:
     except:
         return False
 
+
 def register_service(node, bundle, service) -> bool:
     result = node.run(
-        f"touch {quote(bundle_dependency_path(bundle, service))}",
+        f"""
+        touch {quote(bundle_dependency_path(bundle, service))} &&
+        sv reload
+        """
     )
     return result.return_code == 0
 
+
 def is_service_running(node, service) -> bool:
     try:
         result = node.run(
-            f"s6-rc -v2 -bt 30000 -a list | grep -q {quote(service)}",
+            f"sv ls | grep -q {quote(service)}",
         )
         return result.return_code == 0
     except:
         return False
 
+
 def run_service(node, service) -> bool:
     result = node.run(
-        f"s6-rc -v2 -bt 30000 start {quote(service)}",
+        f"sv up {quote(service)}",
     )
     return result.return_code == 0
 
+
 class SvcS6RC(Item):
     """
     A service managed by s6-rc.
@@ -94,12 +110,15 @@ class SvcS6RC(Item):
 
     def get_canned_actions(self):
         return {
+            "reload": {
+                "command": f"sv reload",
+            },
             "stop": {
-                "command": f"s6-rc -v2 -b -t 30000 stop {quote(self.name)}",
+                "command": f"sv dn {quote(self.name)}",
                 "needed_by": {self.id},
             },
             "restart": {
-                "command": f"s6-rc -v2 -b -t 30000 stop {quote(self.name)} && s6-rc -v2 -b -t 30000 start {quote(self.name)}",
+                "command": f"sv re {quote(self.name)}",
                 "needs": {self.id},
             },
         }
@@ -114,11 +133,14 @@ class SvcS6RC(Item):
     def sdict(self):
         return {
             "running": is_service_running(self.node, self.name),
-            "generated": is_service_generated(self.node,
-                                              self.attributes["generate"],
-                                              self.name) if
-                self.attributes["generate"] != None else False,
-            "registered": is_service_registered(self.node,self.attributes["bundle"], self.name),
+            "generated": (
+                is_service_generated(self.node, self.attributes["generate"], self.name)
+                if self.attributes["generate"] != None
+                else False
+            ),
+            "registered": is_service_registered(
+                self.node, self.attributes["bundle"], self.name
+            ),
         }
 
     def fix(self, status):
@@ -137,4 +159,3 @@ class SvcS6RC(Item):
 
         if status.cdict["running"] != status.sdict["running"]:
             run_service(self.node, self.name)
-