#!/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 [options]" echo "" echo "Subcommands:" echo "list" echo "install [install_dir]" echo "update [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