Как добавить один или несколько путей к пути поиска Ansible (для файлов или шаблонов)?

В моем случае я монтирую свой код Ansible внутри контейнера Docker под /ansible/playbook/, В этом каталоге вы увидите roles, inventories

Я хотел бы смонтировать другой каталог, который содержит некоторые файлы RPM.

В Ansible у меня есть этот код:

---
- name: copy ZooKeeper rpm file
  copy:
    src: zookeeper-3.4.13-1.x86_64.rpm
    dest: /tmp

- name: install ZooKeeper rpm package
  yum:
    name: /tmp/zookeeper-3.4.13-1.x86_64.rpm
    state: present

Проблема в том, что ZooKeeper не существует ни в одном из путей поиска по умолчанию:

Could not find or access 'zookeeper-3.4.13-1.x86_64.rpm'
Searched in:
    /ansible/playbook/roles/kafka/files/zookeeper-3.4.13-1.x86_64.rpm
    /ansible/playbook/roles/kafka/zookeeper-3.4.13-1.x86_64.rpm
    /ansible/playbook/roles/kafka/tasks/files/zookeeper-3.4.13-1.x86_64.rpm
    /ansible/playbook/roles/kafka/tasks/zookeeper-3.4.13-1.x86_64.rpm
    /ansible/playbook/files/zookeeper-3.4.13-1.x86_64.rpm
    /ansible/playbook/zookeeper-3.4.13-1.x86_64.rpm

Как я могу добавить дополнительные пути поиска в этот список, например:

    /ansible/rpms/zookeeper-3.4.13-1.x86_64.rpm//

Я не хочу жестко закодировать абсолютные пути (если это работает) в коде Ansible. Я хотел бы предоставить что-то вроде: ANSIBLE_EXTRA_SEARCH_PATH,

Как я могу это сделать?

PS: я не могу создать символическую ссылку на мой каталог RPM внутри уже смонтированного /ansible/playbook потому что Docker увидит его и плохую ссылку (не сможет прочитать его, потому что целевой каталог, содержащий RPM-файлы, не является частью файловой системы контейнера Docker.)

1 ответ

Вариант будет

  • поместите число оборотов в any_path
  • ссылка any_path на /ansible/playbook/rpms
  • используйте src: rpms/zookeeper-3.4.13-1.x86_64.rpm

Вы можете использовать поиск со списком путей и first_found запрос:

- name: install ZooKeeper rpm package
  yum:
    name: "{{ item }}/zookeeper-3.4.13-1.x86_64.rpm"
    state: present
  loop: "{{ query('first_found', { 'paths': mypaths}) }}"
  vars:
    mypaths: ['/tmp', '/opt/other_location/somedir/', '/rpms']

Дополнительная информация на https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html.

Другие вопросы по тегам