Cloud-init: Difference between revisions
Initial content |
cloudinit not setting static IP |
||
| Line 1: | Line 1: | ||
Cloud-init is a program that configures a guest virtual machine when it first boots based on configuration data that's supplied to it via network or a storage volume. It is capable of setting things like the guest's network configuration (IP addresses, routes, resolvers), account credentials or SSH authorized keys. | Cloud-init is a program that configures a guest virtual machine when it first boots based on configuration data that's supplied to it via network or a storage volume. It is capable of setting things like the guest's network configuration (IP addresses, routes, resolvers), account credentials or SSH authorized keys. | ||
== Proxmox == | ==Proxmox== | ||
Proxmox supports cloud-init using either the NoCloud (v1, used for Linux based guest OSes) or ConfigDrive (v2, used for Windows based guest OSes) data sources. To learn more about different Cloud-Init data sources, see https://cloudinit.readthedocs.io/en/latest/topics/datasources.html#known-sources. | Proxmox supports cloud-init using either the NoCloud (v1, used for Linux based guest OSes) or ConfigDrive (v2, used for Windows based guest OSes) data sources. To learn more about different Cloud-Init data sources, see https://cloudinit.readthedocs.io/en/latest/topics/datasources.html#known-sources. | ||
| Line 10: | Line 10: | ||
# /etc/cloud/cloud.cfg.d/99_pve.cfg | # /etc/cloud/cloud.cfg.d/99_pve.cfg | ||
datasource_list: [ NoCloud, ConfigDrive ] | datasource_list: [ NoCloud, ConfigDrive ] | ||
}} | |||
== Troubleshooting == | |||
=== Cloud-Init isn't setting the static IP address === | |||
On Alpine Linux, Cloud-Init runs but the VM is still obtaining the IP address via DHCP. | |||
After much debugging, I believe the issue comes down to the networking service starting before cloud-init. As a result, the network configs in /etc/network/interfaces isn't being written to by Cloud-Init in time and the networking service uses DHCP. The fix here is to make networking start after cloud-init. To do this, remove the networking service from the boot runlevel and re-add it to the default runlevel. Because 'networking' comes after 'cloud-init', cloud-init should run before networking. | |||
As part of my packer provisioning script, I added the following lines: | |||
{{Highlight | |||
| code = ## Start ntworking after cloudinit? | |||
# rc-update del networking boot | |||
# rc-update add networking default | |||
| lang = terminal | |||
}} | }} | ||
Revision as of 22:54, 30 December 2021
Cloud-init is a program that configures a guest virtual machine when it first boots based on configuration data that's supplied to it via network or a storage volume. It is capable of setting things like the guest's network configuration (IP addresses, routes, resolvers), account credentials or SSH authorized keys.
Proxmox
Proxmox supports cloud-init using either the NoCloud (v1, used for Linux based guest OSes) or ConfigDrive (v2, used for Windows based guest OSes) data sources. To learn more about different Cloud-Init data sources, see https://cloudinit.readthedocs.io/en/latest/topics/datasources.html#known-sources.
NoCloud configuration data is passed to the guest using a 4MB CD-ROM image. If you are creating a new VM, you must attach this CD-ROM device under 'Hardware' -> 'Add' -> 'CloudInit Drive'. Any changes made to the Cloud-Init settings will require this CD-ROM image to be regenerated.
When using Proxmox, on the guest OS, you may wish to add the following Cloud-Init setting so that Cloud-Init only checks the two supported data sources:
# /etc/cloud/cloud.cfg.d/99_pve.cfg
datasource_list: [ NoCloud, ConfigDrive ]
Troubleshooting
Cloud-Init isn't setting the static IP address
On Alpine Linux, Cloud-Init runs but the VM is still obtaining the IP address via DHCP.
After much debugging, I believe the issue comes down to the networking service starting before cloud-init. As a result, the network configs in /etc/network/interfaces isn't being written to by Cloud-Init in time and the networking service uses DHCP. The fix here is to make networking start after cloud-init. To do this, remove the networking service from the boot runlevel and re-add it to the default runlevel. Because 'networking' comes after 'cloud-init', cloud-init should run before networking.
As part of my packer provisioning script, I added the following lines:
## Start ntworking after cloudinit?
# rc-update del networking boot
# rc-update add networking default