Skip to content

Instantly share code, notes, and snippets.

@kun432
Last active August 29, 2015 14:05
Show Gist options
  • Save kun432/19e85b2a42e553e15738 to your computer and use it in GitHub Desktop.
Save kun432/19e85b2a42e553e15738 to your computer and use it in GitHub Desktop.
ansible module sample (plenv)
#!/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