Merge pull request 'Add ability to use pre-existing systemd units and stop them too' (#6) from rei/systemd_default into develop
Reviewed-on: https://bics.ga/reivilibre/scone/pulls/6
This commit is contained in:
		
						commit
						b54b4a972a
					
				| @ -18,7 +18,7 @@ | ||||
| from scone.default.steps.systemd_steps import ( | ||||
|     cook_systemd_daemon_reload, | ||||
|     cook_systemd_enable, | ||||
|     cook_systemd_start, | ||||
|     cook_systemd_start, cook_systemd_stop, | ||||
| ) | ||||
| from scone.head.head import Head | ||||
| from scone.head.kitchen import Kitchen, Preparation | ||||
| @ -42,15 +42,27 @@ class SystemdUnit(Recipe): | ||||
| 
 | ||||
|         unit = check_type(args.get("unit"), str) | ||||
|         self.unit_name = unit if "." in unit else unit + ".service" | ||||
|         self.at = check_type(args.get("at"), str) | ||||
|         already_installed = check_type(args.get("already_installed", False), bool) | ||||
|         self.at = check_type_opt(args.get("at", None), str) | ||||
| 
 | ||||
|         if not (already_installed or self.at): | ||||
|             # already_installed is for when the unit already exists on the system | ||||
|             # and is not created by scone. | ||||
|             raise ValueError( | ||||
|                 "Must supply either already_installed = true or " | ||||
|                 f"at = /path/to/{self.unit_name}" | ||||
|             ) | ||||
| 
 | ||||
|         self.enabled = check_type_opt(args.get("enabled"), bool) | ||||
|         self.restart_on = check_type_opt(args.get("restart_on"), list) | ||||
|         self.started = check_type_opt(args.get("started"), bool) | ||||
| 
 | ||||
|     def prepare(self, preparation: Preparation, head: Head) -> None: | ||||
|         super().prepare(preparation, head) | ||||
|         # TODO(potential future): preparation.provides("systemd-unit", self.unit_name) | ||||
|         preparation.needs("file", self.at) | ||||
|         if self.at: | ||||
|             # TODO(potential future): preparation.provides("systemd-unit", | ||||
|             #  self.unit_name) | ||||
|             preparation.needs("file", self.at) | ||||
| 
 | ||||
|     async def cook(self, kitchen: Kitchen) -> None: | ||||
|         if self.enabled is not None or self.started is not None: | ||||
| @ -62,3 +74,5 @@ class SystemdUnit(Recipe): | ||||
|         if self.started is not None: | ||||
|             if self.started: | ||||
|                 await cook_systemd_start(kitchen, self.unit_name) | ||||
|             else: | ||||
|                 await cook_systemd_stop(kitchen, self.unit_name) | ||||
|  | ||||
| @ -50,3 +50,12 @@ async def cook_systemd_start(kitchen: Kitchen, unit_name: str): | ||||
| 
 | ||||
|     if result.exit_code != 0: | ||||
|         raise RuntimeError(f"Failed to start {unit_name}: {result.stderr.decode()}") | ||||
| 
 | ||||
| 
 | ||||
| async def cook_systemd_stop(kitchen: Kitchen, unit_name: str): | ||||
|     result = await kitchen.ut1areq( | ||||
|         SimpleExec(["systemctl", "stop", unit_name], "/",), SimpleExec.Result, | ||||
|     ) | ||||
| 
 | ||||
|     if result.exit_code != 0: | ||||
|         raise RuntimeError(f"Failed to stop {unit_name}: {result.stderr.decode()}") | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user