__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