check_interface.sh.j2 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env bash
  2. # if default ip route != given interface, exit 1
  3. function get_ip_by_interface(){
  4. local interface="$1"
  5. if [ -z "$interface" ]; then
  6. return 1
  7. fi
  8. ip a s "$interface" |grep -o 'inet [a-z:0-9.]*' | sed -e 's#[^0-9.]*##' | grep {{ ansible_host }}
  9. }
  10. function get_current_interface(){
  11. local interface
  12. if [ -n "$(get_ip_by_interface {{ db_nic }})" ] ; then
  13. echo {{ db_nic }}
  14. return
  15. fi
  16. if [ -n "$(get_ip_by_interface br0)" ]; then
  17. echo br0
  18. return
  19. fi
  20. interface=$(ip route | awk '/default/ { print $5 }')
  21. if [ -n "$interface" ] ; then
  22. echo "$interface"
  23. return
  24. fi
  25. return -1
  26. }
  27. env_interface="$(cat /etc/keepalived/keepalived.conf| grep -w interface |awk '{print $2}')"
  28. router_interface="$(get_current_interface)"
  29. logger "got router interface: $router_interface"
  30. if [[ "$router_interface" != "$env_interface" ]]; then
  31. logger "replace interface $env_interface with $router_interface"
  32. sed -i -e "s#$env_interface#$router_interface#g" /etc/keepalived/keepalived.conf
  33. systemctl restart keepalived
  34. else
  35. logger "interface $router_interface OK"
  36. fi