Create __pyvenv type and modify __package_pip accordingly.

This commit is contained in:
Darko Poljak 2016-04-11 19:21:11 +02:00
parent b12df5f125
commit d313971e1a
18 changed files with 324 additions and 2 deletions

View 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

View 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

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@ -40,12 +41,49 @@ else
pip="pip"
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
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)
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

View File

@ -30,6 +30,11 @@ pip::
state::
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
--------
@ -40,6 +45,9 @@ __package_pip pyro --state present
# Use pip in a virtualenv located at /root/shinken_virtualenv
__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
--------------------------------------------------------------------------------

View File

@ -1,2 +1,3 @@
pip
state
runas

View File

@ -0,0 +1,5 @@
#!/bin/sh
destination="/$__object_id"
stat --print "%G" ${destination} 2>/dev/null || exit 0

View File

@ -0,0 +1,5 @@
#!/bin/sh
destination="/$__object_id"
stat --print "%U" ${destination} 2>/dev/null || exit 0

View File

@ -0,0 +1,9 @@
#!/bin/sh
destination="/$__object_id"
if [ -d "$destination" ]; then
echo present
else
echo absent
fi

View 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

View 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).

View 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

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,6 @@
state
group
owner
mode
python
venvparams