Установите понятное имя для пакета при установке с помощью цикла with_items - PullRequest
1 голос
/ 15 апреля 2020

У меня есть задача Ansible, которая устанавливает несколько пакетов по прямой ссылке RPM:

- name: Install packages by a direct RPM
  become: true
  package: name={{ item }} state=present
  with_items:
    - https://go.skype.com/skypeforlinux-64.rpm
    - https://zoom.us/client/latest/zoom_x86_64.rpm

Когда я ее запускаю, вывод выглядит следующим образом:

TASK [Install packages by a direct RPM] *******************************
ok: [localhost] => (item=https://go.skype.com/skypeforlinux-64.rpm)
ok: [localhost] => (item=https://zoom.us/client/latest/zoom_x86_64.rpm)

Is его можно изменить так, чтобы при выводе выводилось понятное имя пакета, например «Skype», «Zoom» и т. д. c. вместо URL?

1 Ответ

2 голосов
/ 16 апреля 2020

Хотя это не то, что вам следует делать (см. Ниже), этого можно достичь, добавив контроль к вашему l oop и немного изменив список пакетов.

- name: Install packages by a direct RPM
  become: true
  package:
    name: "{{ item.link }}"
    state: present
  with_items:
    - link: https://go.skype.com/skypeforlinux-64.rpm
      name: Skype
    - link: https://zoom.us/client/latest/zoom_x86_64.rpm
      name: Zoom
  loop_control:
    label: "{{ item.name }}"

Между тем, это все еще плохая практика в этом случае, потому что вы не должны l oop сверх агности c package, а так же указывать c yum, apt ... модулей. Вы можете передать список пакетов для установки непосредственно в опции имени. Документация для этого отсутствует для package, но четко объяснена на указанных страницах c модулей.

Это способ достижения того же результата, что и выше, с лучшей производительностью (один единственный вызов yum / dnf в системе) и меньше потенциальных ошибок (перекрестные зависимости между пакетами в списке ...).

- name: Install Skype and Zoom by direct RPM
  become: true
  package:
    name:
      - https://go.skype.com/skypeforlinux-64.rpm
      - https://zoom.us/client/latest/zoom_x86_64.rpm
    state: present

Если вы все еще хотите быть динамическими c для имен и списка ссылок на случай, если вы позже вы хотите добавить больше пакетов к задаче, вот пример возможного способа справиться с этим:

- name: Install from rpm link ({{ packages | map(attribute='name') | join(', ') }})
  vars:
    packages:
      - link: https://go.skype.com/skypeforlinux-64.rpm
        name: Skype
      - link: https://zoom.us/client/latest/zoom_x86_64.rpm
        name: Zoom
  package:
    name: "{{ packages | map(attribute='link') | list }}"
    state: present
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...