Cloud init is re-executing fs and disk setup during reboot
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
cloud-init |
Fix Released
|
Medium
|
Paul Meyer | ||
cloud-init (Ubuntu) |
Fix Released
|
Medium
|
Unassigned | ||
Xenial |
Fix Released
|
Medium
|
Unassigned | ||
Yakkety |
Fix Released
|
Medium
|
Unassigned | ||
Zesty |
Fix Released
|
Medium
|
Unassigned |
Bug Description
=== Begin SRU Template ===
[Impact]
VMs on MS Azure have an ephemeral disk attached to them.
On first boot, cloud-init properly notices the empty ntfs filesystem and
reformats it ext4.
After deallocating the instance or moving to a new azure host,
the filesystem reformat is logged, but isn't actually performed because
the udev device creation may not have settled.
[Test Case]
Test cases:
1. Deploy an instance VM on Azure
2. Log in and ensure that the ephemeral disk is formatted and mounted to /mnt
3. Via the portal you can "Redeploy" the VM to a new Azure Host (or alternatively stop and deallocate the VM for some time, and then restart/reallocate the VM).
Expected Results:a
- Check cloud-init.log expecting to see logs from cc_disk_setup about the mount.
- After reallocation we expect the ephemeral disk to be formatted and mounted to /mnt.
Actual Results:
- After reallocation /mnt is not mounted and there are errors in the cloud-init log.
[Regression Potential]
Regression potential should be extremely low on this change.
Essentially the change was to add the function 'assert_
then to use it. See the commit linked below.
The most likely regression is just slower boot. The most likely unexpected change in behavior is getting a RunTimeError due to 'assert_
[Other Info]
Upstream commit at
https:/
=== End SRU Template ===
Cloud Provider: Azure
dpkg-query -W -f='${Version}' cloud-init output: 0.7.9-90-
When the following is specified in cloud init it seems to be re-executing fs and disk setup (even though run command does not seem to re run)
disk_setup:
/dev/sdc:
table_type: gpt
layout: true
overwrite: false
fs_setup:
- label: etcd_disk
filesystem: ext4
device: /dev/sdc1
extra_opts:
- "-F"
- "-E"
- "lazy_itable_
mounts:
- - /dev/sdc1
- /var/lib/etcddisk
From cloud-init-
Cloud-init v. 0.7.9 running 'modules:final' at Mon, 15 May 2017 18:33:15 +0000. Up 64.24 seconds.
Cloud-init v. 0.7.9 finished at Mon, 15 May 2017 18:34:46 +0000. Datasource DataSourceAzureNet [seed=/dev/sr0]. Up 155.34 seconds
Cloud-init v. 0.7.9 running 'init-local' at Tue, 16 May 2017 01:52:37 +0000. Up 10.33 seconds.
Cloud-init v. 0.7.9 running 'init' at Tue, 16 May 2017 01:52:39 +0000. Up 12.06 seconds.
From cloud-init.log for the initial provision:
2017-05-15 18:32:46,820 - cc_disk_
2017-05-15 18:32:46,820 - cc_disk_
2017-05-15 18:32:46,820 - util.py[DEBUG]: Running command ['/sbin/mkfs.ext4', '/dev/sdc1', '-L', 'etcd_disk', '-F', '-E', 'lazy_itable_
2017-05-15 18:33:04,054 - util.py[DEBUG]: Creating fs for /dev/sdc1 took 17.237 seconds
and after reboot (cloud-init.log)
2017-05-16 01:52:40,245 - cc_disk_
2017-05-16 01:52:40,246 - cc_disk_
2017-05-16 01:52:40,246 - util.py[DEBUG]: Running command ['/sbin/mkfs.ext4', '/dev/sdc1', '-L', 'etcd_disk', '-F', '-E', 'lazy_itable_
Related branches
- Server Team CI bot: Approve (continuous-integration)
- Ryan Harper: Approve
- Paul Meyer (community): Approve
-
Diff: 76 lines (+25/-3)2 files modifiedcloudinit/config/cc_disk_setup.py (+23/-3)
tests/unittests/test_handler/test_handler_disk_setup.py (+2/-0)
- Scott Moser: Needs Fixing
- Server Team CI bot: Needs Fixing (continuous-integration)
-
Diff: 19 lines (+2/-0)1 file modifiedcloudinit/config/cc_disk_setup.py (+2/-0)
Changed in cloud-init: | |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu): | |
status: | New → Fix Released |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu Xenial): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Yakkety): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Zesty): | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu Xenial): | |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu Yakkety): | |
importance: | Undecided → Medium |
Changed in cloud-init (Ubuntu Zesty): | |
importance: | Undecided → Medium |
Changed in cloud-init: | |
status: | Confirmed → Fix Committed |
description: | updated |
description: | updated |
description: | updated |
Repro script with fix: https:/ /gist.github. com/paulmey/ 1a4f35a687d7559 dca612a0eda8d57 93
This is apparently a race condition that leaves lsblk without FSTYPE and LABEL. Cloud-init is then unable to verify that the partition is already formatted correctly and can be reused. This can be fixed by doing a 'udevadm settle' before doing 'lsblk' in enumerate_disk in cc_disk_setup.py.