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
 | 
			
		||||
#
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue