diff --git a/snapcraft/hooks/connect-plug-ovn-conf b/snapcraft/hooks/connect-plug-ovn-conf new file mode 100755 index 000000000..d6cd44302 --- /dev/null +++ b/snapcraft/hooks/connect-plug-ovn-conf @@ -0,0 +1,51 @@ +#!/bin/sh +set -eu + +# Re-exec outside of apparmor confinement +if [ -d /sys/kernel/security/apparmor ]; then + label="$(cat /proc/self/attr/current 2>/dev/null)" + if [ "$label" != "unconfined" ] && [ -n "${label##*(unconfined)}" ]; then + exec aa-exec -p unconfined -- "$0" "$@" + fi +fi + +# Utility functions +get_bool() { + value=$(echo "${1:-}" | tr '[:upper:]' '[:lower:]') + + # See if it's true + for yes in "true" "1" "yes" "on"; do + if [ "${value}" = "${yes}" ]; then + echo "true" + return + fi + done + + # See if it's false + for no in "false" "0" "no" "off"; do + if [ "${value}" = "${no}" ]; then + echo "false" + return + fi + done + + # Invalid value (or not set) + return +} + +# Only create symlinks if /etc has been generated by daemon.start. +if [ -e "/etc/.lxd_generated" ]; then + ovn_builtin=$(get_bool "$(snapctl get ovn.builtin)") + + if ! [ "${ovn_builtin:-"false"}" = "true" ]; then + mkdir /etc/ovn + ln -snf "${SNAP_DATA}/microovn/data/pki/client-cert.pem" /etc/ovn/cert_host + ln -snf "${SNAP_DATA}/microovn/data/pki/client-privkey.pem" /etc/ovn/key_host + ln -snf "${SNAP_DATA}/microovn/data/pki/cacert.pem" /etc/ovn/ovn-central.crt + fi + + openvswitch_builtin=$(get_bool "$(snapctl get openvswitch.builtin)") + if ! [ "${openvswitch_builtin:-"false"}" = "true" ]; then + ln -snf "${SNAP_DATA}/microovn/run/switch" /run/openvswitch + fi +fi diff --git a/snapcraft/hooks/disconnect-plug-ovn-conf b/snapcraft/hooks/disconnect-plug-ovn-conf new file mode 100755 index 000000000..c8d433225 --- /dev/null +++ b/snapcraft/hooks/disconnect-plug-ovn-conf @@ -0,0 +1,70 @@ +#!/bin/sh +set -eu + +# Re-exec outside of apparmor confinement +if [ -d /sys/kernel/security/apparmor ]; then + label="$(cat /proc/self/attr/current 2>/dev/null)" + if [ "$label" != "unconfined" ] && [ -n "${label##*(unconfined)}" ]; then + exec aa-exec -p unconfined -- "$0" "$@" + fi +fi + +# Utility functions +get_bool() { + value=$(echo "${1:-}" | tr '[:upper:]' '[:lower:]') + + # See if it's true + for yes in "true" "1" "yes" "on"; do + if [ "${value}" = "${yes}" ]; then + echo "true" + return + fi + done + + # See if it's false + for no in "false" "0" "no" "off"; do + if [ "${value}" = "${no}" ]; then + echo "false" + return + fi + done + + # Invalid value (or not set) + return +} + +# Only create symlinks if /etc has been generated by daemon.start. +if [ -e "/etc/.lxd_generated" ]; then + ovn_builtin=$(get_bool "$(snapctl get ovn.builtin)") + if [ "${ovn_builtin:-"false"}" = "true" ]; then + mkdir -p "${SNAP_COMMON}/ovn" + ln -s "${SNAP_COMMON}/ovn" /etc/ovn + else + ln -s /var/lib/snapd/hostfs/etc/ovn /etc/ovn + fi + + openvswitch_builtin=$(get_bool "$(snapctl get openvswitch.builtin)") + if [ "${openvswitch_builtin:-"false"}" = "true" ]; then + echo "=> Starting Open vSwitch" + export OVS_RUNDIR="${SNAP_COMMON}/openvswitch/run/" + ( + set -e + export OVS_LOGDIR="${SNAP_COMMON}/openvswitch/logs/" + export OVS_DBDIR="${SNAP_COMMON}/openvswitch/db/" + export OVS_SYSCONFDIR="${SNAP_COMMON}/openvswitch/conf/" + export OVS_PKGDATADIR="${SNAP}/share/openvswitch/" + export OVS_BINDIR="${SNAP}/bin/" + export OVS_SBINDIR="${SNAP}/bin/" + + mkdir -p "${OVS_SYSCONFDIR}/openvswitch" + ( + # Close socket activation fd + exec 3<&- || true + + "${SNAP}/share/openvswitch/scripts/ovs-ctl" start --system-id=random + ) + ) + else + ln -s /var/lib/snapd/hostfs/run/openvswitch /run/openvswitch + fi +fi