|
#!/bin/bash |
|
#------------------------------------------------- |
|
# |
|
# Create Ansible directory structure |
|
# |
|
# Reference: https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#content-organization |
|
# |
|
#------------------------------------------------- |
|
role_name=$1 |
|
|
|
help() { |
|
cat <<END |
|
ansible-cookie-cutter — Create Ansible directory structure |
|
|
|
Usage: |
|
ansible-cookie-cutter <main_role_name> |
|
Options: |
|
<main_role_name> Name for the main role |
|
-h Show this message |
|
END |
|
} |
|
|
|
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then |
|
help |
|
return |
|
fi |
|
|
|
echo "Creating directories and files for $role_name..." |
|
|
|
# ansible conf |
|
mkdir etc |
|
cat <<END >etc/ansible.cfg |
|
[defaults] |
|
inventory = ./production |
|
deprecation_warnings=False |
|
END |
|
|
|
# README file |
|
cat <<END >README.md |
|
# Ansible role for $role_name |
|
|
|
## Example playbook |
|
|
|
## Author |
|
|
|
END |
|
|
|
# inventory file |
|
cat <<END >production |
|
[my box] |
|
0.0.0.0 |
|
END |
|
|
|
# playbooks |
|
mkdir playbooks |
|
touch playbooks/site.yml |
|
|
|
# roles |
|
mkdir -p roles/$role_name/tasks |
|
mkdir -p roles/$role_name/handlers |
|
mkdir -p roles/$role_name/templates |
|
# files for use with the copy resource |
|
mkdir -p roles/$role_name/files |
|
# variables associated with this role |
|
mkdir -p roles/$role_name/vars |
|
# default lower priority variables for this role |
|
mkdir -p roles/$role_name/defaults |
|
# role dependencies |
|
mkdir -p roles/$role_name/meta |
|
mkdir -p roles/$role_name/library |
|
mkdir -p roles/$role_name/module_utils |
|
mkdir -p roles/$role_name/lookup_plugins |
|
# main files for roles |
|
touch roles/$role_name/tasks/main.yml |
|
touch roles/$role_name/handlers/main.yml |
|
touch roles/$role_name/templates/tpl.j2 |
|
touch roles/$role_name/files/foo.sh |
|
touch roles/$role_name/vars/main.yml |
|
touch roles/$role_name/defaults/main.yml |
|
|
|
echo "Done!" |