@@ -10,18 +10,22 @@ contents:
1010
1111 function resolv_prepender {
1212 mkdir -p /run/resolv-prepender
13- echo "DHCP6_FQDN_FQDN=$DHCP6_FQDN_FQDN" > /run/resolv-prepender/env
14- echo "IP4_DOMAINS=$IP4_DOMAINS" >> /run/resolv-prepender/env
15- echo "IP6_DOMAINS=$IP6_DOMAINS" >> /run/resolv-prepender/env
16- systemctl start on-prem-resolv-prepender
17- # Wait for the service to complete so we don't mark the network up too soon
18- while systemctl is-active on-prem-resolv-prepender
19- do
20- sleep 1
21- done
13+ echo "IP4_DOMAINS=$IP4_DOMAINS" > /run/resolv-prepender/env.new
14+ echo "IP6_DOMAINS=$IP6_DOMAINS" >> /run/resolv-prepender/env.new
15+ # If we changed the environment, we should restart the service to pick up the
16+ # new values. However, if the image hasn't been pulled successfully yet we can't
17+ # restart the service or we may interrupt the pull and end up with a corrupt image.
18+ # We're better off with incorrect search domains for a while than wedging the
19+ # system with a bad image.
20+ if ! diff -q /run/resolv-prepender/env /run/resolv-prepender/env.new && /usr/bin/podman image exists "{{ .Images.baremetalRuntimeCfgImage }}"; then
21+ >&2 echo "NM resolv-prepender: Environment variable(s) changed. Restarting service."
22+ systemctl is-active on-prem-resolv-prepender && systemctl kill on-prem-resolv-prepender
23+ fi
24+ mv -f /run/resolv-prepender/env.new /run/resolv-prepender/env
25+ systemctl start --no-block on-prem-resolv-prepender
2226 }
2327
24- export DHCP6_FQDN_FQDN IP4_DOMAINS IP6_DOMAINS
28+ export IP4_DOMAINS IP6_DOMAINS
2529 export -f resolv_prepender
2630 # Given an overall Network Manager dispatcher timeout of 90 seconds, and multiple events which
2731 # may occur within this time period, we must enforce a time limit for each event. As some
@@ -34,6 +38,16 @@ contents:
3438 >&2 echo "NM resolv-prepender: Timeout occurred"
3539 exit 1
3640 fi
41+ # If $DHCP6_FQDN_FQDN is not empty and is not localhost.localdomain and static hostname was not already set
42+ if [[ -n "$DHCP6_FQDN_FQDN" && "$DHCP6_FQDN_FQDN" != "localhost.localdomain" && "$DHCP6_FQDN_FQDN" =~ "." ]] ; then
43+ STATIC_HOSTNAME="$(test ! -e /etc/hostname && echo -n || cat /etc/hostname | xargs)"
44+
45+ if [[ -z "$STATIC_HOSTNAME" || "$STATIC_HOSTNAME" == "localhost.localdomain" ]] ; then
46+ # run with systemd-run to avoid selinux problems
47+ systemd-run --property=Type=oneshot --unit resolve-prepender-hostnamectl -Pq \
48+ hostnamectl set-hostname --static --transient $DHCP6_FQDN_FQDN
49+ fi
50+ fi
3751 ;;
3852 *)
3953 ;;
0 commit comments