cloud-init icon indicating copy to clipboard operation
cloud-init copied to clipboard

Failed stage modules-final

Open dnsppv opened this issue 5 months ago • 6 comments

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

dnsppv avatar Jul 30 '25 15:07 dnsppv

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?

aciba90 avatar Sep 05 '25 11:09 aciba90

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)

dR3b avatar Sep 09 '25 14:09 dR3b

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 avatar Sep 10 '25 11:09 aciba90

@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

dR3b avatar Sep 11 '25 09:09 dR3b

@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?

holmanb avatar Nov 20 '25 19:11 holmanb

@dR3b The traceback looks different, I don't think that is related to this bug report.

holmanb avatar Nov 20 '25 19:11 holmanb