install.fairie/home/.chezmoiscripts/universal/run_onchange_after_11-symlink-ansible-roles.sh.tmpl
Brian Zalewski ec4f5b8059 Update 55 files
- /home/dot_config/rclone/system/s3-docker.service.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_07-docker-plugins.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_13-post-install-packages.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-warp.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-timeshift.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-keybase.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-install-aqua-packages.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_12-install-packages.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_15-install-asdf-packages.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_19-gnome-extension-settings.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_19-theme-files.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_20-font.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_21-dconf-settings.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_45-vmware.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_46_virtualbox.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_50-crontab.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_57-netdata.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_59-connect-tailscale.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_61-plymouth-settings.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_64-grub-settings.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_80-bash-completions.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_70-misc-bug-fixes.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_06-bin-symlink.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_40-firefox.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_40-chrome.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_28-privoxy.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_27-tor.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_24-vpn-linux.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_26-system-vscode-node-modules.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_26-vscode-extensions.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_07-docker-plugins.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_05-log-config.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_04-environment-profile.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_11-symlink-ansible-roles.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-warp.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-timeshift.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-keybase.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_14-install-aqua-packages.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_12-install-packages.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_15-install-asdf-packages.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_18-install-sdkman.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_19-gnome-extension-settings.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_19-theme-files.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_20-font.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_21-dconf-settings.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_45-vmware.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_46_virtualbox.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_50-crontab.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_57-netdata.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_59-connect-tailscale.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_61-plymouth-settings.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_64-grub-settings.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_80-bash-completions.sh.tmpl
- /home/.chezmoiscripts/universal/run_onchange_after_70-misc-bug-fixes.sh.tmpl
2023-04-12 03:26:25 +00:00

92 lines
4.8 KiB
Bash

#!/usr/bin/env bash
# @file Ansible Roles / Gas Station Symlinks
# @brief Symlinks roles that are part of the [Gas Station](https://github.com/megabyte-labs/gas-station) project to a location that Ansible can digest
# @description
# Install Doctor was previously called Gas Station. It was also Ansible based. Some of the features that Install Doctor
# provides are made available via Ansible roles that Gas Station provides. This script symlinks Gas Station's roles
# so that they can be leveraged by Install Doctor.
#
# Some of the roles that Gas Station provides are not available via Ansible Galaxy yet. This script symlinks Gas Station
# roles to an Ansible Galaxy / Ansible friendly location.
#
# ## Ansible Installation
#
# If Ansible is not already installed, this script will also install Ansible and all the necessary requirements using `pipx`.
# This script must run before the `install-packages` script because some of the Ansible roles might be leveraged by it.
#
# ## TODO
#
# * Move installation logic into the ZX installer so that Ansible and its dependencies are only installed when required
# * Remove Ansible dependency completely
{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}
{{ $roleDirs := (output "find" (joinPath .chezmoi.homeDir ".local" "src" "gas-station" "roles") "-mindepth" "2" "-maxdepth" "2" "-type" "d") -}}
{{- range $roleDir := splitList "\n" $roleDirs -}}
{{- if ne $roleDir "" -}}
# {{ $roleDir }}
{{- end -}}
{{- end }}
logg info 'Ensuring Gas Station roles are symlinked to ~/.local/share/ansible/roles'
mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles"
find "$HOME/.local/src/gas-station/roles" -mindepth 2 -maxdepth 2 -type d | while read ROLE_PATH; do
ROLE_FOLDER="professormanhattan.$(echo "$ROLE_PATH" | sed 's/.*\/\([^\/]*\)$/\1/')"
ALT_ROLE_FOLDER="$(echo "$ROLE_PATH" | sed 's/.*\/\([^\/]*\)$/\1/')"
if [ ! -d "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ROLE_FOLDER" ] || [ "$(readlink -f "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ROLE_FOLDER")" != "$ROLE_PATH" ]; then
logg info 'Symlinking `'"$ROLE_FOLDER"'`'
rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ROLE_FOLDER"
ln -s "$ROLE_PATH" "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ROLE_FOLDER"
fi
if [ ! -d "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ALT_ROLE_FOLDER" ] || [ "$(readlink -f "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ALT_ROLE_FOLDER")" != "$ROLE_PATH" ]; then
rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ALT_ROLE_FOLDER"
ln -s "$ROLE_PATH" "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/roles/$ALT_ROLE_FOLDER"
fi
done
if [ -f "$HOME/.local/src/gas-station/requirements.yml" ]; then
### Install Ansible Galaxy and dependencies if missing
if ! command -v ansible-galaxy > /dev/null; then
if ! command -v pipx > /dev/null; then
logg info 'Installing pipx via Homebrew'
brew install pipx
logg info 'Running `pipx ensurepath`'
pipx ensurepath
fi
logg info 'Installing `ansible-core` via pipx'
pipx install ansible-core
if [ -d /Applications ] && [ -d /System ]; then
logg info 'Injecting macOS-specific pipx dependencies via pipx'
pipx inject ansible-core PyObjC PyObjC-core
fi
logg info 'Injecting Ansible dependencies via pipx'
pipx inject ansible-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog
mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/megabyte-labs"
touch "${XDG_CACHE_HOME:-$HOME/.cache}/megabyte-labs/ansible-installed"
fi
### Ensure Ansible Galaxy was successfully loaded and then install the Ansible Galaxy requirements
if command -v ansible-galaxy > /dev/null; then
logg info 'Ensuring Ansible Galaxy collections are installed'
export ANSIBLE_CONFIG="${XDG_DATA_HOME:-$HOME/.local/share}/ansible/ansible.cfg"
ansible-galaxy install -r "${XDG_DATA_HOME:-$HOME/.local/share}/ansible/requirements.yml" || EXIT_CODE=$?
if [ -n "$EXIT_CODE" ]; then
logg error 'Failed to install Ansible requirements from Ansible Galaxy'
if [ -d "$HOME/.local/src/gas-station/collections" ]; then
logg info 'Attempting to use locally stored Ansible requirements'
cd "$HOME/.local/src/gas-station/collections"
ansible-galaxy install -r requirements.yml || SECOND_EXIT_CODE=$?
if [ -n "$SECOND_EXIT_CODE" ]; then
logg error 'Failed to install requirements from both the cloud and the local copy' && exit 1
fi
else
logg warn '~/.local/src/gas-station/collections is missing'
fi
fi
else
logg warn 'Unable to install the Ansible Galaxy requirements.yml since the ansible-galaxy executable is missing from the PATH'
fi
else
logg warn '~/.local/share/ansible/requirements.yml is missing'
fi