cloud-config user-data like the following will fail to configure ansible and install extensions due to inability to find the pip installed utilities such as ansible-pull or ansible galaxy.
Cloud-init version: 24.2-0ubuntu1~22.04.1 and earlier to version 23.4
Operating System Distribution: Ubuntu and others
Cloud provider, platform or installer type: any
cloud-init logs
2024-09-15 05:41:56,999 - subp.py[DEBUG]: ['/usr/bin/python3', '-m', 'pip', 'list'] took 0.3s to run
2024-09-15 05:41:56,999 - subp.py[DEBUG]: Running command ['ansible-galaxy', 'collection', 'install', 'community.grafana'] with allowed return codes [0] (shell=False, capture=True)
2024-09-15 05:41:57,002 - handlers.py[DEBUG]: finish: modules-final/config-ansible: FAIL: running config-ansible with frequency once-per-instance
2024-09-15 05:41:57,002 - util.py[WARNING]: Running module ansible (<module 'cloudinit.config.cc_ansible' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py'>) failed
2024-09-15 05:41:57,002 - util.py[DEBUG]: Running module ansible (<module 'cloudinit.config.cc_ansible' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py'>) failed
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 260, in subp
sp = subprocess.Popen(
File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: b'ansible-galaxy'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/config/modules.py", line 286, in _run_modules
ran, _r = cc.run(
File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 60, 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_ansible.py", line 162, in handle
ansible_galaxy(galaxy_cfg, ansible)
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py", line 238, in ansible_galaxy
ansible.do_as(command)
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py", line 62, in do_as
return self.subp(command, **kwargs)
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py", line 66, in subp
return subp.subp(command, update_env=self.env, **kwargs)
File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 278, in subp
raise ProcessExecutionError(
cloudinit.subp.ProcessExecutionError: Unexpected error while running command.
Command: ['ansible-galaxy', 'collection', 'install', 'community.grafana']
Exit code: -
Reason: [Errno 2] No such file or directory: b'ansible-galaxy'
Stdout: -
Stderr: -
Bug report
cloud-config user-data like the following will fail to configure ansible and install extensions due to inability to find the pip installed utilities such as ansible-pull or ansible galaxy.
Steps to reproduce the problem
This error is easily reproducible in LXC with the following integration test:
Environment details
cloud-init logs