I have verified that when using ip=dhcp / ip6=dhcp on the kernel cmdline to boot to a remote filesystem; initramfs's scripts correctly write "critical: true" in /run/netplan/<interface>.yaml, and that config is correctly interpreted by netplan as being entirely valid, and generates a configuration for systemd-networkd that avoids releasing IP from DHCP on 'netplan apply'.
In such an environment, running 'netplan apply' correctly leaves IP addresses coming from DHCP untouched. "CriticalConnection=true" is present in the generated config for networkd.
Verification done with netplan.io 0.40.1~18.04.1:
I have verified that when using ip=dhcp / ip6=dhcp on the kernel cmdline to boot to a remote filesystem; initramfs's scripts correctly write "critical: true" in /run/netplan/ <interface> .yaml, and that config is correctly interpreted by netplan as being entirely valid, and generates a configuration for systemd-networkd that avoids releasing IP from DHCP on 'netplan apply'.
In such an environment, running 'netplan apply' correctly leaves IP addresses coming from DHCP untouched. "CriticalConnec tion=true" is present in the generated config for networkd.