__systemd_unit: add support for masking units
This commit is contained in:
		
					parent
					
						
							
								37b37f6e66
							
						
					
				
			
			
				commit
				
					
						43982f821f
					
				
			
		
					 3 changed files with 33 additions and 8 deletions
				
			
		|  | @ -33,16 +33,24 @@ if [ "${state}" = "absent" ]; then | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| unit_status=$(cat "${__object}/explorer/unit-status") | unit_status=$(cat "${__object}/explorer/unit-status") | ||||||
|  | desired_enablement_state=$(cat "${__object}/parameter/enablement-state") | ||||||
|  | 
 | ||||||
|  | if [ "${current_enablement_state}" = "masked" ] && \ | ||||||
|  |     [ "${desired_enablement_state}" != "masked" ]; then | ||||||
|  |     echo "systemctl unmask ${name}" | ||||||
|  | fi | ||||||
| 
 | 
 | ||||||
| if [ -f "${__object}/parameter/restart" ]; then | if [ -f "${__object}/parameter/restart" ]; then | ||||||
|     if grep -q "^__file/etc/systemd/system/${name}" "${__messages_in}" || \ |     if [ "${desired_enablement_state}" = "masked" ]; then | ||||||
|  |         if [ "${unit_status}" = "active" ]; then | ||||||
|  |             echo "systemctl stop ${name}" | ||||||
|  |         fi | ||||||
|  |     elif grep -q "^__file/etc/systemd/system/${name}" "${__messages_in}" || \ | ||||||
|         [ "${unit_status}" != "active" ]; then |         [ "${unit_status}" != "active" ]; then | ||||||
|         echo "systemctl restart ${name} || true" |         echo "systemctl restart ${name} || true" | ||||||
|     fi |     fi | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| desired_enablement_state=$(cat "${__object}/parameter/enablement-state") |  | ||||||
| 
 |  | ||||||
| if [ "${current_enablement_state}" = "${desired_enablement_state}" ]; then | if [ "${current_enablement_state}" = "${desired_enablement_state}" ]; then | ||||||
|     exit 0 |     exit 0 | ||||||
| fi | fi | ||||||
|  | @ -58,6 +66,9 @@ case "${desired_enablement_state}" in | ||||||
|     disabled) |     disabled) | ||||||
|         echo "systemctl disable ${name}" |         echo "systemctl disable ${name}" | ||||||
|     ;; |     ;; | ||||||
|  |     masked) | ||||||
|  |         echo "systemctl mask ${name}" | ||||||
|  |     ;; | ||||||
|     *) |     *) | ||||||
|         echo "Unsupported unit status: ${desired_enablement_state}" >&2 |         echo "Unsupported unit status: ${desired_enablement_state}" >&2 | ||||||
|         exit 1 |         exit 1 | ||||||
|  |  | ||||||
|  | @ -23,12 +23,14 @@ OPTIONAL PARAMETERS | ||||||
| ------------------- | ------------------- | ||||||
| 
 | 
 | ||||||
| enablement-state | enablement-state | ||||||
|     'enabled' or 'disabled', where: |     'enabled', 'disabled' or 'masked', where: | ||||||
| 
 | 
 | ||||||
|     enabled |     enabled | ||||||
|         enables the unit |         enables the unit | ||||||
|     disabled |     disabled | ||||||
|         disables the unit |         disables the unit | ||||||
|  |     masked | ||||||
|  |         masks the unit | ||||||
| 
 | 
 | ||||||
| source | source | ||||||
|     Path to the config file. If source is '-' (dash), take what was written to |     Path to the config file. If source is '-' (dash), take what was written to | ||||||
|  | @ -38,15 +40,17 @@ state | ||||||
|     'present' or 'absent', defaults to 'present' where: |     'present' or 'absent', defaults to 'present' where: | ||||||
| 
 | 
 | ||||||
|     present |     present | ||||||
|         the unit is installed |         the unit (or its mask) is installed | ||||||
|     absent |     absent | ||||||
|         the unit is stopped, disabled and uninstalled |         The unit is stopped, disabled and uninstalled. If the unit was masked, | ||||||
|  |         the mask is removed. | ||||||
| 
 | 
 | ||||||
| BOOLEAN PARAMETERS | BOOLEAN PARAMETERS | ||||||
| ------------------ | ------------------ | ||||||
| 
 | 
 | ||||||
| restart | restart | ||||||
|     Restart the unit on unit file change or when the unit is inactive. |     Start the unit if it was inactive. Restart the unit if the unit file | ||||||
|  |     changed. Stop the unit if new ``enablement-state`` is ``masked``. | ||||||
| 
 | 
 | ||||||
| MESSAGES | MESSAGES | ||||||
| -------- | -------- | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ fi | ||||||
| name="${__object_id}" | name="${__object_id}" | ||||||
| source=$(cat "${__object}/parameter/source") | source=$(cat "${__object}/parameter/source") | ||||||
| state=$(cat "${__object}/parameter/state") | state=$(cat "${__object}/parameter/state") | ||||||
|  | enablement_state=$(cat "${__object}/parameter/enablement-state") | ||||||
| 
 | 
 | ||||||
| # The unit must be disabled before removing its unit file. The unit file is | # The unit must be disabled before removing its unit file. The unit file is | ||||||
| # therefore removed by gencode-remote of this type, not here. | # therefore removed by gencode-remote of this type, not here. | ||||||
|  | @ -41,8 +42,17 @@ if [ "${source}" = "-" ]; then | ||||||
|     source="${__object}/stdin" |     source="${__object}/stdin" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | unitfile_state="${state}" | ||||||
|  | if [ "${enablement_state}" = "masked" ]; then | ||||||
|  |     # Masking creates a symlink from /etc/systemd/system/<unit> to /dev/null. | ||||||
|  |     # This process fails with "Failed to execute operation: Invalid argument" | ||||||
|  |     # if file /etc/systemd/system/<unit> already exists. We must therefore | ||||||
|  |     # remove it. | ||||||
|  |     unitfile_state="absent" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
| __config_file "/etc/systemd/system/${name}" \ | __config_file "/etc/systemd/system/${name}" \ | ||||||
|     --mode 644 \ |     --mode 644 \ | ||||||
|     --onchange "systemctl daemon-reload" \ |     --onchange "systemctl daemon-reload" \ | ||||||
|     --source "${source}" \ |     --source "${source}" \ | ||||||
|     --state "${state}" |     --state "${unitfile_state}" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue