我的Ansible手册中有一个相当长的任务,即使用APT安装各种软件包。这项任务在我的笔记本电脑上需要很长时间。有没有办法让Ansible回复"回声"它在迭代整个软件包时安装了哪个项目,这样我就可以了解这个任务需要多长时间?
- name: install global packages
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
become_user: root
with_items:
- git
- vim
- bash-completion
- bash-doc
- wput
- tree
- colordiff
- libjpeg62-turbo-dev
- libopenjpeg-dev
- zlib1g-dev
- libwebp-dev
- libffi-dev
- libncurses5-dev
- python-setuptools
- python-dev
- python-doc
- python-pip
- virtualenv
- virtualenvwrapper
- python-psycopg2
- postgresql-9.4
- postgresql-server-dev-9.4
- postgresql-contrib
- postgresql-doc-9.4
- postgresql-client
- postgresql-contrib-9.4
- postgresql-9.4-postgis-2.1
- postgis-doc
- postgis
- nginx
- supervisor
- redis-server
答案 0 :(得分:2)
总的来说,Ansible实际上确实如此。它将分别输出每个项目。引擎盖意味着:它构建一个python包,将其上传到主机并执行它 - 为每个项目。
apt
和yum
模块已针对循环进行了优化。 Ansible不是循环遍历每个项目,而是构建一个可以一次性安装所有循环项的包。
您的命令会转换为以下内容:
apt-get -y install git vim bash-completion bash-doc wput ...
所以在这种情况下,不,没有办法输出单独的步骤来查看Ansible的位置。因为没有单独的步骤。
apt
模块的文档缺少yum
module页面中提供的注释:
当与剧本中的包名称循环一起使用时,ansible会优化对yum模块的调用。每次通过循环时,ansible不会使用单个包调用模块,而是使用循环中的所有包名称调用模块一次。
当您使用远程计算机时,这实际上是一种更好的行为。这大大加快了比赛的速度。如果你在本地运行你的剧本,当然没有太大的好处。
一个简单的解决方法是不使用apt模块,而是运行shell命令。
- name: install global packages
shell: apt-get -y install {{ item }}
become: True
答案 1 :(得分:1)
使用以下方式查找您的ansible安装目录:
> python -c 'import ansible; print ansible.__file__'
/usr/local/lib/python2.7/dist-packages/ansible/__init__.pyc
备份<ansible_install>/runner/__init__.py
文件
/usr/local/lib/python2.7/dist-packages/ansible/runner/__init__.py
编辑文件,搜索&#39; apt&#39;并删除&#39; apt&#39;从列表中。
if len(items) and utils.is_list_of_strings(items) and self.module_name in [ 'apt', 'yum', 'pkgng' ]:
到
if len(items) and utils.is_list_of_strings(items) and self.module_name in [ 'yum', 'pkgng' ]:
多数民众赞成!
答案 2 :(得分:0)
当我想在剧本版本上获得更多反馈时,我会根据目的将包裹组合在一起。 cache_valid_time
允许您在没有每次更新repo缓存的正常惩罚的情况下执行此操作。我发现这也提高了可读性和文档。
- name: install global packages
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- git
- vim
- bash-completion
- bash-doc
- wput
- tree
- colordiff
- libjpeg62-turbo-dev
- libopenjpeg-dev
- zlib1g-dev
- libwebp-dev
- libffi-dev
- libncurses5-dev
- name: install python and friends
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- python-setuptools
- python-dev
- python-doc
- python-pip
- virtualenv
- virtualenvwrapper
- python-psycopg2
- name: install postgresql
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- postgresql-9.4
- postgresql-server-dev-9.4
- postgresql-contrib
- postgresql-doc-9.4
- postgresql-client
- postgresql-contrib-9.4
- postgresql-9.4-postgis-2.1
- name: install postgis
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- postgis-doc
- postgis
- name: install nginx
apt: pkg=nginx update_cache=yes cache_valid_time=3600
become: True
- name: install supervisor
apt: pkg=supervisor update_cache=yes cache_valid_time=3600
become: True
- name: install redis
apt: pkg=redis-server update_cache=yes cache_valid_time=3600
become: True