Files
ansible-role-docker-compose…/create_app_role.sh
2026-01-30 15:25:07 -05:00

106 lines
2.3 KiB
Bash
Executable File

roles_path=./roles
# Convert string to valid Ansible variable name
convert_to_ansible_var() {
local input="$1"
# Replace hyphens, and spaces with underscores
local result=$(echo "$input" | tr '-' '_' | tr ' ' '_')
# Remove any characters that aren't alphanumeric or underscore
result=$(echo "$result" | tr -cd '[:alnum:]_')
# Ensure it doesn't start with a number (prepend underscore if it does)
if [[ "$result" =~ ^[0-9] ]]; then
result="_${result}"
fi
# Convert to lowercase (Ansible convention)
result=$(echo "$result" | tr '[:upper:]' '[:lower:]')
echo "$result"
}
# Check if any arguments were provided
if [ $# -eq 0 ]; then
echo "No arguments provided."
echo "Usage: $0 role1 role2 ..."
exit 1
fi
pushd $roles_path
for arg in "$@"; do
echo "Creating directory $arg"
mkdir $arg
cd $arg
echo "Creating subdirectories"
mkdir {defaults,templates,meta}
echo "Creating main.yml files"
touch {defaults,meta}/main.yml
touch templates/compose.yml.j2
app_name=$(convert_to_ansible_var "$arg")
# create files
cat > defaults/main.yml << EOF
---
app_name: $arg
# Container configuration
${app_name}_container_name: "{{ app_name | default('$arg') }}"
${app_name}_container_version: latest
${app_name}_restart_policy: "{{ app_restart_policy }}"
# Network configuration
# ${app_name}_http_port: 8080
# Volume paths
# ${app_name}_config_path: "{{ app_dir }}/config"
# ${app_name}_data_path: "{{ app_dir }}/data"
# App-specific configuration
# Add custom variables here
# Directory structure
# app_subdirectories:
# - config
# - data
# Backup configuration
# app_backup_subdirectories:
# - config
EOF
cat > meta/main.yml << EOF
---
galaxy_info:
author: <your_name>
description: Deploy $arg with Docker Compose
license: MIT
dependencies:
- role: docker_compose_app
vars:
app_role_name: $arg
EOF
cat > templates/compose.yml.j2 << EOF
---
services:
${arg}:
image: "your-image:{{ ${app_name}_container_version }}"
container_name: "{{ ${app_name}_container_name }}"
restart: "{{ ${app_name}_restart_policy }}"
# ports:
# - "{{ ${app_name}_http_port }}:8080"
# volumes:
# - "{{ ${app_name}_config_path }}:/config"
# - "{{ ${app_name}_data_path }}:/data"
EOF
cd ..
done
popd