From bd759942908af8a431a6d113201ccfc604c29960 Mon Sep 17 00:00:00 2001 From: mcnesium Date: Tue, 26 Jul 2022 11:54:39 +0200 Subject: [PATCH] run the playbook on multiple hosts with different credentials with this script --- docs/configuring-playbook.md | 1 + examples/host.yml | 7 ++++++ inventory/scripts/ansible-all-hosts.sh | 32 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 examples/host.yml create mode 100755 inventory/scripts/ansible-all-hosts.sh diff --git a/docs/configuring-playbook.md b/docs/configuring-playbook.md index e5301df13..aff801c23 100644 --- a/docs/configuring-playbook.md +++ b/docs/configuring-playbook.md @@ -18,6 +18,7 @@ You can then follow these steps inside the playbook directory: 1. edit the inventory hosts file (`inventory/hosts`) to your liking +1. if you want to run multiple servers with different credentials, you can copy the sample inventory hosts yaml file for each of your hosts: (`cp examples/host.yml inventory/my_host1.yml` …) and use the [`ansible-all-hosts.sh`](inventory/scripts/ansible-all-hosts.sh) script [in then next step](installing.md). For a basic Matrix installation, that's all you need. For a more custom setup, see the [Other configuration options](#other-configuration-options) below. diff --git a/examples/host.yml b/examples/host.yml new file mode 100644 index 000000000..e561bd497 --- /dev/null +++ b/examples/host.yml @@ -0,0 +1,7 @@ +matrix_servers: + hosts: + matrix.: + ansible_host: + ansible_ssh_user: + become: true + become_user: root diff --git a/inventory/scripts/ansible-all-hosts.sh b/inventory/scripts/ansible-all-hosts.sh new file mode 100755 index 000000000..c88077ec9 --- /dev/null +++ b/inventory/scripts/ansible-all-hosts.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# +# Run the playbook on multiple hosts with different credentials with this script +# It defaults to ansible tags "setup-all,start". You can pass alternative tags +# to this script as arguments, e.g. +# +# ./inventory/scripts/ansible-all-hosts.sh self-check +# + +# set inventory directory path +inventory=$(dirname "$(readlink -f "$0")")/../../inventory + +# set default tags or get from first argument if any +tags="${1:-setup-all,start}" + +# init password array +declare -A pws + +# capture passwords for all hosts +for host in "$inventory"/*.yml; do + read -rp "sudo password for $(basename "$host"): " -s pw + pws[$host]="$pw" + echo +done + +# run ansible on all captured passwords/hosts +for host in "${!pws[@]}"; do + ansible-playbook setup.yml \ + --inventory-file "$host" \ + --extra-vars "ansible_become_pass=${pws[$host]}" \ + --tags="$tags" +done