29 lines
1.5 KiB
Django/Jinja
29 lines
1.5 KiB
Django/Jinja
#!/usr/bin/env bash
|
|
|
|
# {{ ansible_managed }}
|
|
|
|
set -e
|
|
|
|
# NOTE(cloudnull): Should a container already be up and running with a defined container interface
|
|
# the shell command will use the MAC address already set within the container as
|
|
# it's value. This allows the tasks to remain idempotent while ensuring that a
|
|
# container restart isn't required to set a static mac.
|
|
# This task is being done to allow a container to have a static mac address.
|
|
# before this task a container had a dynamic mac address which would
|
|
# change when a container was restarted. This restart process causes terrible
|
|
# issues in several network intensive systems (RabbitMQ, Neutron, etc). To
|
|
# resolve the rotating mac address issue this task is setting the mac in a hwaddr
|
|
# file and a lookup is being used in the container-interface.ini template to render
|
|
# the static hardware address as expected.
|
|
C_PID="$(lxc-info --name {{ inventory_hostname }} --pid | awk '/PID:/ {print $2}')"
|
|
C_ADDR="/proc/${C_PID}/root/sys/class/net/{{ item.value.interface }}/address"
|
|
HARDWARE_ADDR="/var/lib/lxc/{{ inventory_hostname }}/{{ item.value.interface }}.hwaddr"
|
|
HEXCHARS="0123456789abcdef"
|
|
if ! cat "${C_ADDR}" > "${HARDWARE_ADDR}"; then
|
|
echo "00:16:3e$(
|
|
for i in {1..6}; do
|
|
echo -n "${HEXCHARS:$(( $RANDOM % 16 )):1}"
|
|
done | sed -e 's/\(..\)/:\1/g'
|
|
)" > "${HARDWARE_ADDR}"
|
|
fi
|