dotfiles/bin/ansible-skeleton

82 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# Strict mode
set -euo pipefail
IFS=$'\n\t'
BASENAME=$(basename $0)
# Define role subdirectories
VALID_SUBDIRS=(defaults files handlers meta tasks templates vars)
DEFAULT_SUBDIRS=(defaults tasks)
function usage {
cat << END_OF_HELPTEXT
Usage: $BASENAME ROLENAME [SUBDIRS]...
Creates a skeleton for an Ansible role under ./roles/ROLENAME with
subdirectories and main.yml files.
SUBDIRS is a subset of the following sub directories:
${VALID_SUBDIRS[@]}
If SUBDIRS is not specified, it defaults to:
${DEFAULT_SUBDIRS[@]}
END_OF_HELPTEXT
}
function inarray {
local match="$1"; shift
local el
for el; do
[[ "$el" == "$match" ]] && return 0
done
return 1
}
# Show help if no arguments are given or one of them is --help
[[ $# -eq 0 ]] && usage && exit 0
for arg in $@; do
[[ $arg == "--help" ]] && usage && exit 0
done
# Parse arguments
ROLENAME=$1
if [[ $# -eq 2 && $2 == all ]]; then
# Special value all: create all subdirectories
SUBDIRS=("${VALID_SUBDIRS[@]}")
elif [[ $# -gt 1 ]]; then
SUBDIRS=()
for arg in "${@:2}"; do
if ! inarray $arg "${VALID_SUBDIRS[@]}"; then
echo "Unknown role subdirectory: $arg" >&2
exit 1
fi
SUBDIRS+=($arg)
done
else
SUBDIRS=("${DEFAULT_SUBDIRS[@]}")
fi
ROLEDIR="roles/$ROLENAME"
# Create base directory for role
mkdir -p "$ROLEDIR"
# Create skeleton
for subdir in "${SUBDIRS[@]}"; do
echo "Creating $ROLEDIR/$subdir"
mkdir -p "$ROLEDIR/$subdir"
case "$subdir" in
defaults|handlers|meta|tasks|vars)
filename="$ROLEDIR/$subdir/main.yml"
echo "Creating $filename"
touch "$filename"
;;
esac
done