| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 1 | #!/bin/bash | 
 | 2 | # | 
 | 3 | # Copyright 2015 Hewlett-Packard Development Company, L.P. | 
 | 4 | # | 
 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | 
 | 6 | # not use this file except in compliance with the License. You may obtain | 
 | 7 | # a copy of the License at | 
 | 8 | # | 
 | 9 | #    http://www.apache.org/licenses/LICENSE-2.0 | 
 | 10 | # | 
 | 11 | # Unless required by applicable law or agreed to in writing, software | 
 | 12 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
 | 13 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
 | 14 | # License for the specific language governing permissions and limitations | 
 | 15 | # under the License. | 
 | 16 |  | 
 | 17 | # Ping a neutron guest using a network namespace probe | 
 | 18 |  | 
 | 19 | set -o errexit | 
 | 20 | set -o pipefail | 
 | 21 |  | 
 | 22 | TOP_DIR=$(cd $(dirname "$0")/.. && pwd) | 
 | 23 |  | 
 | 24 | # This *must* be run as the admin tenant | 
 | 25 | source $TOP_DIR/openrc admin admin | 
 | 26 |  | 
 | 27 | function usage { | 
 | 28 |     cat - <<EOF | 
 | 29 | ping_neutron.sh <net_name> [ping args] | 
 | 30 |  | 
 | 31 | This provides a wrapper to ping neutron guests that are on isolated | 
 | 32 | tenant networks that the caller can't normally reach. It does so by | 
| Brian Haley | 6764eab | 2023-05-12 16:34:08 -0400 | [diff] [blame] | 33 | using either the DHCP or Metadata network namespace to support both | 
 | 34 | ML2/OVS and OVN. | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 35 |  | 
 | 36 | It takes arguments like ping, except the first arg must be the network | 
 | 37 | name. | 
 | 38 |  | 
 | 39 | Note: in environments with duplicate network names, the results are | 
 | 40 | non deterministic. | 
 | 41 |  | 
 | 42 | This should *really* be in the neutron cli. | 
 | 43 |  | 
 | 44 | EOF | 
 | 45 |     exit 1 | 
 | 46 | } | 
 | 47 |  | 
| Brian Haley | 6764eab | 2023-05-12 16:34:08 -0400 | [diff] [blame] | 48 | # BUG: with duplicate network names, this fails pretty hard since it | 
 | 49 | # will just pick the first match. | 
 | 50 | function _get_net_id { | 
 | 51 |     openstack --os-cloud devstack-admin --os-region-name="$REGION_NAME" --os-project-name admin --os-username admin --os-password $ADMIN_PASSWORD network list | grep $1 | head -n 1 | awk '{print $2}' | 
 | 52 | } | 
 | 53 |  | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 54 | NET_NAME=$1 | 
 | 55 |  | 
 | 56 | if [[ -z "$NET_NAME" ]]; then | 
 | 57 |     echo "Error: net_name is required" | 
 | 58 |     usage | 
 | 59 | fi | 
 | 60 |  | 
| Stanislaw Szydlo | aa81e2e | 2015-07-27 10:54:44 +0200 | [diff] [blame] | 61 | REMAINING_ARGS="${@:2}" | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 62 |  | 
| Brian Haley | 6764eab | 2023-05-12 16:34:08 -0400 | [diff] [blame] | 63 | NET_ID=`_get_net_id $NET_NAME` | 
 | 64 | NET_NS=$(ip netns list | grep "$NET_ID" | head -n 1) | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 65 |  | 
 | 66 | # This runs a command inside the specific netns | 
| Brian Haley | 6764eab | 2023-05-12 16:34:08 -0400 | [diff] [blame] | 67 | NET_NS_CMD="ip netns exec $NET_NS" | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 68 |  | 
| Stanislaw Szydlo | aa81e2e | 2015-07-27 10:54:44 +0200 | [diff] [blame] | 69 | PING_CMD="sudo $NET_NS_CMD ping $REMAINING_ARGS" | 
| Sean Dague | af9bf86 | 2015-04-16 08:58:32 -0400 | [diff] [blame] | 70 | echo "Running $PING_CMD" | 
 | 71 | $PING_CMD |