#!/bin/bash
#
# Copyright 2015 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

# Ping a neutron guest using a network namespace probe

set -o errexit
set -o pipefail

TOP_DIR=$(cd $(dirname "$0")/.. && pwd)

# This *must* be run as the admin tenant
source $TOP_DIR/openrc admin admin

function usage {
    cat - <<EOF
ping_neutron.sh <net_name> [ping args]

This provides a wrapper to ping neutron guests that are on isolated
tenant networks that the caller can't normally reach. It does so by
creating a network namespace probe.

It takes arguments like ping, except the first arg must be the network
name.

Note: in environments with duplicate network names, the results are
non deterministic.

This should *really* be in the neutron cli.

EOF
    exit 1
}

NET_NAME=$1

if [[ -z "$NET_NAME" ]]; then
    echo "Error: net_name is required"
    usage
fi

REMAINING_ARGS="${@:2}"

# BUG: with duplicate network names, this fails pretty hard.
NET_ID=$(neutron net-list | grep "$NET_NAME" | awk '{print $2}')
PROBE_ID=$(neutron-debug probe-list -c id -c network_id | grep "$NET_ID" | awk '{print $2}' | head -n 1)

# This runs a command inside the specific netns
NET_NS_CMD="ip netns exec qprobe-$PROBE_ID"

PING_CMD="sudo $NET_NS_CMD ping $REMAINING_ARGS"
echo "Running $PING_CMD"
$PING_CMD
