如何在Ansible apt模块中使用sourcelist、sourceparts、List-Cleanup选项?
问题
希望通过Ansible的apt模块执行以下apt命令:
apt-get update -o Dir::Etc::sourcelist="sources.list.d/mypackages.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
不想通过shell模块实现该操作,原shell模块写法如下:
- name: update apt package manager with parameters shell: 'apt-get update -o Dir::Etc::sourcelist="sources.list.d/mypackages.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"'
执行完更新操作后,会执行以下安装任务:
- name: install plugin and core package apt: pkg: - dump_plugin - core state: present allow_unauthenticated: yes update_cache: yes
请问如何在Ansible的apt模块中使用sourcelist、sourceparts、List-Cleanup这三个选项?
解决方案
Ansible的apt模块提供了apt_options参数,可直接传递额外的APT命令行配置选项,无需依赖shell模块即可实现需求。
1. 单独执行指定源的缓存更新
用update_cache触发更新操作,同时通过apt_options传入需要的三个配置参数:
- name: 更新指定源的APT缓存 apt: update_cache: yes cache_valid_time: 0 # 强制立即更新,忽略缓存有效期 apt_options: '-o Dir::Etc::sourcelist="sources.list.d/mypackages.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"'
2. 执行软件包安装
因为已经单独完成指定源的缓存更新,安装任务可以关闭全局缓存更新,避免重复操作:
- name: 安装插件和核心包 apt: pkg: - dump_plugin - core state: present allow_unauthenticated: yes update_cache: no
说明
apt_options参数会将填入的命令行选项直接传递给底层的apt-get或aptitude命令,所以可以直接复用原命令中的-o参数,实现和原生apt命令完全一致的效果。
内容的提问来源于stack exchange,提问作者Shubham Saroj
相关产品推荐
相关产品推荐

