Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

79 lines
2.2KB

  1. #!/bin/bash
  2. STACK_NAME=$1
  3. echo "Processing stack ${STACK_NAME} on reboot"
  4. if [ ! $# -eq 1 ]; then
  5. echo "Usage $0 <stack_name>";
  6. exit 1;
  7. fi
  8. # Script to be run on boot, on crontab
  9. # makes sure that all swarm nodes are ready, so services are split
  10. start_stack() {
  11. echo "Starting stack ${STACK_NAME}"
  12. cd ~/docker_home_server
  13. env $(cat .env | grep "^[A-Z]" | xargs) docker stack deploy --compose-file docker-compose.yml ${STACK_NAME}
  14. }
  15. stop_stack() {
  16. echo "Stopping stack ${STACK_NAME}"
  17. docker stack rm ${STACK_NAME}
  18. sleep 10
  19. docker network ls | grep ${STACK_NAME}_default
  20. if [ $? -gt 0 ]; then
  21. for i in `docker network inspect ${STACK_NAME}_default | grep Name | grep ${STACK_NAME}_ | grep -v ${STACK_NAME}_default | cut -d':' -f2 | cut -d'"' -f 2`; do
  22. echo "Disconnectiong endpoint $i from network ${STACK_NAME}_default";
  23. docker network disconnect -f ${STACK_NAME}_default $i;
  24. done;
  25. fi
  26. sleep 10
  27. }
  28. # is it running?
  29. docker stack ls | grep ${STACK_NAME}
  30. if [ $? -gt 0 ]; then
  31. start_stack
  32. fi
  33. # check workers are up
  34. TMP_FILE="/tmp/pending_nodes.txt"
  35. echo "Checking workers"
  36. for i in $(seq 1 5); do
  37. echo "Attempt 1";
  38. docker node ls --filter role=worker --format "{{.Hostname}} {{.Status}} {{.Availability}}" | grep -v "Ready Active" | tee ${TMP_FILE};
  39. PENDING=`cat ${TMP_FILE} | wc -l`
  40. echo "Pending: ${PENDING}"
  41. if [ $PENDING -eq 0 ]; then
  42. break
  43. fi
  44. sleep 30
  45. done
  46. # check workers have volumes mounted
  47. echo "Checking workers mounted volumes"
  48. echo `docker node ls --filter role=worker --format "{{.Hostname}} {{.Status}} {{.Availability}}" | grep "Ready Active" | cut -f 1 -d ' '`
  49. for node in `docker node ls --filter role=worker --format "{{.Hostname}} {{.Status}} {{.Availability}}" | grep "Ready Active" | cut -f 1 -d ' '`; do
  50. echo "Checking volumes on $node"
  51. ssh ${node}.local "mount | grep volumes || mount /media/volumes"
  52. done
  53. # restart stack
  54. stop_stack
  55. start_stack
  56. # wait for OpenLDAP
  57. sleep 120
  58. # add users
  59. # in case it's not ready yet, try 5 times
  60. for i in $(seq 1 5); do
  61. echo "Adding users - Attempt $i";
  62. ./add_users.sh ${STACK_NAME};
  63. if [ $? -eq 0 ]; then
  64. break;
  65. fi
  66. sleep 30
  67. done