forked from ungleich-public/cdist
Merge branch 'ssrq/cdist-line-patches'
This commit is contained in:
commit
ffb3c003ca
2 changed files with 46 additions and 36 deletions
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
#
|
||||||
# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
|
# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -18,6 +19,14 @@
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/file" ]; then
|
||||||
|
file=$(cat "$__object/parameter/file")
|
||||||
|
else
|
||||||
|
file="/$__object_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -f "$file" ] || exit 0
|
||||||
|
|
||||||
if [ -f "$__object/parameter/before" ]; then
|
if [ -f "$__object/parameter/before" ]; then
|
||||||
position="before"
|
position="before"
|
||||||
elif [ -f "$__object/parameter/after" ]; then
|
elif [ -f "$__object/parameter/after" ]; then
|
||||||
|
@ -33,63 +42,56 @@ else
|
||||||
needle="line"
|
needle="line"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f "$__object/parameter/file" ]; then
|
|
||||||
file="$(cat "$__object/parameter/file")"
|
|
||||||
else
|
|
||||||
file="/$__object_id"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$file" ]; then
|
|
||||||
echo "file_missing"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
awk -v position="$position" -v needle="$needle" '
|
awk -v position="$position" -v needle="$needle" '
|
||||||
function _find(_text, _pattern) {
|
function _find(_text, _pattern) {
|
||||||
if (needle == "regex") {
|
if (needle == "regex") {
|
||||||
return match(_text, _pattern)
|
return match(_text, _pattern)
|
||||||
} else {
|
} else {
|
||||||
return index(_text, _pattern)
|
return index(_text, _pattern) == 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BEGIN {
|
BEGIN {
|
||||||
getline anchor < (ENVIRON["__object"] "/parameter/" position)
|
getline anchor < (ENVIRON["__object"] "/parameter/" position)
|
||||||
getline pattern < (ENVIRON["__object"] "/parameter/" needle)
|
getline pattern < (ENVIRON["__object"] "/parameter/" needle)
|
||||||
state = "absent"
|
|
||||||
|
found_line = 0
|
||||||
|
correct_pos = (position != "after" && position != "before")
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
if (position == "after") {
|
if (position == "after") {
|
||||||
if (match($0, anchor)) {
|
if (match($0, anchor)) {
|
||||||
getline
|
getline
|
||||||
if (_find($0, pattern)) {
|
if (_find($0, pattern)) {
|
||||||
state = "present"
|
found_line++
|
||||||
|
correct_pos = 1
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
else {
|
} else if (_find($0, pattern)) {
|
||||||
state = "wrongposition"
|
found_line++
|
||||||
}
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
}
|
} else if (position == "before") {
|
||||||
else if (position == "before") {
|
|
||||||
if (_find($0, pattern)) {
|
if (_find($0, pattern)) {
|
||||||
|
found_line++
|
||||||
getline
|
getline
|
||||||
if (match($0, anchor)) {
|
if (match($0, anchor)) {
|
||||||
state = "present"
|
correct_pos = 1
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
state = "wrongposition"
|
|
||||||
}
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (_find($0, pattern)) {
|
if (_find($0, pattern)) {
|
||||||
state = "present"
|
found_line++
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END {
|
END {
|
||||||
print state
|
if (found_line && correct_pos) {
|
||||||
|
print "present"
|
||||||
|
} else if (found_line) {
|
||||||
|
print "wrongposition"
|
||||||
|
} else {
|
||||||
|
print "absent"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
' "$file"
|
' "$file"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
#
|
||||||
# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
|
# 2018 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||||
|
# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -23,9 +24,20 @@ if [ -f "$__object/parameter/before" ] && [ -f "$__object/parameter/after" ]; th
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/file" ]; then
|
||||||
|
file="$(cat "$__object/parameter/file")"
|
||||||
|
else
|
||||||
|
file="/$__object_id"
|
||||||
|
fi
|
||||||
|
|
||||||
state_should="$(cat "$__object/parameter/state")"
|
state_should="$(cat "$__object/parameter/state")"
|
||||||
state_is="$(cat "$__object/explorer/state")"
|
state_is="$(cat "$__object/explorer/state")"
|
||||||
|
|
||||||
|
if [ -z "$state_is" ]; then
|
||||||
|
printf 'The file "%s" is missing. Please create it before using %s on it.\n' "$file" "${__type##*/}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$state_should" = "$state_is" ]; then
|
if [ "$state_should" = "$state_is" ]; then
|
||||||
# nothing to do
|
# nothing to do
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -46,12 +58,6 @@ else
|
||||||
needle="line"
|
needle="line"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f "$__object/parameter/file" ]; then
|
|
||||||
file="$(cat "$__object/parameter/file")"
|
|
||||||
else
|
|
||||||
file="/$__object_id"
|
|
||||||
fi
|
|
||||||
|
|
||||||
add=0
|
add=0
|
||||||
remove=0
|
remove=0
|
||||||
case "$state_should" in
|
case "$state_should" in
|
||||||
|
@ -104,10 +110,12 @@ BEGIN {
|
||||||
if (anchor && match(\$0, anchor)) {
|
if (anchor && match(\$0, anchor)) {
|
||||||
if (position == "before") {
|
if (position == "before") {
|
||||||
print line
|
print line
|
||||||
|
add = 0
|
||||||
print
|
print
|
||||||
} else if (position == "after") {
|
} else if (position == "after") {
|
||||||
print
|
print
|
||||||
print line
|
print line
|
||||||
|
add = 0
|
||||||
}
|
}
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
|
@ -115,7 +123,7 @@ BEGIN {
|
||||||
print
|
print
|
||||||
}
|
}
|
||||||
END {
|
END {
|
||||||
if (add && position == "end") {
|
if (add) {
|
||||||
print line
|
print line
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue