dahdi_span_assignments compare, similar to dahdi_span_types compare.

Signed-off-by: Tzafrir Cohen <[email protected]>
---
 dahdi_span_assignments       | 45 ++++++++++++++++++++++++++++++++++++
 doc/dahdi_span_assignments.8 | 22 +++++++++++++++++-
 2 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/dahdi_span_assignments b/dahdi_span_assignments
index 9b4f305..5387c81 100755
--- a/dahdi_span_assignments
+++ b/dahdi_span_assignments
@@ -67,6 +67,7 @@ usage() {
        echo >&2 "         remove     - unassign spans"
        echo >&2 "         list       - human-readable list of all spans"
        echo >&2 "         matched    - found spans matched in configuration"
+       echo >&2 "         compare    - show config values that differ from 
system"
        echo >&2 "         unmatched  - found spans not matched in 
configuration"
        echo >&2 "         dumpconfig - dump current state as new configuration"
        echo >&2 ""
@@ -85,6 +86,8 @@ if [ $? != 0 ]; then
        usage
 fi
 
+compare=false
+
 # Note the quotes around `$TEMP': they are essential!
 eval set -- "$TEMP"
 
@@ -233,6 +236,10 @@ filter_conf() {
        sed -e 's/#.*//' -e '/^[ \t]*$/d' "$DAHDISASSIGNEDSPANSCONF"
 }
 
+dump_compare() {
+       echo "$*" >> "$compare_results_file"
+}
+
 assign_device_spans() {
        device="$1"
        for s in $spanspecs
@@ -244,6 +251,28 @@ assign_device_spans() {
                        echo "(dry-run) assign $device: $s"
                        continue
                fi
+
+               if [ "$compare" = 'true' ]; then
+                       spanno_file=$(grep -l "^$local_spanno\$" 
"$device/span-"*"/local_spanno")
+                       if [ -f "$spanno_file" ]; then
+                               # Exactly one file matched
+                               cur_spanno=$(echo "$spanno_file" | sed -e 
's,/local_spanno,,' -e 's,^.*/span-,,')
+                               cur_basechan=`cat 
$device/span-$cur_spanno/basechan`
+                               if [ "$spanno" = "$cur_spanno" ]; then
+                                       
cur_s="$local_spanno:$spanno:$cur_basechan"
+                                       if [ "$s" != "$cur_s" ]; then
+                                               dump_compare "$device: $s: 
current settings: $cur_s"
+                                       fi
+                               else
+                                       
cur_s="$local_spanno:$cur_spanno:$cur_basechan"
+                                       dump_compare "$device: $s: modified 
settings: $cur_s"
+                               fi
+                       else
+                               dump_compare "$device: $s: not set"
+                       fi
+                       continue
+               fi
+
                if [ -d "$span" ]; then
                        span_local_spanno=`cat "$span/local_spanno"`
                        if [ "$span_local_spanno" != "$local_spanno" ]; then
@@ -252,6 +281,7 @@ assign_device_spans() {
                        echo >&2 "$device [$local_spanno] already assigned to 
span $spanno. Skipping..."
                        continue
                fi
+
                echo >&2 "assign $device: $s"
                if ! echo "$s" > "$device/assign_span"; then
                        echo >&2 "$0: failed assigning '$s' to '$device'"
@@ -300,6 +330,16 @@ assign_devices() {
        do
                match_device "$device"
        done
+       if [ "$compare" = 'true' ]; then
+               if [ -s "$compare_results_file" ]; then
+                       echo "# Some spans are not configured the same as file "
+                       cat "$compare_results_file"
+                       rm -f "$compare_results_file"
+                       exit 5
+               fi
+               rm -f "$compare_results_file"
+               exit 0
+       fi
 }
 
 auto_assign_devices() {
@@ -392,6 +432,11 @@ matched)
 unmatched)
        list_devices "unmatched"
        ;;
+compare)
+       compare=true
+       compare_results_file=`mktemp`
+       assign_devices
+       ;;
 *)
        echo >&2 "Bad action='$action'"
        usage
diff --git a/doc/dahdi_span_assignments.8 b/doc/dahdi_span_assignments.8
index 52e0391..dd0a95a 100644
--- a/doc/dahdi_span_assignments.8
+++ b/doc/dahdi_span_assignments.8
@@ -6,7 +6,7 @@ dahdi_span_assignments \- handle DAHDI spans assignments
 
 .B dahdi_span_assignments [\-v|\-\-verbose] [\-n|\-\-dry\-run] 
<add|remove|auto> \fB[\fIdevpath\fB...]
 
-.B dahdi_span_assignments [\-v|\-\-verbose] list \fB[\fIdevpath\fB...]
+.B dahdi_span_assignments [\-v|\-\-verbose] <list|matched|unmatched|compare> 
\fB[\fIdevpath\fB...]
 
 .B dahdi_span_assignments [\-v|\-\-verbose] [\-k|\-\-key \fIkey\fB] dumpconfig
 
@@ -84,6 +84,16 @@ file doesn't affect these assignments.
 List all spans in the system.
 .RE
 
+.B matched
+.RS
+List spans in the system that were listed in the configuration file.
+.RE
+
+.B unmatched
+.RS
+List spans in the system that were not listed in the configuration file.
+.RE
+
 .B dumpconfig
 .RS
 List all assigned spans in the system in a format fit to be used in
@@ -94,6 +104,16 @@ you have (automatically or manually) assigned all existing 
spans.
 uses this command internally.
 .RE
 
+.B compare
+.RS
+Compare the settings on the system to those in the configuration file.
+For each line that applies to a device on the system, print it if the
+value to be set and the active value on the system differ.
+
+The exit status is 0 if there is no difference and non-zero if a
+difference was detected.
+.RE
+
 .SH OPTIONS
 
 .B \-v \-\-verbose
-- 
2.17.0


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to