On Mon, Jul 20, 2015 at 11:24:51AM +0200, Andrea Bolognani wrote:
Files we don't need, including symbolic links that might result
problematic to make dist, are removed from the copied data.
---
tests/nodeinfodata/copy-from-host.sh | 170 +++++++++++++++++++++++++++++++++++
Since this script is not part of the _data_ for nodeinfo test, I'd
rather put it in the tests/ directory. But I don't have a strict
preference.
1 file changed, 170 insertions(+)
create mode 100755 tests/nodeinfodata/copy-from-host.sh
diff --git a/tests/nodeinfodata/copy-from-host.sh b/tests/nodeinfodata/copy-from-host.sh
new file mode 100755
index 0000000..b5c5e8e
--- /dev/null
+++ b/tests/nodeinfodata/copy-from-host.sh
@@ -0,0 +1,170 @@
+#!/bin/sh
+
+# copy-from-host.sh - Copy nodeinfo test data from a running host
+
+# Copyright (C) 2015 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see
+# <
http://www.gnu.org/licenses/>.
+
+SYSFS_PATH="/sys/devices/system"
+KEEP_LINKS="cpu[0-9]*"
+KEEP_DIRECTORIES="cpu
+ cpu[0-9]*
+ node
+ node[0-9]*
+ topology"
+KEEP_FILES="core_id
+ core_siblings*
+ kernel_max
+ meminfo
+ offline
+ online
+ physical_package_id
+ possible
+ present
+ thread_siblings*"
+
+die() {
+ typeset message=$1
+
+ echo "$message" >&2
+
+ exit 1
+}
+
+keep() {
+ typeset tag=$1
+ typeset path=$2
+
+ echo " $tag $path"
+
+ return 0
+}
+
+delete() {
+ typeset tag=$1
+ typeset path=$2
+
+ rm -rf "$path"
+
+ return $?
+}
+
+is_valid_name() {
+ typeset name=$1
+ typeset ret=0
+
+ case "$name" in
+ */*)
+ # We don't want to have to deal with subdirectories, so
+ # names containing slashes are rejected
+ ret=1
+ ;;
+ esac
+
+ return $ret
+}
+
+matches_any_pattern() {
+ typeset name=$1
+ typeset patterns=$2
+ typeset ret=1
+
I'm not sure why typeset is better then (or compatible as):
name="$1"
and somewhere the parameters naming almost doubles the function
length, but this is just a support script and not something we call on
all machines, so I'm OK with keeping these as they are.
+ for pattern in $patterns; do
+ case "$name" in
+ $pattern)
+ ret=0
+ ;;
+ esac
+ done
+
+ return $ret
+}
+
+main() {
+ typeset name=$1
+
+ if ! test "$name"; then
+ die "Usage: $SELF NAME"
+ fi
+
+ if ! is_valid_name "$name"; then
+ die "Name '$name' is not valid"
+ fi
+
+ # Create directory
+ if test -e "$name"; then
+ die "$name: File or directory already exists"
+ fi
+
+ if ! mkdir "$name" >/dev/null 2>&1; then
+ die "$name: Unable to create directory"
+ fi
+
+ echo "Copying host data..."
+
+ # Copy data from host. Errors are ignored because some files we don't
+ # care about always give input/output error when read
+ cp -r "$SYSFS_PATH/cpu" "$name/" >/dev/null 2>&1
+ cp -r "$SYSFS_PATH/node" "$name/" >/dev/null 2>&1
+
If there are errors we don't care about, why don't you just copy the
files that match wither KEEP_LINKS or KEEP_DIRECTORIES? You can check
that all of them copied correctly and you don't need to redirect the
output, so any possible error gives a clue on what's wrong.
+ if ! test -d "$name/cpu" || ! test -d
"$name/node"; then
+ die "Error while copying host data"
+ fi
+
+ echo "Cleaning up data..."
+
+ # Delete symbolic links
+ find "$name" -type l | while read l; do
+ b=${l##*/}
+ if matches_any_pattern "$b" "$KEEP_LINKS"; then
+ keep "l" "$l"
+ else
+ delete "l" "$l"
+ fi
+ done
+
+ # Delete directories
+ find "$name" -type d | while read d; do
+ b=${d##*/}
+ # We don't want to delete the directory we just created :)
+ if test "$b" = "$name"; then
+ continue
+ fi
+ if matches_any_pattern "$b" "$KEEP_DIRECTORIES"; then
+ keep "d" "$d"
+ else
+ delete "d" "$d"
+ fi
+ done
+
+ # Delete files
+ find "$name" -type f | while read f; do
+ b=${f##*/}
+ if matches_any_pattern "$b" "$KEEP_FILES"; then
+ keep "f" "$f"
+ else
+ delete "f" "$f"
+ fi
+ done
+
+ echo "All done"
+
+ return 0
+}
+
+SELF=$0
+main "$@"
+exit $?
--
2.4.3
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list