Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
  • Hardware
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
    • Application credentials
    • Authentificaton
    • Barbican (Secret)
    • CLI client (OSC)
    • Cleanup OpenStack
    • Cloud images
    • Designate (DNSaaS)
    • DevStack
    • Gerrit / OpenDev
    • Glance (image)
    • Heat
    • Horizon
    • Ironic / Bifrost
    • Magnum
    • MicroStack
    • Mistral
    • Neutron (network)
      • Address Scopes
      • Check OpenvSwitch
      • Create probe
      • Debug DHCP
      • Find router binding_host_id mismatch
      • Floating IPs
      • Ping VM from IP namespace
      • RBAC
      • port
      • router
    • Object storage
    • Octavia (loadbalancer)
    • OpenStack GPU passthrough
    • OpenvSwitch (OVS)
    • Quota
    • RabbitMQ
    • VPN
    • block storage volume (cinder)
    • compute (nova)
    • control
    • diskimage-builder
    • flavor
    • gnocchi
    • kolla-ansible
    • project
    • resource provider
    • server (VM)
    • user
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid
  • openstack
  • neutron
  • nova

Ping VM from IP namespace

#!/bin/bash

# check parameter
if [ -z $1 ]; then
    echo "Usage $0 "
    exit
else
    export SERVER_ID=${1}
fi

source /etc/kolla/admin-openrc.sh

# search for VM by name
if [ ${#SERVER_ID} -ne 36 ]; then
    RESULT="$(openstack server list --all --name ${SERVER_ID})"
    if [ $(echo "${RESULT}" | wc -l) -eq 5 ]; then
        SERVER_ID=$(echo "${RESULT}" | tail -2 | head -1 | cut -d " " -f2)
    else
        echo "Found several VMs, please choose one from:"
        echo "${RESULT}"
        exit 0
    fi
fi

# get port id
PORT_ID=$(openstack port list --server ${SERVER_ID} -c id -f value)

# fixme: add support for multiple ports
if [ $(echo "${PORT_ID}" | wc -l) -eq 1 ]; then
    NETWORK_ID=$(openstack port show ${PORT_ID} -c network_id -f value)
    PORT_IP=$(openstack server show ${SERVER_ID} -c addresses -f value | cut -d "=" -f2 | cut -d "," -f1)

    # NEW OSC: SECURITY_GROUP_ID=$(openstack port show ${PORT_ID} -c security_group_ids -f json | jq -r 'first(.security_group_ids[])')
    SECURITY_GROUP_IDS=$(openstack port show ${PORT_ID} -c security_group_ids -f json | jq -r .security_group_ids | tr ',' '\n')

    # check if ingress icmp security rule exists
    for SECURITY_GROUP_ID in ${SECURITY_GROUP_IDS}; do
        SECURITY_GROUP_RULE_ID=$(openstack security group rule list ${SECURITY_GROUP_ID} --ingress --protocol icmp -c ID -f value)
    done

    # check if icmp security group rule found
    if [ -z ${SECURITY_GROUP_RULE_ID} ]; then
        # create security group rule to allow incomming icmp traffic
        echo "Creating new ICMP security group rule"
        TMP_SECURITY_GROUP_RULE_ID=$(openstack security group rule create --protocol icmp ${SECURITY_GROUP_ID} -c id -f value)
        SECURITY_GROUP_RULE_ID=${TMP_SECURITY_GROUP_RULE_ID}

        sleep 5
    fi

    # ping VM from active router
    ROUTER_PORT_JSON=$(openstack port list --network ${NETWORK_ID} --device-owner network:ha_router_replicated_interface -c binding_host_id -c device_id -c "Fixed IP Addresses" -f json | jq -c 'first')
    if [ ! -z "${ROUTER_PORT_JSON}" ]; then
        ROUTER_HOST=$(echo ${ROUTER_PORT_JSON} | jq -r .binding_host_id)
        ROUTER_DEVICE_ID=$(echo ${ROUTER_PORT_JSON} | jq -r .device_id)
        ROUTER_IP=$(echo ${ROUTER_PORT_JSON} | jq -r '."Fixed IP Addresses"' | cut -d"'" -f2)

        echo "# Ping VM ${PORT_IP} from router namespace ${ROUTER_IP} at ${ROUTER_HOST}"
        ssh ${ROUTER_HOST} ip netns exec qrouter-${ROUTER_DEVICE_ID} ping -W 1 -c 5 ${PORT_IP} | while read result; do echo "$(date): $result"; done

        echo
    fi

    DHCP_PORTS_JSON=$(openstack port list --network ${NETWORK_ID} --device-owner network:dhcp -c binding_host_id -f value --sort-column binding_host_id -c "Fixed IP Addresses" -f json --sort-column binding_host_id | jq -c '.[]')
    IFS=$(echo -en "\n\b")
    for DHCP_PORT_JSON in ${DHCP_PORTS_JSON}; do
        DHCP_HOST=$(echo ${DHCP_PORT_JSON} | jq -r .binding_host_id)
        DHCP_PORT_IP=$(echo ${DHCP_PORT_JSON} | jq -r '."Fixed IP Addresses"' | cut -d"'" -f2)

        echo "# Ping VM ${PORT_IP} from DHCP namespace ${DHCP_PORT_IP} at ${DHCP_HOST}"
        ssh ${DHCP_HOST} ip netns exec qdhcp-${NETWORK_ID} ping -W 1 -c 5 ${PORT_IP} | while read result; do echo "$(date): $result"; done

        echo
    done

    # remove temoprary icmp securitgy grup rule
    if [ ! -z ${TMP_SECURITY_GROUP_RULE_ID} ]; then
        echo "Removing temporatry icmp security group rule ${TMP_SECURITY_GROUP_RULE_ID}"
        openstack security group rule delete ${TMP_SECURITY_GROUP_RULE_ID}
    fi
else
    echo "Multiple ports found"
    echo ${PORT_ID}
fi

Post ping check

#!/bin/bash

source /etc/kolla/admin-openrc.sh
cd /tmp/

# ping today migrated VMs
for SERVER_ID in $(nova migration-list | grep $(date -I) | cut -d"|" -f8 | sort -u); do
    openstack server show ${SERVER_ID} -c name -c id -c project_id
    nova migration-list --instance-uuid ${SERVER_ID} | grep $(date -I)

    ping-vm.sh ${SERVER_ID} | tee /tmp/live_migrate_ping_${SERVER_ID}_$(date -I).txt
    echo
done

# get results
grep "packet loss" /tmp/*$(date -I)*.txt | grep -v " 0% packet loss"
Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung