info.sh |
|
|---|---|
|
info.sh |
#!/usr/bin/env bash
|
|
Produce a report on the state of devstack installs Output fields are separated with '|' chars Output types are git,localrc,os,pip,pkg: git|<project>|<branch>[<shaq>] localtc|<var>=<value> os|<var>=<value> pip|<package>|<version> pkg|<package>|<version> |
function usage {
echo "$0 - Report on the devstack configuration"
echo ""
echo "Usage: $0"
exit 1
}
if [ "$1" = "-h" ]; then
usage
fi
|
|
Keep track of the current directory |
TOOLS_DIR=$(cd $(dirname "$0") && pwd)
TOP_DIR=$(cd $TOOLS_DIR/..; pwd)
cd $TOP_DIR
|
|
Import common functions |
source $TOP_DIR/functions
|
|
Source params |
source $TOP_DIR/stackrc
DEST=${DEST:-/opt/stack}
FILES=$TOP_DIR/files
if [[ ! -d $FILES ]]; then
echo "ERROR: missing devstack/files - did you grab more than just stack.sh?"
exit 1
fi
|
OS |
|
|
Determine what OS we're using |
GetDistro
echo "os|distro=$DISTRO"
echo "os|vendor=$os_VENDOR"
echo "os|release=$os_RELEASE"
if [ -n "$os_UPDATE" ]; then
echo "os|version=$os_UPDATE"
fi
|
Repos |
|
|
git_report <dir> |
function git_report() {
local dir=$1
local proj ref branch head
if [[ -d $dir/.git ]]; then
pushd $dir >/dev/null
proj=$(basename $dir)
ref=$(git symbolic-ref HEAD)
branch=${ref##refs/heads/}
head=$(git show-branch --sha1-name $branch | cut -d' ' -f1)
echo "git|${proj}|${branch}${head}"
popd >/dev/null
fi
}
for i in $DEST/*; do
if [[ -d $i ]]; then
git_report $i
fi
done
|
Packages |
|
|
if is_ubuntu; then
PKG_DIR=$FILES/apts
elif is_fedora; then
PKG_DIR=$FILES/rpms
elif is_suse; then
PKG_DIR=$FILES/rpms-suse
else
exit_distro_not_supported "list of packages"
fi
for p in $(get_packages $PKG_DIR); do
if [[ "$os_PACKAGE" = "deb" ]]; then
ver=$(dpkg -s $p 2>/dev/null | grep '^Version: ' | cut -d' ' -f2)
elif [[ "$os_PACKAGE" = "rpm" ]]; then
ver=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}\n" $p)
else
exit_distro_not_supported "finding version of a package"
fi
echo "pkg|${p}|${ver}"
done
|
Pips |
CMD_PIP=$(get_pip_command)
|
|
Pip tells us what is currently installed |
FREEZE_FILE=$(mktemp --tmpdir freeze.XXXXXX)
$CMD_PIP freeze >$FREEZE_FILE 2>/dev/null
|
|
Loop through our requirements and look for matches |
while read line; do
if [[ -n "$line" ]]; then
if [[ "$line" =~ \+(.*)@(.*)#egg=(.*) ]]; then
|
|
Handle URLs |
p=${BASH_REMATCH[1]}
ver=${BASH_REMATCH[2]}
elif [[ "$line" =~ (.*)[=\<\>]=(.*) ]]; then
|
|
Normal pip packages |
p=${BASH_REMATCH[1]}
ver=${BASH_REMATCH[2]}
else
|
|
Unhandled format in freeze file |
#echo "unknown: $p"
continue
fi
echo "pip|${p}|${ver}"
else
|
|
No match in freeze file |
#echo "unknown: $p"
continue
fi
done <$FREEZE_FILE
rm $FREEZE_FILE
|
localrc |
|
|
Dump localrc with 'localrc|' prepended and comments and passwords left out |
if [[ -r $TOP_DIR/localrc ]]; then
sed -e '
/PASSWORD/d;
/^#/d;
s/^/localrc\|/;
' $TOP_DIR/localrc
fi
|
| |