ansible/dev-helpers.sh

116 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# source this file
function get-requirements(){
uv sync --prerelease=if-necessary-or-explicit
for req in roles/**/*/requirements.txt; do
uv pip install --prerelease=allow --requirements $req;
done
for req in roles/**/*/requirements.yml;
do ansible-galaxy install -r $req;
done
ansible-galaxy collection install -r requirements.yaml
ansible-galaxy role install -r requirements.yaml
}
function unlock(){
export BW_SESSION=$(bw unlock --raw) || return 1
echo $BW_SESSION > /tmp/urmel_ansible_bw_session
}
function clone-roles(){
local gitea_org="${1:-Urmel-Ansible-Roles}"
local gitea_url="${GITEA_URL:-git.urmel.de}"
local api="https://${gitea_url}/api/v1/orgs/${gitea_org}/repos"
local page=1
local repos
while :; do
repos=$(curl -fsSL -H "Authorization: token ${GITEA_TOKEN}" \
"${api}?limit=50&page=${page}") || return 1
[ "$(echo "$repos" | jq 'length')" -eq 0 ] && break
while read -r name; do
if [ -d "roles/${name}" ]; then
echo "Skipping ${name} (already cloned)"
else
echo "Cloning ${name}"
git clone "git@${gitea_url}:${gitea_org}/${name}.git" "roles/${name}" || return 1
fi
done < <(echo "$repos" | jq -r '.[].name')
page=$((page + 1))
done
}
function pull-services(){
local services=()
services=($(find roles/))
for service in "${services[@]}"; do
echo "Pulling $service"
git -C roles/$service pull
done
}
function create-role-here(){
mkdir defaults files libary tasks templates meta handlers
rolename=$(pwd | rev | cut -d "/" -f 1 | rev)
echo "# $rolename" > README.md
cat <<EOF> tasks/main.yml
---
- name: "set local variables from overrides and defaults"
set_fact:
${rolename}: "{{ (${rolename}_defaults | combine(${rolename}_override, recursive=True)) if ${rolename}_override else ${rolename}_defaults }}"
- name: ensure that path exists
file:
path: "{{ path }}/config/${rolename}"
state: directory
EOF
cat <<EOF> defaults/main.yml
path: /srv/{{ role_name }}
${rolename}_override: {}
${rolename}_defaults: {}
EOF
cat <<EOF> meta/main.yml
---
galaxy_info:
author: "Niklas Freese <niklas@urmel.de>"
description: ${rolename}
company: "Urmel Services"
license: AGPL-3.0-or-later
min_ansible_version: 2.1
# If this a Container Enabled role, provide the minimum Ansible Container version.
# min_ansible_container_version:
galaxy_tags: []
# List tags for your role here, one per line. A tag is a keyword that describes
# and categorizes the role. Users find roles by searching for tags. Be sure to
# remove the '[]' above, if you add tags to this list.
#
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.
# dependencies:
# - role: base
EOF
cat <<EOF> handlers/main.yml
- name: restart container
community.docker.docker_compose_v2:
project_src: "{{ path }}"
project_name: "{{ role_name }}"
recreate: "always"
services: ["${rolename}"]
state: "restarted"
when: not _${rolename}_already_restarted
EOF
}