If you ever need to upgrade a code base to Puppet 3.0 and strip all dynamic scoping from your templates:
for file in $( find . -name "*.erb" | sort); do echo "------------ [ $file ]"; if grep -q "<%[^>]*$" $file; then content=$(sed '/<%/,/%>/!d' $file); else content=$(grep "<%" $file); fi; echo "$content" | egrep "(.each|if |%=)" | egrep -v "scope.lookupvar|@|scope\["; doneThis is of course just a fuzzy match, but should catch quite some of the dynamic scope expressions there are. The limits of this solution are:
- false positives on loop and declared variables that must not be scoped
- and false negatives when mixing of correct scope and missing scope in the same line.