Skip to content

Instantly share code, notes, and snippets.

@agraul
Last active May 24, 2022 09:07
Show Gist options
  • Save agraul/067922320b9d429aec744b48990120ff to your computer and use it in GitHub Desktop.
Save agraul/067922320b9d429aec744b48990120ff to your computer and use it in GitHub Desktop.
Salt Bundle Helper Script
#!/usr/bin/bash
function setup () {
ALL_PROJECTS=$(osc ls)
BUNDLE_FROM="systemsmanagement:saltstack:bundle:testing"
BUNDLE_TO="systemsmanagement:saltstack:bundle"
FROM_PREFIX="$BUNDLE_FROM:"
TO_PREFIX="$BUNDLE_TO:"
SUBPROJECTS_FROM=$(grep "^$FROM_PREFIX" <<<$ALL_PROJECTS)
SUBPROJECTS_TO=$(grep "^$TO_PREFIX" <<<$ALL_PROJECTS)
}
function list_subprojects () {
list_file=package_list.tmp
for project in $SUBPROJECTS_FROM; do
echo "*** $project ***">>$list_file
for package in $(osc ls $project); do
echo $package >>$list_file
done
done
cat $list_file
rm $list_file
}
function rdiff_subprojects () {
local diff_file=rdiffs.tmp
for project in $SUBPROJECTS_FROM; do
for package in $(osc ls $project); do
echo osc rdiff "$TO_PREFIX${project:${#FROM_PREFIX}}" $package $project >>$diff_file
osc rdiff "$TO_PREFIX${project:${#FROM_PREFIX}}" $package $project &>>$diff_file
done
cat $diff_file
rm $diff_file
done
}
function align_packages_subprojects () {
for project in $SUBPROJECTS_FROM; do
for package in $(osc projectdiff --show-not-in-old "$TO_PREFIX${project:${#FROM_PREFIX}}" $project | awk -F':' '/^(differs|new only):/ {print $2;}'); do
echo "osc copypac $project $package $TO_PREFIX${project:${#FROM_PREFIX}}"
osc copypac $project $package "$TO_PREFIX${project:${#FROM_PREFIX}}"
done
done
}
function align_prjconf_subprojects () {
for project in $SUBPROJECTS_FROM; do
echo "diff <(osc meta prjconf "$TO_PREFIX${project:${#FROM_PREFIX}}") <(osc meta prjconf $project)"
if ! diff --ignore-blank-lines --ignore-all-space <(osc meta prjconf "$TO_PREFIX${project:${#FROM_PREFIX}}") <(osc meta prjconf $project); then
echo "osc meta prjconf $project | osc meta prjconf --file='-'" $TO_PREFIX${project:${#FROM_PREFIX}}
osc meta prjconf $project | osc meta prjconf --file='-' $TO_PREFIX${project:${#FROM_PREFIX}}
fi
done
}
case $1 in
-l|--list)
setup
list_subprojects
;;
-r|--rdiff)
setup
rdiff_subprojects
;;
-a|--align)
setup
if [[ "$2" == "prjconf" ]]; then
align_prjconf_subprojects
else
align_packages_subprojects
fi
;;
-*|--*|*)
echo "Unknown option $1"
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment