Brain Droppings

From the mind of Chris Weibel


Verifying Cloud Foundry Route Counts

28 Apr 2017

map

Photo by Steve Smith on Unsplash

Occasionally you may run into an issue where the routes between the routers and nats are not in a consistent state. To detect this issue log onto a server with connectivity to your BOSH director and copy the following bash script onto it

Let’s get our ducks in a row!

#!/usr/bin/env bash

DEPLOYMENT=$1
RUSER=$2
RPASSWORD=$3

if [[ -z ${DEPLOYMENT} ]]; then
  echo "No deployment specified."
  exit 1
fi

if [[ -z ${RUSER} ]]; then
  echo "No router user specified"
  exit 1
fi

if [[ -z ${RPASSWORD} ]]; then
  echo "No router user password specified"
  exit 1
fi

if ! [ -x "$(command -v jq)" ]; then
  echo 'jq is not installed and is requried - please install' >&2
  exit 2
fi

for ip in $(bosh vms $DEPLOYMENT| grep router_z | grep -oE "[0-9]+\..*[0-9]+"); do
  echo Router IP Address: $ip
  temp_length=$(curl -s http://$RUSER:$RPASSWORD@$ip:8080/routes | jq length)
  echo Router Routes length: $temp_length
  temp_length=
done

To use this script you will need to retrieve the router username and password from your deployment manifest and call the script with the following parameters:

script <deployment name> <router.status.user> <router.status.password>

This will generate output similar to:

Router IP Address: 10.8.8.100
Router Routes length: 12121
Router IP Address: 10.8.8.101
Router Routes length: 12121
Router IP Address: 10.8.8.102
Router Routes length: 4336

If there are inconsistencies you likely just need to monit restart on all of the nats servers.