Merge pull request #430 from darko-poljak/type_pyvenv

Type __pyvenv
This commit is contained in:
Nico Schottelius 2016-04-21 09:39:01 +02:00
commit 2a27eebbe4
16 changed files with 253 additions and 2 deletions

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,30 @@ else
pip="pip"
fi
runasparam="$__object/parameter/runas"
if [ -f "$runasparam" ]
then
runas=$(cat "$runasparam")
else
runas=""
fi
case "$state_should" in
present)
echo $pip install -q "$name"
if [ "$runas" ]
then
echo "su -c \"$pip install -q $name\" $runas"
else
echo $pip install -q "$name"
fi
;;
absent)
echo $pip uninstall -q -y "$name"
if [ "$runas" ]
then
echo "su -c \"$pip uninstall -q -y $name\" $runas"
else
echo $pip uninstall -q -y "$name"
fi
;;
*)
echo "Unknown state: $state_should" >&2

View file

@ -30,6 +30,9 @@ pip::
state::
Either "present" or "absent", defaults to "present"
runas::
Run pip as specified user. By default it runs as root.
EXAMPLES
--------
@ -40,6 +43,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,67 @@
#!/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")"
owner="$(cat "$__object/parameter/owner")"
group="$(cat "$__object/parameter/group")"
mode="$(cat "$__object/parameter/mode")"
[ "$state_should" = "$state_is" -a \
"$owner" = "$owner_is" -a \
"$group" = "$group_is" -a \
-n "$mode" ] && exit 0
destination="/$__object_id"
venvparams="$(cat "$__object/parameter/venvparams")"
pyvenvparam="$__object/parameter/pyvenv"
if [ -f "$pyvenvparam" ]
then
pyvenv=$(cat "$pyvenvparam")
else
pyvenv="pyvenv"
fi
case $state_should in
present)
if [ "$state_should" != "$state_is" ]; then
echo $pyvenv $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,80 @@
cdist-type__pyvenv(7)
=====================
Darko Poljak <darko.poljak--@--gmail.com>
NAME
----
cdist-type__pyvenv - Create or remove python virtual environment
DESCRIPTION
-----------
This cdist type allows you to create or remove python virtual
environment using pyvenv.
It assumes pyvenv is already installed. Concrete package depends
on concrete OS and/or OS version/distribution.
Ensure this for e.g. in your init manifest as in the following example:
--------------------------------------------------------------------------------
case "$__target_host" in
localhost)
__package python3-venv --state present
require="__package/python3-venv" __pyvenv /home/darko/testenv --pyvenv "pyvenv-3.4" --owner darko --group darko --mode 740 --state present
require="__pyvenv/home/darko/testenv" __package_pip docopt --pip /home/darko/testenv/bin/pip --runas darko --state present
;;
esac
--------------------------------------------------------------------------------
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
pyvenv::
Use this specific pyvenv
venvparams::
Specific parameters to pass to pyvenv invocation
EXAMPLES
--------
--------------------------------------------------------------------------------
__pyvenv /home/services/djangoenv
# Use specific pyvenv
__pyvenv /home/foo/fooenv --pyvenv /usr/local/bin/pyvenv-3.4
# Create python virtualenv for user foo.
__pyvenv /home/foo/fooenv --group foo --user foo
# Create python virtualenv with specific parameters.
__pyvenv /home/services/djangoenv --venvparams "--copies --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 pyvenv is 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 @@
present

View file

@ -0,0 +1 @@

View file

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

View file

@ -2,6 +2,8 @@ Changelog
---------
next:
* Type __package_pip: Add support for running as specified user (useful for pip in venv) (Darko Poljak)
* New type: __pyvenv: Manage python virtualenv (Darko Poljak)
* Core: Add CDIST_REMOTE_COPY/EXEC env variables and multiplexing options for default scp/ssh (Darko Poljak)
* Types: Remove bashisms in scripts (Darko Poljak)
* Core: Fix bug in remote command with environment (Darko Poljak)