diff --git a/cdist/conf/type/__package_pip/explorer/su b/cdist/conf/explorer/su
similarity index 68%
rename from cdist/conf/type/__package_pip/explorer/su
rename to cdist/conf/explorer/su
index f355a1bc..ae164e69 100644
--- a/cdist/conf/type/__package_pip/explorer/su
+++ b/cdist/conf/explorer/su
@@ -17,11 +17,18 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+# This explorer returns script code string for running a command with su.
+# If no su is found then it returns empty string.
+# It uses two arguments, first user and the second command to run.
+# If the result string is assigned to foo it is used as:
+# $ $foo user command
+#
which su > /dev/null 2>&1
if [ $? -eq 0 ]
then
- echo yes
+ su_func='f() { su -c "$2" $1 ; }'
+ echo "eval '${su_func}' ; f "
else
- echo no
+ echo ""
fi
diff --git a/cdist/conf/explorer/sucmd b/cdist/conf/explorer/sucmd
new file mode 100644
index 00000000..1f16666d
--- /dev/null
+++ b/cdist/conf/explorer/sucmd
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# 2016 Darko Poljak (darko.poljak at gmail.com)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see .
+#
+# This explorer returns script code string for running a command with su
+# or sudo, whichever it founds. If searches the command in the order of
+# first sudo and then su if sudo is not found.
+# If no sudo nor su is found then it returns string script code to run
+# bare command.
+# It uses two arguments, first user and the second command to run.
+# If the result string is assigned to foo it is used as:
+# $ $foo user command
+#
+
+# first check sudo
+which sudo > /dev/null 2>&1
+if [ $? -eq 0 ]
+then
+ func='f() { sudo -H -u $1 $2; }'
+else
+ # if no sudo then check su
+ which su > /dev/null 2>&1
+ if [ $? -eq 0 ]
+ then
+ func='f() { su -c "$2" $1 ; }'
+ else
+ # if no sudo nor su then run bare command
+ func='f() { $2 ; }'
+ fi
+fi
+echo "eval '${func}' ; f "
diff --git a/cdist/conf/type/__package_pip/explorer/sudo b/cdist/conf/explorer/sudo
similarity index 67%
rename from cdist/conf/type/__package_pip/explorer/sudo
rename to cdist/conf/explorer/sudo
index 7b702bc0..079c570d 100644
--- a/cdist/conf/type/__package_pip/explorer/sudo
+++ b/cdist/conf/explorer/sudo
@@ -17,11 +17,18 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
+# This explorer returns script code string for running a command with sudo.
+# If no sudo is found then it returns empty string.
+# It uses two arguments, first user and the second command to run.
+# If the result string is assigned to foo it is used as:
+# $ $foo user command
+#
which sudo > /dev/null 2>&1
if [ $? -eq 0 ]
then
- echo yes
+ sudo_func='f() { sudo -H -u $1 $2; }'
+ echo "eval '${sudo_func}' ; f "
else
- echo no
+ echo ""
fi
diff --git a/cdist/conf/type/__package_pip/gencode-remote b/cdist/conf/type/__package_pip/gencode-remote
index ccf30f1a..b9a52efc 100644
--- a/cdist/conf/type/__package_pip/gencode-remote
+++ b/cdist/conf/type/__package_pip/gencode-remote
@@ -45,42 +45,24 @@ runasparam="$__object/parameter/runas"
if [ -f "$runasparam" ]
then
runas=$(cat "$runasparam")
- has_sudo=$(cat "$__object/explorer/sudo")
- if [ "$has_sudo" = "yes" ]
- then
- runas_cmd="sudo"
- else
- has_su=$(cat "$__object/explorer/su")
- if [ "$has_su" = "yes" ]
- then
- runas_cmd="su"
- else
- runas_cmd=""
- fi
- fi
+ runas_cmd=$(cat "$__global/explorer/sucmd")
else
runas_cmd=""
fi
case "$state_should" in
present)
- if [ "$runas_cmd" = "sudo" ]
+ if [ "$runas_cmd" ]
then
- echo sudo -H -u $runas $pip install -q "$name"
- elif [ "$runas_cmd" = "su" ]
- then
- echo su $runas -c \"$pip install -q "$name"\"
+ echo "$runas_cmd $runas \"$pip install -q $name\""
else
echo $pip install -q "$name"
fi
;;
absent)
- if [ "$runas_cmd" = "sudo" ]
+ if [ "$runas_cmd" ]
then
- echo sudo -H -u $runas $pip uninstall -q -y "$name"
- elif [ "$runas_cmd" = "su" ]
- then
- echo su $runas -c \"$pip uninstall -q -y "$name"\"
+ echo "$runas_cmd $runas \"$pip uninstall -q -y $name\""
else
echo $pip uninstall -q -y "$name"
fi