svn commit: r257827 - head/usr.sbin/sysrc

Devin Teske dteske at FreeBSD.org
Thu Nov 7 23:00:12 UTC 2013


Author: dteske
Date: Thu Nov  7 23:00:11 2013
New Revision: 257827
URL: http://svnweb.freebsd.org/changeset/base/257827

Log:
  Add a `-c' option for `check only' to determine if a value is set
  (get command) or if the current value is the same as what is desired
  (set command). In those cases, the return status is success.
  Otherwise, if the variable is unset (get command) or set to a different
  value that what is desired (set command), returns with error status.
  This is useful for puppet integration as well as everyday scripting.

Modified:
  head/usr.sbin/sysrc/sysrc
  head/usr.sbin/sysrc/sysrc.8

Modified: head/usr.sbin/sysrc/sysrc
==============================================================================
--- head/usr.sbin/sysrc/sysrc	Thu Nov  7 22:52:10 2013	(r257826)
+++ head/usr.sbin/sysrc/sysrc	Thu Nov  7 23:00:11 2013	(r257827)
@@ -45,6 +45,7 @@ SYSRC_VERSION="6.0 Nov-07,2013"
 #
 # Options
 #
+CHECK_ONLY=
 DELETE=
 DESCRIBE=
 IGNORE_UNKNOWNS=
@@ -100,6 +101,8 @@ help()
 	      "Dump a list of all non-default configuration variables."
 	f_err "$optfmt" "-A" \
 	      "Dump a list of all configuration variables (incl. defaults)."
+	f_err "$optfmt" "-c" \
+	      "Check. Return success if no changes needed, else error."
 	f_err "$optfmt" "-d" \
 	      "Print a description of the given variable."
 	f_err "$optfmt" "-D" \
@@ -222,10 +225,11 @@ jail_depend()
 #
 # Process command-line flags
 #
-while getopts aAdDef:Fhij:nNqR:vxX flag; do
+while getopts aAcdDef:Fhij:nNqR:vxX flag; do
 	case "$flag" in
 	a) SHOW_ALL=${SHOW_ALL:-1};;
 	A) SHOW_ALL=2;;
+	c) CHECK_ONLY=1;;
 	d) DESCRIBE=1;;
 	D) RC_CONFS=;;
 	e) SHOW_EQUALS=1;;
@@ -287,6 +291,12 @@ if [ "$DELETE" -a "$SHOW_ALL" ]; then
 fi
 
 #
+# Pre-flight for `-c' command-line option
+#
+[ "$CHECK_ONLY" -a "$SHOW_ALL" ] &&
+	die "$pgm: \`-c' option incompatible with \`-a'/\`-A' options"
+
+#
 # Process `-e', `-n', and `-N' command-line options
 #
 SEP=': '
@@ -312,6 +322,7 @@ if [ "$JAIL" -o "$ROOTDIR" ]; then
 		$( [ "$DELETE" = "2" ] && echo \ -X )
 		$( [ "$SHOW_ALL" = "1" ] && echo \ -a )
 		$( [ "$SHOW_ALL" = "2" ] && echo \ -A )
+		${CHECK_ONLY:+-c}
 		${DESCRIBE:+-d}
 		${SHOW_EQUALS:+-e}
 		${IGNORE_UNKNOWNS:+-i}
@@ -422,7 +433,7 @@ if [ "$SHOW_ALL" ]; then
 		EXCEPT="IFS|EXCEPT|PATH|RC_DEFAULTS|OPTIND|DESCRIBE|SEP"
 		EXCEPT="$EXCEPT|DELETE|SHOW_ALL|SHOW_EQUALS|SHOW_NAME"
 		EXCEPT="$EXCEPT|SHOW_VALUE|SHOW_FILE|SYSRC_VERBOSE|RC_CONFS"
