#!/usr/bin/env bash echo echo "vagrant longhorn installation" echo ssh-add ~/.ssh/vm*_key source /home/vagrant/ansible/venv/bin/activate ANSIBLE_SUPPRESS_INTERPRETER_DISCOVERY_WARNING=1 ANSIBLE_HOST_KEY_CHECKING=False ansible --inventory-file /home/vagrant/ansible/ansible_inventory.ini -m ping vm1,vm2,vm3 if [ $? -ne 0 ]; then echo "Ansible ping failed. Please check your Vagrant VMs and network configuration." exit 1 fi echo "Ansible ping successful." # Check if there are any pods in the longhorn-system namespace if kubectl -n longhorn-system get pods --no-headers 2>/dev/null | grep -q '^[^ ]'; then echo "Pods already exist in the longhorn-system namespace. Skipping installation." exit 0 fi echo "Installing Longhorn prerequisites..." # install_longhorn_prereqs.yaml ANSIBLE_SUPPRESS_INTERPRETER_DISCOVERY_WARNING=1 ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ~/ansible/install_longhorn_prereqs.yaml --inventory-file /home/vagrant/ansible/ansible_inventory.ini if [ $? -ne 0 ]; then echo "Ansible playbook failed. Please check the playbook and your inventory." exit 1 fi echo "installing Longhorn ..." # https://github.com/longhorn/longhorn/releases # v1.8.1 in prod 1.9.1 is latest LONGHORN_RELEASE="v1.8.1" LONGHORN_RELEASE_URL="https://raw.githubusercontent.com/longhorn/longhorn/$LONGHORN_RELEASE/deploy/longhorn.yaml" echo "Applying Longhorn release $LONGHORN_RELEASE..." echo "Using Longhorn release URL: $LONGHORN_RELEASE_URL" kubectl apply -f $LONGHORN_RELEASE_URL # Wait for all pods in longhorn-system namespace to be ready echo "Waiting for Longhorn pods to be ready..." while true; do not_ready=$(kubectl -n longhorn-system get pods --no-headers 2>/dev/null | grep -vE 'Running|Completed' | wc -l) total=$(kubectl -n longhorn-system get pods --no-headers 2>/dev/null | wc -l) if [[ $total -gt 0 && $not_ready -eq 0 ]]; then echo "All Longhorn pods are ready." break fi sleep 10 done