forked from ungleich-public/cdist
Create __pyvenv type and modify __package_pip accordingly.
This commit is contained in:
parent
b12df5f125
commit
d313971e1a
18 changed files with 324 additions and 2 deletions
27
cdist/conf/type/__package_pip/explorer/su
Normal file
27
cdist/conf/type/__package_pip/explorer/su
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/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 <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
which su > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo no
|
||||||
|
fi
|
27
cdist/conf/type/__package_pip/explorer/sudo
Normal file
27
cdist/conf/type/__package_pip/explorer/sudo
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/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 <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
which sudo > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo no
|
||||||
|
fi
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2016 Darko Poljak (darko.poljak at gmail.com)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -40,12 +41,49 @@ else
|
||||||
pip="pip"
|
pip="pip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
else
|
||||||
|
runas_cmd=""
|
||||||
|
fi
|
||||||
|
|
||||||
case "$state_should" in
|
case "$state_should" in
|
||||||
present)
|
present)
|
||||||
echo $pip install -q "$name"
|
if [ "$runas_cmd" = "sudo" ]
|
||||||
|
then
|
||||||
|
echo sudo -H -u $runas $pip install -q "$name"
|
||||||
|
elif [ "$runas_cmd" = "su" ]
|
||||||
|
then
|
||||||
|
echo su $runas -c \"$pip install -q "$name"\"
|
||||||
|
else
|
||||||
|
echo $pip install -q "$name"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
absent)
|
absent)
|
||||||
echo $pip uninstall -q -y "$name"
|
if [ "$runas_cmd" = "sudo" ]
|
||||||
|
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"\"
|
||||||
|
else
|
||||||
|
echo $pip uninstall -q -y "$name"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown state: $state_should" >&2
|
echo "Unknown state: $state_should" >&2
|
||||||
|
|
|
@ -30,6 +30,11 @@ pip::
|
||||||
state::
|
state::
|
||||||
Either "present" or "absent", defaults to "present"
|
Either "present" or "absent", defaults to "present"
|
||||||
|
|
||||||
|
runas::
|
||||||
|
Run pip as specified user. By default it runs as root.
|
||||||
|
It uses sudo or su, whichever it founds first, respectively.
|
||||||
|
If no sudo nor su is present then pip is run by default.
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
@ -40,6 +45,9 @@ __package_pip pyro --state present
|
||||||
|
|
||||||
# Use pip in a virtualenv located at /root/shinken_virtualenv
|
# Use pip in a virtualenv located at /root/shinken_virtualenv
|
||||||
__package_pip pyro --state present --pip /root/shinken_virtualenv/bin/pip
|
__package_pip pyro --state present --pip /root/shinken_virtualenv/bin/pip
|
||||||
|
|
||||||
|
# Use pip in a virtualenv located at /foo/shinken_virtualenv as user foo
|
||||||
|
__package_pip pyro --state present --pip /foo/shinken_virtualenv/bin/pip --runas foo
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
pip
|
pip
|
||||||
state
|
state
|
||||||
|
runas
|
||||||
|
|
5
cdist/conf/type/__pyvenv/explorer/group
Executable file
5
cdist/conf/type/__pyvenv/explorer/group
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
destination="/$__object_id"
|
||||||
|
|
||||||
|
stat --print "%G" ${destination} 2>/dev/null || exit 0
|
5
cdist/conf/type/__pyvenv/explorer/owner
Executable file
5
cdist/conf/type/__pyvenv/explorer/owner
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
destination="/$__object_id"
|
||||||
|
|
||||||
|
stat --print "%U" ${destination} 2>/dev/null || exit 0
|
9
cdist/conf/type/__pyvenv/explorer/state
Executable file
9
cdist/conf/type/__pyvenv/explorer/state
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
destination="/$__object_id"
|
||||||
|
|
||||||
|
if [ -d "$destination" ]; then
|
||||||
|
echo present
|
||||||
|
else
|
||||||
|
echo absent
|
||||||
|
fi
|
68
cdist/conf/type/__pyvenv/gencode-remote
Executable file
68
cdist/conf/type/__pyvenv/gencode-remote
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
#!/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 <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
state_is="$(cat "$__object/explorer/state")"
|
||||||
|
owner_is="$(cat "$__object/explorer/owner")"
|
||||||
|
group_is="$(cat "$__object/explorer/group")"
|
||||||
|
|
||||||
|
state_should="$(cat "$__object/parameter/state")"
|
||||||
|
|
||||||
|
destination="/$__object_id"
|
||||||
|
|
||||||
|
owner="$(cat "$__object/parameter/owner")"
|
||||||
|
group="$(cat "$__object/parameter/group")"
|
||||||
|
mode="$(cat "$__object/parameter/mode")"
|
||||||
|
python="$(cat "$__object/parameter/python")"
|
||||||
|
if [ "$python" ]
|
||||||
|
then
|
||||||
|
python_opt="-p $python"
|
||||||
|
else
|
||||||
|
python_opt=""
|
||||||
|
fi
|
||||||
|
venvparams="$(cat "$__object/parameter/venvparams")"
|
||||||
|
|
||||||
|
[ "$state_should" = "$state_is" -a \
|
||||||
|
"$owner" = "$owner_is" -a \
|
||||||
|
"$group" = "$group_is" -a \
|
||||||
|
-n "$mode" ] && exit 0
|
||||||
|
|
||||||
|
case $state_should in
|
||||||
|
present)
|
||||||
|
|
||||||
|
if [ "$state_should" != "$state_is" ]; then
|
||||||
|
echo virtualenv "$python_opt" $venvparams "$destination"
|
||||||
|
fi
|
||||||
|
if [ \( -n "$owner" -a "$owner_is" != "$owner" \) -o \
|
||||||
|
\( -n "$group" -a "$group_is" != "$group" \) ]; then
|
||||||
|
echo chown -R "${owner}:${group}" "$destination"
|
||||||
|
fi
|
||||||
|
if [ -n "$mode" ]; then
|
||||||
|
echo chmod -R "$mode" "$destination"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
absent)
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unknown state: $state_should" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
76
cdist/conf/type/__pyvenv/man.text
Executable file
76
cdist/conf/type/__pyvenv/man.text
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
cdist-type__pyvenv(7)
|
||||||
|
==================
|
||||||
|
Darko Poljak <darko.poljak--@--gmail.com>
|
||||||
|
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
cdist-type__pyvenv - Create or remove python virtualenv
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This cdist type allows you to create or remove python virtualenv.
|
||||||
|
It assumes pip and virtualenv are already installed. Concrete packages
|
||||||
|
or installation procedures depend on concrete OS and/or OS
|
||||||
|
version/distribution.
|
||||||
|
Ensure this in your init manifest as in the following example:
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
case "$__target_host" in
|
||||||
|
localhost)
|
||||||
|
__package python3-pip --state present
|
||||||
|
require="__package/python3-pip" __package_pip virtualenv --pip pip3 --state present
|
||||||
|
require="__package/python3-pip __package_pip/virtualenv" __pyvenv /home/darko/testenv --owner darko --group darko --mode 740 --state present
|
||||||
|
;;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED PARAMETERS
|
||||||
|
-------------------
|
||||||
|
None
|
||||||
|
|
||||||
|
OPTIONAL PARAMETERS
|
||||||
|
-------------------
|
||||||
|
state::
|
||||||
|
Either "present" or "absent", defaults to "present"
|
||||||
|
|
||||||
|
group::
|
||||||
|
Group to chgrp to.
|
||||||
|
|
||||||
|
mode::
|
||||||
|
Unix permissions, suitable for chmod.
|
||||||
|
|
||||||
|
owner::
|
||||||
|
User to chown to.
|
||||||
|
|
||||||
|
python::
|
||||||
|
Use specific python interpreter for creating virtualenv.
|
||||||
|
The default is the interpreter that virtualenv was installed with.
|
||||||
|
|
||||||
|
venvparams::
|
||||||
|
virtualenv specific parameters to pass to virtualenv invocation.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
__pyvenv /home/services/djangoenv
|
||||||
|
|
||||||
|
# Create python virtualenv for user foo using specific python interpreter.
|
||||||
|
__pyvenv /home/foo/fooenv --group foo --user foo --python python2.6
|
||||||
|
|
||||||
|
# Create python virtualenv with specific parameters.
|
||||||
|
__pyvenv /home/services/djangoenv --venvparams "--relocatable --system-site-packages"
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
- cdist-type(7)
|
||||||
|
|
||||||
|
|
||||||
|
COPYING
|
||||||
|
-------
|
||||||
|
Copyright \(C) 2016 Darko Poljak. Free use of this software is
|
||||||
|
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
46
cdist/conf/type/__pyvenv/manifest
Executable file
46
cdist/conf/type/__pyvenv/manifest
Executable file
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# It assumes pip and virtualenv are already installed. Concrete packages
|
||||||
|
# or installation procedures depend on concrete OS and/or OS
|
||||||
|
# version/distribution.
|
||||||
|
|
||||||
|
state_should="$(cat "$__object/parameter/state")"
|
||||||
|
owner="$(cat "$__object/parameter/owner")"
|
||||||
|
group="$(cat "$__object/parameter/group")"
|
||||||
|
mode="$(cat "$__object/parameter/mode")"
|
||||||
|
|
||||||
|
case "$state_should" in
|
||||||
|
present)
|
||||||
|
:
|
||||||
|
;;
|
||||||
|
|
||||||
|
absent)
|
||||||
|
__directory "$__object_id" --state absent \
|
||||||
|
--owner "$owner" \
|
||||||
|
--group "$group" \
|
||||||
|
--mode "$mode"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unknown state: $state_should" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
1
cdist/conf/type/__pyvenv/parameter/default/group
Executable file
1
cdist/conf/type/__pyvenv/parameter/default/group
Executable file
|
@ -0,0 +1 @@
|
||||||
|
|
1
cdist/conf/type/__pyvenv/parameter/default/mode
Executable file
1
cdist/conf/type/__pyvenv/parameter/default/mode
Executable file
|
@ -0,0 +1 @@
|
||||||
|
|
1
cdist/conf/type/__pyvenv/parameter/default/owner
Executable file
1
cdist/conf/type/__pyvenv/parameter/default/owner
Executable file
|
@ -0,0 +1 @@
|
||||||
|
|
1
cdist/conf/type/__pyvenv/parameter/default/python
Normal file
1
cdist/conf/type/__pyvenv/parameter/default/python
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
1
cdist/conf/type/__pyvenv/parameter/default/state
Executable file
1
cdist/conf/type/__pyvenv/parameter/default/state
Executable file
|
@ -0,0 +1 @@
|
||||||
|
present
|
1
cdist/conf/type/__pyvenv/parameter/default/venvparams
Normal file
1
cdist/conf/type/__pyvenv/parameter/default/venvparams
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
6
cdist/conf/type/__pyvenv/parameter/optional
Executable file
6
cdist/conf/type/__pyvenv/parameter/optional
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
state
|
||||||
|
group
|
||||||
|
owner
|
||||||
|
mode
|
||||||
|
python
|
||||||
|
venvparams
|
Loading…
Reference in a new issue