82 lines
1.7 KiB
Bash
Executable File
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
|