Failed stage modules-final
Bug report
Cloud-init fails to finish configuration: writing files with defer: true option haven't been executed.
Steps to reproduce the problem
user-data:
package_upgrade: true # Upgrade the instance on first boot
package_reboot_if_required: true
write_files:
- content: |
some_text_1
path: /etc/service1/file1 # has been written successfully
- content: |
some_text_1
path: /etc/service2/file2 # hasn't been written
defer: true
packages:
- lsb-release
- ifupdown
- bsdmainutils
- dctrl-tools
- debconf-utils
- dmidecode
- net-tools
Environment details
- Cloud-init version:
25.1.4-0ubuntu0~24.04.1 - Operating System Distribution:
Ubuntu 24.04.2 LTS - Cloud provider, platform or installer type: EC2
cloud-init logs
/var/log/cloud-init.log
2025-07-30 14:39:59,715 - log_util.py[ERROR]: Filename: /usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py
Function: _fire_reboot
Line number: 58
Filename: /usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py
Function: handle
Line number: 118
Filename: /usr/lib/python3/dist-packages/cloudinit/helpers.py
Function: run
Line number: 156
2025-07-30 14:39:59,715 - handlers.py[DEBUG]: finish: modules-final/config-package_update_upgrade_install: FAIL: running config-package_update_upgrade_install with frequency once-per-instance
2025-07-30 14:39:59,716 - main.py[ERROR]: failed stage modules-final
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 931, in status_wrapper
ret = functor(name, args)
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 771, in main_modules
return run_module_section(mods, name, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 140, in run_module_section
(which_ran, failures) = mods.run_section(full_section_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/modules.py", line 381, in run_section
return self._run_modules(active_mods)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/modules.py", line 297, in _run_modules
ran, _r = cc.run(
^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 71, in run
return self._runners.run(name, functor, args, freq, clear_on_fail)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 156, in run
results = functor(**args)
^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 118, in handle
_fire_reboot()
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 58, in _fire_reboot
time.sleep(wait_time)
File "/usr/lib/python3/dist-packages/cloudinit/signal_handler.py", line 85, in _handle_exit
sys.exit(_SIGNAL_EXIT_BEHAVIOR.exit_code)
SystemExit: 1
Thanks for reporting @dnsppv. I haven't been able to reproduce your issue. Per your limited logs, it looks like something does kill cloud-final.service while cloud-init tries to reboot.
I believe a reboot would let cloud-final finish executing the write_files_deferred, which would write your wanted file.
To me the issue here is: what and why is killing cloud-final.service and to solve that we need full logs at least, could you kindly provide them?
I had this error too:
Cloud-init v. 25.1.4-0ubuntu0~24.04.1 running 'modules:final' at Tue, 09 Sep 2025 14:12:42 +0000. Up 12.56 seconds.
Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Hit:2 http://zone1.clouds.archive.ubuntu.com/ubuntu noble InRelease
Get:3 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1118 kB]
Get:4 http://zone1.clouds.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://security.ubuntu.com/ubuntu noble-security/main Translation-en [191 kB]
Get:6 http://security.ubuntu.com/ubuntu noble-security/main amd64 Components [21.6 kB]
Get:7 http://security.ubuntu.com/ubuntu noble-security/main amd64 c-n-f Metadata [8708 B]
Get:8 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [879 kB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/universe Translation-en [194 kB]
Get:10 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Components [52.2 kB]
Get:11 http://security.ubuntu.com/ubuntu noble-security/universe amd64 c-n-f Metadata [18.0 kB]
Get:12 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [1705 kB]
Get:13 http://security.ubuntu.com/ubuntu noble-security/restricted Translation-en [382 kB]
Get:14 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Components [212 B]
Get:15 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [18.5 kB]
Get:16 http://security.ubuntu.com/ubuntu noble-security/multiverse Translation-en [4288 B]
Get:17 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Components [212 B]
Get:18 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 c-n-f Metadata [380 B]
Get:19 http://zone1.clouds.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:20 http://zone1.clouds.archive.ubuntu.com/ubuntu noble/universe amd64 Packages [15.0 MB]
Filename: /usr/lib/python3.12/subprocess.py
Function: _try_wait
Line number: 2011
Filename: /usr/lib/python3.12/subprocess.py
Function: _wait
Line number: 2053
Filename: /usr/lib/python3.12/subprocess.py
Function: wait
Line number: 1264
2025-09-09 14:12:48,900 - log_util.py[ERROR]: Filename: /usr/lib/python3.12/subprocess.py
Function: _try_wait
Line number: 2011
Filename: /usr/lib/python3.12/subprocess.py
Function: _wait
Line number: 2053
Filename: /usr/lib/python3.12/subprocess.py
Function: wait
Line number: 1264
2025-09-09 14:12:48,902 - main.py[ERROR]: failed stage modules-final
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 931, in status_wrapper
ret = functor(name, args)
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 771, in main_modules
return run_module_section(mods, name, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 140, in run_module_section
(which_ran, failures) = mods.run_section(full_section_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/modules.py", line 381, in run_section
return self._run_modules(active_mods)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/modules.py", line 297, in _run_modules
ran, _r = cc.run(
^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 71, in run
return self._runners.run(name, functor, args, freq, clear_on_fail)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 156, in run
results = functor(**args)
^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 81, in handle
cloud.distro.update_package_sources()
File "/usr/lib/python3/dist-packages/cloudinit/distros/__init__.py", line 416, in update_package_sources
manager.update_package_sources(force=force)
File "/usr/lib/python3/dist-packages/cloudinit/distros/package_management/apt.py", line 112, in update_package_sources
self.runner.run(
File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 158, in run
results = functor(*args)
^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/distros/package_management/apt.py", line 176, in run_package_command
self._wait_for_apt_command(
File "/usr/lib/python3/dist-packages/cloudinit/distros/package_management/apt.py", line 215, in _wait_for_apt_command
return subp.subp(**subp_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 272, in subp
out, err = sp.communicate(data, timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/subprocess.py", line 1201, in communicate
self.wait()
File "/usr/lib/python3.12/subprocess.py", line 1264, in wait
return self._wait(timeout=timeout)
Hey, @dR3b, thanks confirming this issue on your side. In order to ease the triaging of this issue, would you mind attaching the logs from your instance?
@aciba90 Sure!
cloud-init:
#cloud-config
package_reboot_if_required: true
package_update: true
package_upgrade: true
packages:
- btop
- mc
Logs: cloud-init.tar.gz
@dnsppv I think that this might have been fixed in a newer version of cloud-init. We had a fix that changed some signal handling code earlier this year. Can you please try a newer version and see if this issue still exists?
@dR3b The traceback looks different, I don't think that is related to this bug report.