aboutsummaryrefslogtreecommitdiff
path: root/kolla/docker/neutron/neutron-base/haproxy
blob: 43b9ef9d2874ba648cc0cabc9fc3804ef970b847 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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"