Sophie

Sophie

distrib > Mageia > 6 > armv5tl > by-pkgid > 2fe95e707bab77d23c8ffc33763501d3 > files > 1

drbd-utils-8.9.1-0.5.mga6.armv5tl.rpm

#
# /etc/bash_completion.d/drbdadm
#
# Bash completion for the DRBD top-level management application, drbdadm.
#
# If you have bash completion enabled, this module will
#
# - provide tab completion for drbdadm sub-commands (up, down, primary,
#   secondary etc.);
#
# - try to detect your current resource state and provide appropriate
#   command completion for the sub-command you provided. For example,
#   when if you have entered the "primary" sub-command, it will list
#   only those resources that are currently in the Secondary role;
#
# - differentiate between stacked and unstacked resources.
#
# This module does NOT guarantee that the DRBD state engine will in
# fact agree to do what you ask it to. For example, resources that are
# currently Primary and not connected are not excluded from the
# completion list for the "detach" sub-command.
#
# Finally, this module is only capable of parsing resources correctly
# if you are using the default location for your DRBD configuration
# file (/etc/drbd.conf).

__drbdadm_all_resources() {
	# Detects all resources currently listed in drbd.conf
	local resources="$(${DRBDADM} sh-resources) all"
	COMPREPLY=( $(compgen -W "$resources" -- "$current") )
}

__drbdadm_resources_by_status() {
	# Detects only those resources that match a particular status
	local status_type="$1"
	shift 1
	local status_filter="$*"
	local resources="$(${DRBDADM} sh-resources)"
	local filtered_resources
	local res
	for res in $resources; do
		local resource_status="$(${DRBDADM} $status_type $res 2>/dev/null)"
		# In case of multiple volumes, consider only the first line
		set -- $resource_status
		resource_status=$1
		local i
		for i in $status_filter; do
			if [ "${resource_status%%/*}" = $i ]; then
				filtered_resources="$filtered_resources $res"
			fi
		done
	done
	COMPREPLY=( $(compgen -W "$filtered_resources" -- "$current") )
}

__drbdadm_commands() {
	# Lists drbdadm sub-commands
	COMPREPLY=( $(compgen -W "$drbdadm_command_list" -- "$current") )
}

__drbdadm_options() {
	# Lists global drbdadm options
	local options='-d --dry-run -v --verbose -S --stacked -t --config-to-test'
	COMPREPLY=( $(compgen -W "$options" -- "$current") )
}

__drbdadm_subcmd_options() {
	local subcmd="$1"
	local options=($(drbdadm help $subcmd | sed -e '1,/OPTIONS FOR/ d;/^$/,$ d;s/  \(--[a-z-]*\).*/\1/'))
	local filtered
	local o have
	for o in ${options[@]}; do
		for have in ${COMP_WORDS[@]}; do
			[[ $o = "$have" ]] && continue 2
		done
		filtered="$filtered $o"
	done
	COMPREPLY=( $(compgen -W "$filtered" -- "$current") )
}

_drbdadm() {
	local DRBDADM="env DRBD_DONT_WARN_ON_VERSION_MISMATCH=1 ${COMP_WORDS[0]}"
	local drbdadm_command_list=' attach disk-options detach connect net-options disconnect up resource-options down primary secondary invalidate invalidate-remote outdate verify pause-sync resume-sync resize adjust wait-connect role cstate dstate dump wait-connect wait-con-int create-md dump-md wipe-md get-gi show-gi help apply-al hidden-commands '

	# Redefine the drbdadm we use in __drbdadm_all_resources and
	# __drbdadm_resources_by_status, if running in stacked mode
	case "$COMP_LINE " in
	*" -S "*|*" --stacked "*)
		DRBDADM="$DRBDADM --stacked"
		;;
	esac

	local current previous
	# The word currently being evaluated for completion
	current=${COMP_WORDS[COMP_CWORD]}
	# The word that precedes the currently-evaluated one
	previous=${COMP_WORDS[COMP_CWORD-1]}

	case "$previous" in
		drbdadm)
			case "$current" in
				-*)
					__drbdadm_options
					;;
				*)
					__drbdadm_commands
					;;
			esac
			;;
		primary)
			__drbdadm_resources_by_status "role" "Secondary"
			;;
		secondary)
			__drbdadm_resources_by_status "role" "Primary"
			;;
		detach|disk-options)
			__drbdadm_resources_by_status "dstate" "UpToDate" "Inconsistent" "Outdated"
			;;
		outdate)
			__drbdadm_resources_by_status "dstate" "UpToDate"
			;;
		attach|apply-al)
			__drbdadm_resources_by_status "dstate" "Diskless" "Unconfigured"
			;;
		connect)
			__drbdadm_resources_by_status "cstate" "StandAlone" "Unconfigured"
			;;
		invalidate-remote)
			__drbdadm_resources_by_status "cstate" "Connected"
			;;
		disconnect|net-options)
			__drbdadm_resources_by_status "cstate" "Connected" "WFConnection" "VerifyT" "VerifyS"
			;;
		verify)
			__drbdadm_resources_by_status "cstate" "Connected"
			;;
		pause-sync)
			__drbdadm_resources_by_status "cstate" "SyncSource" "SyncTarget"
			;;
		resume-sync)
			__drbdadm_resources_by_status "cstate" "PausedSyncS" "PausedSyncT"
			;;
		*)
			if (( COMP_CWORD > 2 )); then
				local subcmd
				subcmd=${COMP_WORDS[1]}
				case "$drbdadm_command_list" in
				    *" $subcmd "*)
					__drbdadm_subcmd_options $subcmd
					;;
				esac
			else
				__drbdadm_all_resources
			fi
			;;
	esac
}

complete -o default -F _drbdadm drbdadm