Установите ansible galaxy с помощью ansible

Как установить роль ansible с помощью ansible?

Ручной способ - использовать командную строку:

ansible-galaxy install user.role

Но как это сделать в самом анзибле, как в модуле? Я бы предположил что-то подобное в сборнике пьес:

- tasks:
  galaxy:
    user: username
    role: rolename
    state: installed

Это кажется очень тривиальной и элементарной задачей, но я не могу найти, как это сделать.

Здесь есть аналогичный вопрос Как автоматически устанавливать роли Ansible Galaxy? .Но он не отвечает на него, поскольку он просто запускает ручную команду каждый раз, и он не идемпотентный (это основная причина использовать ansible для автоматизации вещей).


person Allan Deamon    schedule 18.06.2019    source источник


Ответы (2)


Ваш вывод "it just runs the manual command every time, and it is not idempotent" был слишком быстрым. Такая задача идемпотентна с параметром создает и соответствующим < em> ansible_roles_list.

- name: Install roles from Ansible Galaxy
  command: "ansible-galaxy install {{ item.role_name }}"
  args:
    creates: "{{ item.role_path }}"
  loop: "{{ ansible_roles_list }}"
person Vladimir Botka    schedule 18.06.2019

Суть этого вопроса, который не так очевиден для новичков и который нелегко найти во вводной документации, заключается в том, что роли галактики просто необходимо установить на клиенте, а не на сервере.

Таким образом, в playbook для сервера вам не нужно устанавливать роль galay каждый раз, когда вы настраиваете сервер, а только один раз на вашей клиентской машине.

person Allan Deamon    schedule 18.06.2019
comment
Ansible очень гибкий. Довольно часто роли устанавливаются и на серверах. Например, чтобы сценарии запускались с помощью ansible-pull. - person Vladimir Botka; 19.06.2019