Ubuntu Cloud Init: Setting DNS not working

This might have worked in previous versions of cloud-init.
I assume the image you're using has cloud-init 22.1 or 22.2 installed?
 
This might have worked in previous versions of cloud-init.
I assume the image you're using has cloud-init 22.1 or 22.2 installed?
Yes, 22.2-0ubuntu1~22.04.2


Edit:
Also checked on Debian 11.3:
/usr/bin/cloud-init 20.4.1

So it might actually be version related.
But that also means Debian will have the same problem at some point
 
Last edited:
Yes, 22.2-0ubuntu1~22.04.2


Edit:
Also checked on Debian 11.3:
/usr/bin/cloud-init 20.4.1

So it might actually be version related.
But that also means Debian will have the same problem at some point
Not necessarily if it is a renderer issue, rather than an issue with the source.

I am having the exact same issue.
Did you find a way to solve it ?
For now the workaround would be to manually create a network config for cloud-init [0] using the network configuration v2 format [1].


[0] https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_cloud_init
[1] https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html
 
Hi @mira, Link [1] above is now at : https://cloudinit.readthedocs.io/en/latest/reference/network-config-format-v2.html#network-config-v2

@Vengance:

You can reference the relevant section:
https://cloudinit.readthedocs.io/en...l#dhcp4-overrides-and-dhcp6-overrides-mapping

And the definitions:
https://netplan.readthedocs.io/en/latest/netplan-yaml/#dhcp-overrides

So if you create a snippet file with the required v2 config:

eg. /mnt/pve/cephfs/snippets/network-debian-12.yaml

YAML:
version: 2
ethernets:
  eth0:
    dhcp4: true
    match:
      macaddress: bc:24:11:80:df:de
    set-name: eth0
    dhcp4-overrides:
      use-dns: true
      use-domains: true

You can then replace the default v1 network config with this file:

qm set <vm-id> --cicustom "network=cephfs:snippets/network-debian-12.yaml"

If you wish to use the snippet with multiple images you may need to use a mechanism other than macaddress to match the network adapter.
 
  • Like
Reactions: mira
Also worth noting is that the set-name: eth0 option causes a race condition with persistient network interface naming in some images that prevents matching on anything other than mac address.

eg. this works:
YAML:
version: 2
ethernets:
  ens18:
    dhcp4: true
    match:
      driver: virtio_net
    dhcp4-overrides:
      use-dns: true
      use-domains: true
but this doesn't:
YAML:
version: 2
ethernets:
  eth0:
    dhcp4: true
    match:
      driver: virtio_net
    set-name: eth0
    dhcp4-overrides:
      use-dns: true
      use-domains: true
 
version: 2
ethernets:
eths18:
dhcp4: true
match:
name: enp0s*
dhcp4-overrides:
use-dns: true
use-domains: true
Hi @mira, Link [1] above is now at : https://cloudinit.readthedocs.io/en/latest/reference/network-config-format-v2.html#network-config-v2

@Vengance:

You can reference the relevant section:
https://cloudinit.readthedocs.io/en...l#dhcp4-overrides-and-dhcp6-overrides-mapping

And the definitions:
https://netplan.readthedocs.io/en/latest/netplan-yaml/#dhcp-overrides

So if you create a snippet file with the required v2 config:

eg. /mnt/pve/cephfs/snippets/network-debian-12.yaml

YAML:
version: 2
ethernets:
  eth0:
    dhcp4: true
    match:
      macaddress: bc:24:11:80:df:de
    set-name: eth0
    dhcp4-overrides:
      use-dns: true
      use-domains: true

You can then replace the default v1 network config with this file:

qm set <vm-id> --cicustom "network=cephfs:snippets/network-debian-12.yaml"
Hi @mira, Link [1] above is now at : https://cloudinit.readthedocs.io/en/latest/reference/network-config-format-v2.html#network-config-v2

@Vengance:

You can reference the relevant section:
https://cloudinit.readthedocs.io/en...l#dhcp4-overrides-and-dhcp6-overrides-mapping

And the definitions:
https://netplan.readthedocs.io/en/latest/netplan-yaml/#dhcp-overrides

So if you create a snippet file with the required v2 config:

eg. /mnt/pve/cephfs/snippets/network-debian-12.yaml

YAML:
version: 2
ethernets:
  eth0:
    dhcp4: true
    match:
      macaddress: bc:24:11:80:df:de
    set-name: eth0
    dhcp4-overrides:
      use-dns: true
      use-domains: true

You can then replace the default v1 network config with this file:

qm set <vm-id> --cicustom "network=cephfs:snippets/network-debian-12.yaml"

If you wish to use the snippet with multiple images you may need to use a mechanism other than macaddress to match the network adapter.

If you wish to use the snippet with multiple images you may need to use a mechanism other than macaddress to match the network adapter.

Matching with macaddresss is not a good idea, especially when making a VM template. I use name instead:

```
version: 2
ethernets:
eths18:
dhcp4: true
match:
name: enp0s*
dhcp4-overrides:
use-dns: true
use-domains: true
```