我有一个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)有没有可能改变它,使输出将打印一个友好的包的名称,如"Skype",“缩放”等,而不是URL?
发布于 2020-04-16 07:00:56
虽然这不是你实际应该做的(见下文),但这可以通过adding control to your loop和稍微修改一下你的包列表来实现。
- 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 }}"同时,在这种情况下,这仍然是不好的做法,因为您不应该循环遍历不可知论的package和类似的特定yum、apt……模块。您可以在name选项中直接传递要安装的包的列表。package缺少这方面的文档,但在特定的模块页面上有明确的解释。
这就是如何通过更好的性能(对系统上的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如果您仍然希望名称和链接列表是动态的,以防您以后想要向任务添加更多的包,这里有一个可能的处理方法的示例:
- 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: presenthttps://stackoverflow.com/questions/61237738
复制相似问题