commit
2a27eebbe4
16 changed files with 253 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
pip
|
||||
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
|
67
cdist/conf/type/__pyvenv/gencode-remote
Executable file
67
cdist/conf/type/__pyvenv/gencode-remote
Executable 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
|
80
cdist/conf/type/__pyvenv/man.text
Executable file
80
cdist/conf/type/__pyvenv/man.text
Executable 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).
|
||||
|
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 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
|
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/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
|
||||
venvparams
|
||||
pyvenv
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue