diff options
| author | Robert Günzler <r@gnzler.io> | 2026-02-23 14:13:58 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-02-23 14:13:58 +0100 |
| commit | 1919fe9b5770fcda40c2c5c9eeef66dbaaa4099a (patch) | |
| tree | cac3d873abcf18b258f63b09cc3611f88c37416f /items | |
| parent | 4fa05f4c140205450f63337626680c65f2879896 (diff) | |
rewrite s6rc item type to use svtree
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'items')
| -rw-r--r-- | items/svc_s6rc.py | 45 |
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) - |