【问题标题】:Install multiple local rpms using Ansible使用 Ansible 安装多个本地 rpm
【发布时间】:2017-08-16 07:32:52
【问题描述】:

我必须使用 ansible 安装位于特定目录中的十几个 rpm。现在我正在使用如下语法:

- name: install uploaded rpms
  command: rpm -ivh /tmp/*.rpm

我想使用 yum 模块来做,但不知道如何告诉它在一个目录中安装所有 rpm(不指定每个文件的名称)。

有什么建议吗?

提前致谢

【问题讨论】:

  • 搜索“Ansible 中的循环”。

标签: ansible yum


【解决方案1】:

我认为最好的解决方案如下:

 - name: Find all rpm files in /tmp folder
   find:
     paths: "/tmp"
     patterns: "*.rpm"
   register: rpm_files
 
 - name: Setting rpm_list
   set_fact:
    rpm_list: "{{ rpm_files.files | map(attribute='path') | list}}"

 - name: installing the rpm files
   yum:
     name: "{{rpm_list}}"
     state: present

循环浏览文件可能会导致 Yum Lock 问题。所以这样更好更高效,因为我们不必遍历所有文件,而是将文件路径列表传递给 yum 模块。

【讨论】:

  • 谢谢你,一直在拉我的头发。
  • "{{ rpm_files.files | map(attribute='path') | list}}" 究竟是做什么的?
  • @Jontia 读取register 变量rpm_files,从该对象获取 .files 属性,将该值通过管道传递给从每个 rpm“文件”对象中提取 .path 属性的 map 函数(从 ansible find 模块返回),并将每个项目连接到一个列表中。这是一个设置rpm_list值的神器模板
【解决方案2】:

你可以试试这个(我没有测试过):

- name: Finding RPM files
  find:
    paths: "/tmp"
    patterns: "*.rpm"
  register: rpm_result

- name: Install RPM
  yum:
    name: "{{ item.path }}"
    state: present
  with_items: "{{ rpm_result.files }}"

【讨论】:

  • 该解决方案的工作方式与 yum *.rpm 不同,因为它按照 rpm_result.files 的顺序安装文件,并且可能因依赖关系而失败
【解决方案3】:

试试这个:

- name: Installed the rpm files
  shell: yum localinstall *.rpm -y
  args:
    chdir: /tmp/rpm_dir

忽略警告。

【讨论】:

  • 可以为警告添加warn: false
【解决方案4】:

正如https://stackoverflow.com/a/45708676/11887927 评论的那样,我进行了测试。在大多数情况下,它会成功,但将retries 添加到任务将有助于确保依赖关系问题,因为我们使用的是find 模块,它会一个接一个返回结果。下面是修改后的例子:

- name: Finding RPM files
  find:
    paths: "/tmp"
    patterns: "*.rpm"
  register: rpm_result

- name: Install RPM
  yum:
    name: "{{ item.path }}"
    state: present
  with_items: "{{ rpm_result.files }}"
  retries: 5
  register: result
  until: result.rc == 0

当有 6 个 RPM 时出现问题。

参考资料:

  1. https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#retrying-a-task-until-a-condition-is-met
  2. https://stackoverflow.com/a/44135131/11887927

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2018-03-15
    • 2020-05-18
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多