commit
2a27eebbe4
16 changed files with 253 additions and 2 deletions
|
@ -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,30 @@ else
|
||||||
pip="pip"
|
pip="pip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
runasparam="$__object/parameter/runas"
|
||||||
|
if [ -f "$runasparam" ]
|
||||||
|
then
|
||||||
|
runas=$(cat "$runasparam")
|
||||||
|
else
|
||||||
|
runas=""
|
||||||
|
fi
|
||||||
|
|
||||||
case "$state_should" in
|
case "$state_should" in
|
||||||
present)
|
present)
|
||||||
|
if [ "$runas" ]
|
||||||
|
then
|
||||||
|
echo "su -c \"$pip install -q $name\" $runas"
|
||||||
|
else
|
||||||
echo $pip install -q "$name"
|
echo $pip install -q "$name"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
absent)
|
absent)
|
||||||
|
if [ "$runas" ]
|
||||||
|
then
|
||||||
|
echo "su -c \"$pip uninstall -q -y $name\" $runas"
|
||||||
|
else
|
||||||
echo $pip uninstall -q -y "$name"
|
echo $pip uninstall -q -y "$name"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown state: $state_should" >&2
|
echo "Unknown state: $state_should" >&2
|
||||||
|
|
|
@ -30,6 +30,9 @@ 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.
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
@ -40,6 +43,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
|
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:
|
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)
|
* Core: Add CDIST_REMOTE_COPY/EXEC env variables and multiplexing options for default scp/ssh (Darko Poljak)
|
||||||
* Types: Remove bashisms in scripts (Darko Poljak)
|
* Types: Remove bashisms in scripts (Darko Poljak)
|
||||||
* Core: Fix bug in remote command with environment (Darko Poljak)
|
* Core: Fix bug in remote command with environment (Darko Poljak)
|
||||||
|
|
Loading…
Reference in a new issue