Last active
August 29, 2015 14:05
-
-
Save kun432/19e85b2a42e553e15738 to your computer and use it in GitHub Desktop.
ansible module sample (plenv)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
eval $(perl -lne 'while(/\s?([^=\s]+)\s?=\s?(\"(?:\\\"|[^\"])+\"|\x27(?:\x27\\\x27\x27|[^\x27])+\x27|\S+)\s?/g){print "$1=$2"}' $1) | |
if [ -n "${debug}" ]; then | |
set -x | |
fi | |
changed="false" | |
rc=0 | |
ret_install_perl=0 | |
ret_install_cpanm=0 | |
ret_set_global=0 | |
messages=() | |
message="" | |
is_command_exist() | |
{ | |
(type $1 > /dev/null 2>&1) && echo "yes" | |
} | |
is_user_exist() | |
{ | |
(awk -F":" '{ print $1 }' /etc/passwd | egrep "^${1}$" > /dev/null 2>&1) && echo "yes" | |
} | |
get_uid() | |
{ | |
_uid=$(awk -F":" '$1 ~ /^'"$1"'$/{ print $3 }' /etc/passwd) | |
echo $_uid | |
} | |
get_gid() | |
{ | |
_gid=$(awk -F":" '$1 ~ /^'"$1"'$/{ print $4 }' /etc/passwd) | |
echo $_uid | |
} | |
get_homedir() | |
{ | |
_homedir=$(awk -F":" '$1 ~ /^'"$1"'$/{ print $6 }' /etc/passwd) | |
echo $_homedir | |
} | |
plenv_init() | |
{ | |
#_user_homedir=$(awk -F":" '$1 ~ /^'"$1"'$/{ print $6 }' /etc/passwd) | |
export PLENV_ROOT="$(get_homedir)/.plenv" | |
eval "$(plenv init - )" | |
} | |
plenv_version() | |
{ | |
_global=$(plenv version) | |
echo "${_global}" | cut -d ' ' -f 1 | |
} | |
plenv_install() | |
{ | |
plenv install $1 > /dev/null 2>&1 | |
case $? in | |
0) echo "yes" ;; | |
255) echo "no" ;; | |
*) echo "error" ;; | |
esac | |
} | |
plenv_install_cpanm() | |
{ | |
stdout_install_cpanm=$(plenv global $1 && plenv install-cpanm 2>&1) | |
ret_install_cpanm=$? | |
if [ "${ret_install_cpanm}" != 0 ]; then | |
echo "error" | |
else | |
(echo "${stdout_install_cpanm}" | grep "Successfully installed App-cpanminus" > /dev/null 2>&1) | |
if [ $? = 0 ]; then | |
echo "yes" | |
else | |
(echo "${stdout_install_cpanm}" | grep "App::cpanminus is up to date" > /dev/null 2>&1) | |
if [ $? = 0 ]; then | |
echo "no" | |
else | |
echo "error" | |
fi | |
fi | |
fi | |
} | |
plenv_global() | |
{ | |
plenv global $1 > /dev/null 2>&1 | |
[ $? -eq 0 ] && echo "yes" || echo "error" | |
} | |
# setup | |
if [ "$(is_command_exist plenv)" != "yes" ]; then | |
printf "failed=true msg='plenv command not found'\n" | |
exit 1 | |
fi | |
# user | |
if [ -z "${user}" ]; then | |
printf "failed=true msg='no user defined'" | |
exit 1 | |
elif [ "$(is_user_exist ${user})" != "yes" ]; then | |
printf "failed=true msg='no user found'" | |
exit 1 | |
fi | |
# init | |
plenv_init $user | |
# get current global version | |
previous_global=$(plenv_version) | |
# install perl | |
if [ -n "${perl}" ]; then | |
case "$(plenv_install ${perl})" in | |
"yes") ret_install_perl=1 ;; | |
"no") ret_install_perl=0 ;; | |
*) printf "failed=true msg=\"failed to install perl-${perl}\"" | |
exit 1 | |
;; | |
esac | |
case "$(plenv_install_cpanm ${perl})" in | |
"yes") ret_install_cpanm=1 ;; | |
"no") ret_install_cpanm=0 ;; | |
*) printf "failed=true msg=\"failed to install cpanm for perl-${perl}\"" | |
exit 1 | |
;; | |
esac | |
fi | |
# set global | |
current_global=$(plenv_version) | |
if [ -n "${global}" ]; then | |
if [ "${global}" != "${previous_global}" ]; then | |
if [ "$(plenv_global ${global})" = "yes" ]; then | |
ret_set_global=1 | |
else | |
printf "failed=true msg=\"failed to set perl-${global} as global\"" | |
exit 1 | |
fi | |
else | |
if [ "$(plenv_global ${global})" != "yes" ]; then | |
printf "failed=true msg=\"failed to restore perl-${global} as global\"" | |
exit 1 | |
fi | |
fi | |
else | |
if [ "${current_global}" != "${previous_global}" ]; then | |
if [ "$(plenv_global ${previous_global})" != "yes" ]; then | |
printf "failed=true msg=\"failed to restore perl-${previous_global} as global\"" | |
exit 1 | |
fi | |
fi | |
fi | |
# result | |
if [ ${ret_install_perl} -gt 0 -o ${ret_install_cpanm} -gt 0 -o ${ret_set_global} -gt 0 ]; then | |
chown -r $(get_uid):$(get_gid) $PLENV_ROOT | |
changed="true" | |
fi | |
[ ${ret_install_perl} -gt 0 ] && messages=("${messages[@]}" "perl=\"${perl}\"") | |
[ ${ret_install_cpanm} -gt 0 ] && messages=("${messages[@]}" "cpanm=\"${perl}\"") | |
[ ${ret_set_global} -gt 0 ] && messages=("${messages[@]}" "global=\"${global}\"") | |
if [ ${#messages[*]} -gt 0 ]; then | |
eval 'message="${messages[*]}"' | |
fi | |
echo "rc=0 changed=${changed} message=$message" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment