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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list