install.fairie/home/dot_local/share/ansible/test/windows/test.sh

60 lines
1.8 KiB
Bash
Raw Normal View History

2023-07-15 22:40:26 -07:00
#!/usr/bin/env bash
# @file test/windows/test.sh
# @brief A script that is used to test an Ansible role on Windows from a WSL environment (or possibly Docker)
#
# @description This script is intended to be run in a WSL environment on a Windows host to provision the Windows
# host via Ansible using WinRM and CredSSP.
TEST_TYPE='windows'
# @description Ensure Ansible is installed along with required dependencies
if ! type ansible &> /dev/null; then
pip3 install ansible 'pywinrm[credssp]'
fi
# @description Ensure Ansible Galaxy dependencies are installed
if [ -f requirements.yml ]; then
ansible-galaxy install -r requirements.yml
fi
# @description Symlink the Ansible Galaxy role name to the working directory one level up
ROLE_NAME="$(grep "role:" test/windows/test.yml | sed 's^- role: ^^' | xargs)"
ln -s "$(basename "$PWD")" "../$ROLE_NAME"
# @description Back up files and then copy replacements
function backupAndCopyFiles() {
if [ -f ansible.cfg ]; then
cp ansible.cfg ansible.cfg.bak
fi
cp "test/$TEST_TYPE/ansible.cfg" ansible.cfg
if [ -f test.yml ]; then
cp test.yml test.yml.bak
fi
cp "test/$TEST_TYPE/test.yml" test.yml
}
# @description Restores files that were backed up
function restoreFiles() {
if [ -f ansible.cfg.bak ]; then
mv ansible.cfg.bak ansible.cfg
fi
if [ -f test.yml.bak ]; then
mv test.yml.bak test.yml
fi
}
# @description Calls [restoreFiles] and exits with an error
function restoreFilesAndExitError() {
restoreFiles
exit 1
}
# @description Silence error about ansible.cfg being writable
export ANSIBLE_CONFIG="$PWD/ansible.cfg"
# @description Back up files, run the play, and then restore files
backupAndCopyFiles
ansible-playbook -i "test/$TEST_TYPE/inventory" test.yml || restoreFilesAndExitError
restoreFiles