ansible-public/tools/ansible-evogalaxy

126 lines
2.2 KiB
Bash
Executable file

#!/bin/bash
# PoC to handle Evolix ansible-roles
# WARN: we use unstable for now
readonly PROGNAME=$(basename $0)
readonly PROGDIR=$(readlink -m $(dirname $0))
readonly ARGS="$@"
main(){
local subcommand=$1
case $subcommand in
"help")
sub_help
;;
"list")
sub_list
;;
"install")
local role=$2
local install_dir=${3:-roles}
sub_install $role $install_dir
;;
"update")
local role=$2
local install_dir=${3:-roles}
sub_update $role $install_dir
;;
*)
echo "error: unknwon command '${subcommand}'"
sub_help
;;
esac
}
sub_help(){
echo ""
echo "Usage: ansible-evogalaxy <subcommand> [options]"
echo ""
echo "Subcommands:"
echo "list"
echo "install <role> [install_dir]"
echo "update <role> [install_dir]"
echo ""
}
sub_list(){
local clone_dir=$(clone_git_repository)
list_roles $clone_dir
}
sub_install(){
local role=$1
local install_dir=$2
test -d $install_dir/$role \
&& exit_role_already_installed $role
local clone_dir=$(clone_git_repository)
test -d $clone_dir/$role \
|| exit_role_unknown $role
mkdir -p $install_dir \
&& mv $clone_dir/$role $install_dir/$role
}
sub_update(){
local role=$1
local install_dir=$2
test -d $install_dir/$role \
|| exit_role_not_installed $role
local clone_dir=$(clone_git_repository)
mv $install_dir/$role $clone_dir/$role-old \
&& mv $clone_dir/$role $install_dir/$role
}
clone_git_repository() {
local clone_dir=$(mktemp -d)
local git_repo=https://forge.evolix.org/ansible-roles.git
local git_branch=unstable
git clone -q -b $git_branch $git_repo $clone_dir
echo $clone_dir
}
list_roles(){
local roles_dir=$1
ls -1 $roles_dir \
| egrep -v '(.md|.yml|Vagrant)'
}
exit_role_already_installed(){
local role=$1
echo "error: role '${role}' already installed"
exit 1
}
exit_role_not_installed(){
local role=$1
echo "error: role '${role}' not installed"
exit 2
}
exit_role_unknown(){
local role=$1
echo "error: unknown role '${role}'"
exit 3
}
main $ARGS