Control role inclusion in Ansible
This commit is contained in:
parent
f4249ea484
commit
0ba0a6d1c9
|
@ -2,4 +2,4 @@
|
||||||
# code: language=ansible
|
# code: language=ansible
|
||||||
---
|
---
|
||||||
fqdn: sapt-labx-ctl01.infra.servers.sapti.me
|
fqdn: sapt-labx-ctl01.infra.servers.sapti.me
|
||||||
ansible_host: 192.168.23.8
|
ansible_host: 192.168.17.8
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
# vim: ft=yaml.ansible
|
|
||||||
# code: language=ansible
|
|
||||||
---
|
|
||||||
fqdn: sapt-labx-pve01.infra.servers.sapti.me
|
|
||||||
ansible_host: 192.168.23.3
|
|
|
@ -22,11 +22,8 @@ sapt-labr-prx01
|
||||||
# [monitor_shrd]
|
# [monitor_shrd]
|
||||||
# sapt-labr-mon01
|
# sapt-labr-mon01
|
||||||
|
|
||||||
[proxmox_infra]
|
# [control_infra]
|
||||||
sapt-labx-pve01
|
# sapt-labx-ctl01
|
||||||
|
|
||||||
[control_infra]
|
|
||||||
sapt-labx-ctl01
|
|
||||||
|
|
||||||
[production:children]
|
[production:children]
|
||||||
app_prod
|
app_prod
|
||||||
|
@ -65,6 +62,5 @@ production
|
||||||
staging
|
staging
|
||||||
shared
|
shared
|
||||||
|
|
||||||
[infrastructure:children]
|
# [infrastructure:children]
|
||||||
proxmox_infra
|
# control_infra
|
||||||
control_infra
|
|
||||||
|
|
31
site.yml
31
site.yml
|
@ -1,9 +1,34 @@
|
||||||
# vim: ft=yaml.ansible
|
# vim: ft=yaml.ansible
|
||||||
# code: language=ansible
|
# code: language=ansible
|
||||||
---
|
---
|
||||||
- name: Run playbook against ${HOSTS}
|
- name: Run playbook
|
||||||
hosts: ${HOSTS}
|
hosts: all
|
||||||
remote_user: ansible
|
remote_user: ansible
|
||||||
become: true
|
become: true
|
||||||
gather_facts: true
|
gather_facts: true
|
||||||
roles: ${ROLES}
|
tasks:
|
||||||
|
- name: Include role 'virt-common'
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: virt-common
|
||||||
|
when: hostname in groups['virtualservers']
|
||||||
|
|
||||||
|
- name: Include role 'docker'
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: docker
|
||||||
|
when: hostname in groups['appservers'] or
|
||||||
|
hostname in groups['proxyservers']
|
||||||
|
|
||||||
|
- name: Include role 'apps'
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: apps
|
||||||
|
when: hostname in groups['appservers']
|
||||||
|
|
||||||
|
- name: Include role 'postgresql'
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: postgresql
|
||||||
|
when: hostname in groups['dbservers']
|
||||||
|
|
||||||
|
- name: Include role 'proxy'
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: proxy
|
||||||
|
when: hostname in groups['proxyservers']
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
HOSTS="$1"
|
|
||||||
ROLE_LIST=( "virt-common" "docker" "apps" "postgresql" "proxy" )
|
|
||||||
|
|
||||||
# Dynamically remove roles that are incompatible with a host
|
|
||||||
OLDIFS="$IFS"
|
|
||||||
IFS=:
|
|
||||||
for target in $HOSTS; do
|
|
||||||
case $target in
|
|
||||||
*app*)
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/postgresql}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/proxy}" )
|
|
||||||
;;
|
|
||||||
*db*)
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/docker}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/apps}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/proxy}" )
|
|
||||||
;;
|
|
||||||
*mda*|media*)
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/apps}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/postgresql}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/proxy}" )
|
|
||||||
;;
|
|
||||||
*prx*|proxy*)
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/apps}" )
|
|
||||||
ROLE_LIST=( "${ROLE_LIST[@]/postgresql}" )
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
ROLE_LIST=( "virt-common" ) ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
IFS="$OLDIFS"
|
|
||||||
|
|
||||||
# Transform role list into JSON array
|
|
||||||
ROLES="$(jq -c -M -n '$ARGS.positional | map(select(length > 0))' --args -- "${ROLE_LIST[@]}")"
|
|
||||||
echo "Running roles $ROLES against $HOSTS"
|
|
||||||
|
|
||||||
# Export vars for envsubst
|
|
||||||
export HOSTS
|
|
||||||
export ROLES
|
|
||||||
|
|
||||||
# Execution of temporary envsubst'ed playbook
|
|
||||||
PLAYBOOK="playbook-$(tr -dc A-Za-z < /dev/urandom | head -c 10).yml"
|
|
||||||
envsubst < site.yml > "$PLAYBOOK"
|
|
||||||
ansible-playbook "$PLAYBOOK"
|
|
||||||
STATUS=$?
|
|
||||||
|
|
||||||
# Clean up temporary playbook
|
|
||||||
rm -f "$PLAYBOOK"
|
|
||||||
exit $STATUS
|
|
Loading…
Reference in a new issue