Can Ansible" echo"安装它们的物品?

时间:2016-01-23 20:17:47

标签: ansible ansible-playbook

我的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

3 个答案:

答案 0 :(得分:2)

总的来说,Ansible实际上确实如此。它将分别输出每个项目。引擎盖意味着:它构建一个python包,将其上传到主机并执行它 - 为每个项目。

aptyum模块已针对循环进行了优化。 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