剧本中未考虑包安装

package installation not considered in playbook

我在使用 ansible 进行自动化安装时遇到了一些问题。

我使用这个角色 (https://github.com/elastic/ansible-elasticsearch) 在我的 ubuntu 16.04 服务器上安装 elasticsearch。

作用取决于包 python-jmespath,如文档中所述。

角色本身不安装包,所以我尝试在角色执行之前安装它。

- hosts: elasticsearch_master_servers
  become: yes
  tasks:
  - name: preinstall jmespath
    command: "apt-get install python-jmespath"

  - name: Run the equivalent of "apt-get update" as a separate step
    apt:
      update_cache: yes

- hosts: elasticsearch_master_servers
  become: yes
  roles:
    - role: elastic.elasticsearch
  vars:
    ... 

当 运行 运行剧本时,我希望在执行角色之前安装 python-jmespath 包,但角色执行失败

You need to install \"jmespath\" prior to running json_query filter"

当我使用 dpkg -s python-jmespath 检查包是否手动安装时,我可以看到包已正确安装。

剧本的第二个 运行(已安装软件包)没有失败。

我是否错过了一个 ansible 配置,它会在 playbook 运行 期间更新已安装软件包的列表?

我是不是做错了什么?

提前致谢

FWIW。可以标记安装任务并在第一步中安装包。例如

    - name: install packages
      package:
        name: "{{ item.name }}"
        state: "{{ item.state|default('present') }}"
        state: present
      loop: "{{ packages_needed_by_this_role }}"
      tags: manage_packages

先安装包

shell> ansible_playbook my-playbook.yml -t manage_packages

然后是运行剧本

shell> ansible_playbook my-playbook.yml

备注

  1. 这种方法使得使用“--check”检查剧本变得更加容易。

  2. 检查幂等性也更容易。

  3. With tags: [manage_packages, never] 如果未明确选择,package 任务将被跳过.这将加快剧本。