From ab4a881398e0e850932345f727fc92a1c8d4d41c Mon Sep 17 00:00:00 2001 From: LinuxSquare Date: Fri, 30 Aug 2024 00:35:53 +0200 Subject: [PATCH] add dialog screen to configure serverspecific playbooks --- functions/configmgmt | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/functions/configmgmt b/functions/configmgmt index c29e614..2afd586 100644 --- a/functions/configmgmt +++ b/functions/configmgmt @@ -45,3 +45,40 @@ function config_single() { fi ansible-playbook $([[ $debuglevel -eq 4 ]] && echo '-v') $([[ $dryrun -eq 1 ]] && echo '-C') -D "$newpath" } + +function config_configure() { + # Check if serverspecific.ansible.yml exists, if not: create + if [[ ! -f "$CONFIG_ROOT/serverspecific.ansible.yml" ]]; then + touch "$CONFIG_ROOT/serverspecific.ansible.yml" + fi + # Check if 'serverspecific' is inside top.ansible.yml, if not: append + if [[ -z $(grep "serverspecific" "$CONFIG_ROOT/top.ansible.yml") ]]; then + echo "- import_playbook: serverspecific.ansible.yml" >> "$CONFIG_ROOT/top.ansible.yml" + fi + + available_playbooks=($(find "$CONFIG_ROOT" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | grep -vE "^\.[a-z]+")) + available_playbooks+=($(find "$CONFIG_ROOT" -mindepth 1 -maxdepth 1 -type f -exec basename {} \; | grep -vE "^\.[a-z]+" | grep -v "top.*" | grep -v "map." | grep -v "serverspecific.")) + + top_content=($(cat "$CONFIG_ROOT/top.ansible.yml" | cut -d: -f2 | cut -d/ -f1 | awk '{$1=$1};1')) + + echo "${available_playbooks[@]}" + for top_item in ${top_content[@]}; do + available_playbooks=( $(echo "${available_playbooks[@]/$top_item}" | awk '{$1=$1};1') ) + done + echo "${available_playbooks[@]}" + + local dialog_string + for playbook in "${available_playbooks[@]}"; do + [[ $(grep "$playbook" "$CONFIG_ROOT/serverspecific.ansible.yml") ]] && playbook="$playbook:on" || playbook="$playbook:off" + echo "$playbook" + dialog_string="${dialog_string} $(echo $playbook | cut -d: -f1) .. $(echo $playbook | cut -d: -f2)" + done + + selected=($(dialog --output-fd 1 --clear --title "Select additional playbooks to apply" --checklist "available playbooks" 10 70 3 $dialog_string)) + if [[ -n "${selected[@]}" ]]; then + rm -f "$CONFIG_ROOT/serverspecific.ansible.yml" + for sel in "${selected[@]}"; do + echo "- import_playbook: $sel/init.ansible.yml" >> "$CONFIG_ROOT/serverspecific.ansible.yml" + done + fi +}