Richard Wieditz
Richard Wieditz

Reputation: 446

package installation not considered in playbook

I got some trouble with automating an installation using ansible.

I use this role (https://github.com/elastic/ansible-elasticsearch) to install elasticsearch on my ubuntu 16.04 server.

The role depends on the package python-jmespath, as mentioned in the documentation.

The role DOES NOT install the package itsself, so i try to install it before role execution.

- 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:
    ... 

When running the playbook i expect the python-jmespath package to be installed before execuction of role takes place, but role execution fails with

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

When i check if the package is installed manually using dpkg -s python-jmespath i can see the package is installed correctly.

A second run of the playbook (with the package already installed) doesnt fail.

Do I miss an ansible configuration, that updates the list of installed packages during the playbook run ?

Am I doing something wrong in general ?

Thanks in advance

Upvotes: 4

Views: 3486

Answers (1)

Vladimir Botka
Vladimir Botka

Reputation: 68144

FWIW. It's possible to tag installation tasks and install the packages in the first step. For example

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

Install packages first

shell> ansible_playbook my-playbook.yml -t manage_packages

and then run the playbook

shell> ansible_playbook my-playbook.yml

Notes

  1. This approach makes checking of the playbooks with "--check" much easier.

  2. Checking idempotency is also easier.

  3. With tags: [manage_packages, never] the package task will be skipped when not explicitly selected. This will speed up the playbook.

Upvotes: 4

Related Questions