-		EXCEPT="$EXCEPT|pgm|SUCCESS|FAILURE"
+		EXCEPT="$EXCEPT|pgm|SUCCESS|FAILURE|CHECK_ONLY"
 		EXCEPT="$EXCEPT|f_sysrc_desc_awk|f_sysrc_delete_awk"
 
 		#
@@ -515,6 +526,7 @@ fi
 #
 # Process command-line arguments
 #
+costatus=$SUCCESS
 while [ $# -gt 0 ]; do
 	NAME="${1%%=*}"
 
@@ -528,7 +540,7 @@ while [ $# -gt 0 ]; do
 		# first describe, then attempt to set
 		#
 
-		if [ "$SYSRC_VERBOSE" ]; then
+		if [ "$SYSRC_VERBOSE" -a ! "$CHECK_ONLY" ]; then
 			file=$( f_sysrc_find "$NAME" )
 			[ "$file" = "$RC_DEFAULTS" -o ! "$file" ] && \
 				file=$( f_sysrc_get 'rc_conf_files%%[$IFS]*' )
@@ -546,6 +558,20 @@ while [ $# -gt 0 ]; do
 		fi
 
 		#
+		# If `-c' is passed, simply compare and move on
+		#
+		if [ "$CHECK_ONLY" ]; then
+			if ! IGNORED=$( f_sysrc_get "$NAME?" ); then
+				costatus=$FAILURE
+			else
+				value=$( f_sysrc_get "$NAME" )
+				[ "$value" = "${1#*=}" ] || costatus=$FAILURE
+			fi
+			shift 1
+			continue
+		fi
+
+		#
 		# If `-N' is passed, simplify the output
 		#
 		if [ ! "$SHOW_VALUE" ]; then
@@ -572,9 +598,16 @@ while [ $# -gt 0 ]; do
 		fi
 		;;
 	*)
-		if ! IGNORED="$( f_sysrc_get "$NAME?" )"; then
-			[ "$IGNORE_UNKNOWNS" ] \
-				|| echo "$pgm: unknown variable '$NAME'"
+		if ! IGNORED=$( f_sysrc_get "$NAME?" ); then
+			[ "$IGNORE_UNKNOWNS" ] ||
+				echo "$pgm: unknown variable '$NAME'"
+			shift 1
+			costatus=$FAILURE
+			continue
+		fi
+
+		# The above check told us what we needed for `-c'
+		if [ "$CHECK_ONLY" ]; then
 			shift 1
 			continue
 		fi
@@ -623,3 +656,5 @@ while [ $# -gt 0 ]; do
 	esac
 	shift 1
 done
+
+[ ! "$CHECK_ONLY" ] || exit $costatus

Modified: head/usr.sbin/sysrc/sysrc.8
==============================================================================
--- head/usr.sbin/sysrc/sysrc.8	Thu Nov  7 22:52:10 2013	(r257826)
+++ head/usr.sbin/sysrc/sysrc.8	Thu Nov  7 23:00:11 2013	(r257827)
@@ -32,13 +32,13 @@
 .Nd safely edit system rc files
 .Sh SYNOPSIS
 .Nm
-.Op Fl dDeFhinNqvx
+.Op Fl cdDeFhinNqvx
 .Op Fl f Ar file
 .Op Fl j Ar jail | Fl R Ar dir
 .Ar name Ns Op = Ns Ar value
 .Ar ...
 .Nm
-.Op Fl dDeFhinNqvx
+.Op Fl cdDeFhinNqvx
 .Op Fl f Ar file
 .Op Fl j Ar jail | Fl R Ar dir
 .Fl a | A
@@ -57,6 +57,12 @@ Dump a list of all non-default configura
 .It Fl A
 Dump a list of all configuration variables
 .Pq incl. defaults .
+.It Fl c
+Check if the value will change when assigning a new value.
+If verbose
+.Pq see Dq Fl v
+prints a message stating whether a change would occur.
+Exits with success if no change is necessary, else returns error status.
 .It Fl d
 Print a description of the given variable.
 .It Fl D


More information about the svn-src-all mailing list