diff --git a/bridgehead b/bridgehead index 1951a7f..9483767 100755 --- a/bridgehead +++ b/bridgehead @@ -146,6 +146,10 @@ case "$ACTION" in loadVars exec ./lib/update-bridgehead.sh $PROJECT ;; + check) + loadVars &> /dev/null + exec ./lib/check-bridgehead.sh $PROJECT + ;; install) source ./lib/prepare-system.sh NODEV loadVars diff --git a/lib/check-bridgehead.sh b/lib/check-bridgehead.sh new file mode 100755 index 0000000..57ca537 --- /dev/null +++ b/lib/check-bridgehead.sh @@ -0,0 +1,74 @@ +#!/bin/bash +source lib/functions.sh + +log INFO "Running Bridgehead checks..." + +# Directory ownership +log INFO "Checking directory ownership..." +OWNERSHIP_OK=true +if ! checkOwner /srv/docker/bridgehead bridgehead &> /dev/null; then + log ERROR "Wrong ownership for /srv/docker/bridgehead." + log INFO "Hint: Run 'sudo chown -R bridgehead /srv/docker/bridgehead'." + OWNERSHIP_OK=false +fi +if ! checkOwner /etc/bridgehead bridgehead &> /dev/null; then + log ERROR "Wrong ownership for /etc/bridgehead." + log INFO "Hint: Run 'sudo chown -R bridgehead /etc/bridgehead'." + OWNERSHIP_OK=false +fi + +if [ "$OWNERSHIP_OK" = true ]; then + log INFO "Directory ownership is correct." +fi + +# Git repository status +log INFO "Checking Git repository status..." +GIT_OK=true +if [ -d "/etc/bridgehead/.git" ]; then + if [ -n "$(git -C "/etc/bridgehead" status --porcelain)" ]; then + log ERROR "The config repo at /etc/bridgehead is modified.\n$(git -C /etc/bridgehead status -s)" + log INFO "Hint: Review your changes with git diff if they are already upstreamed use git stash and git pull to update the repo" + GIT_OK=false + fi +fi +if [ -n "$(git -C "$(pwd)" status --porcelain)" ]; then + log ERROR "$(pwd) is modified. \n$(git -C "$(pwd)" status -s)" + log INFO "Hint: If these are site specific changes to docker compose files consider moving them to $PROJECT/docker-compose.override.yml which is ignored by git." + log INFO " If they are already upstreamed use git stash and git pull to update the repo" + GIT_OK=false +fi + +if [ "$GIT_OK" = true ]; then + log INFO "Git repositories are clean." +fi + +# Git remote connection +log INFO "Checking Git remote connection..." +GIT_REMOTE_OK=true +if [ -d "/etc/bridgehead/.git" ]; then + if ! git -C "/etc/bridgehead" fetch --dry-run >/dev/null 2>&1; then + log ERROR "Cannot connect to the Git remote for /etc/bridgehead." + log INFO "Hint: Check your network connection and Git remote configuration for /etc/bridgehead." + GIT_REMOTE_OK=false + fi +fi +if [ -d "$(pwd)/.git" ]; then + if ! git -C "$(pwd)" fetch --dry-run >/dev/null 2>&1; then + log ERROR "Cannot connect to the Git remote for $(pwd)." + log INFO "Hint: Check your network connection and Git remote configuration for $(pwd)." + GIT_REMOTE_OK=false + fi +fi + +if [ "$GIT_REMOTE_OK" = true ]; then + log INFO "Git remote connection successful." +fi + +if [ "$OWNERSHIP_OK" = true ] && [ "$GIT_OK" = true ] && [ "$GIT_REMOTE_OK" = true ]; then + log INFO "All checks passed." + exit 0 +else + log ERROR "Some checks failed. Please review the hints and fix the issues." + log ERROR "Without fixing these issues bridgehead updates may not work correctly." + exit 1 +fi diff --git a/lib/functions.sh b/lib/functions.sh index 12308c0..379e122 100644 --- a/lib/functions.sh +++ b/lib/functions.sh @@ -53,7 +53,7 @@ checkOwner(){ } printUsage() { - echo "Usage: bridgehead start|stop|logs|docker-logs|is-running|update|install|uninstall|adduser|enroll PROJECTNAME" + echo "Usage: bridgehead start|stop|logs|docker-logs|is-running|update|check|install|uninstall|adduser|enroll PROJECTNAME" echo "PROJECTNAME should be one of ccp|bbmri|cce|itcc|kr|dhki" }