#!/bin/bash source /usr/local/etc/neutron-wrappers/config ARGS="$@" # Extract the network namespace UUID from the command line args provided by # neutron. Typically of the form (with dnsmasq as an example): # # dnsmasq --no-hosts --no-resolv --except-interface=lo \ # --pid-file=/var/lib/neutron/dhcp/317716b8-919a-4a6f-8db1-78128ec3b100/pid \ # --dhcp-hostsfile=/var/lib/neutron/dhcp/317716b8-919a-4a6f-8db1-78128ec3b100/host ... NETNS=$(ip netns identify) NAME=${KOLLA_NAME}_haproxy_${NETNS} HAPROXY_CMD='$(if [ -f /usr/sbin/haproxy-systemd-wrapper ]; then echo "/usr/sbin/haproxy -Ds"; else echo "/usr/sbin/haproxy -Ws"; fi)' if [[ -S "/var/run/docker.sock" ]]; then CLI="docker" CMD="ip netns exec ${NETNS} "'$HAPROXY' elif [[ -S "/run/podman/podman.sock" ]]; then CLI="nsenter --net=/run/netns/${NETNS} --preserve-credentials -m -t 1 podman" CMD='$HAPROXY' else echo "Could not detect a supported container runtime, exiting." exit 1 fi LIST=$($CLI ps -a --filter name=${KOLLA_NAME}_haproxy_ --format '{{.ID}}:{{.Names}}:{{.Status}}' | awk '{print $1}') # If the NAME is already taken by a container, give it an unique name printf "%s\n" "${LIST}" | grep -q "${NAME}$" && NAME="${NAME}_$(date +%Y-%m-%d-%H%M%S-%N)" echo "Starting a new child container ${NAME} using image ${KOLLA_IMAGE}" $CLI run --rm --detach \ -v /etc/kolla/${KOLLA_SERVICE_NAME}:/etc/neutron:ro \ -v /run/netns:/run/netns:shared \ -v neutron_metadata_socket:/var/lib/neutron/kolla \ -v kolla_logs:/var/log/kolla \ --net host \ --pid host \ --cgroupns host \ --privileged \ -u root \ --name $NAME \ ${KOLLA_IMAGE} \ /bin/bash -c "HAPROXY=\"$HAPROXY_CMD\"; exec $CMD $ARGS"