From owner-svn-src-head@FreeBSD.ORG Thu Nov 7 23:00:12 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id CE555E85; Thu, 7 Nov 2013 23:00:12 +0000 (UTC) (envelope-from dteske@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id AD1EA24CB; Thu, 7 Nov 2013 23:00:12 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rA7N0Cm6095422; Thu, 7 Nov 2013 23:00:12 GMT (envelope-from dteske@svn.freebsd.org) Received: (from dteske@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rA7N0CWT095415; Thu, 7 Nov 2013 23:00:12 GMT (envelope-from dteske@svn.freebsd.org) Message-Id: <201311072300.rA7N0CWT095415@svn.freebsd.org> From: Devin Teske Date: Thu, 7 Nov 2013 23:00:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r257827 - head/usr.sbin/sysrc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Nov 2013 23:00:12 -0000 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