在 RHEL 机器上使用 ansible 删除多个 rpm

Removing multiple rpms using ansible on RHEL machines

我想从一组服务器中删除与 chef 相关的 rpm。这在剧本中是否足够?

第一个选项:

- name: Check if chef rpms exist
  shell: rpm -qa *chef*
 register: rpm_output

- name: Remove chef rpms if they exist
  shell: rpm -e rpm_output
  when: rpm_output.stat.exists

第二个选项:

- name: remove the chef package
  yum:
    name: chef*
    state: absent

如果输出中列出了多个 rpm,上述两个 playbook 是否会删除多个 rpm?

提前致谢!

这是在 ansible 中执行此操作的正确方法,全部使用 yum 模块。

您将不得不使用它两次:一次列出已安装的软件包,另一次删除选定的软件包。

后面这个操作,关键是过滤掉前面操作的结果,只得到需要的名字列表,直接传给yum

    - name: List installed packages
      yum:
        list: installed
      register: yum_installed

    - name: Remove all packages starting with chef
      yum:
        name: "{{ yum_installed.results | map(attribute='name') | select('search', '^chef.*') | list }}"
        state: absent

或者,您可以使用 json_query 获得相同的结果:

        name: "{{ yum_installed.results | to_json | from_json | json_query(\"[?starts_with(name, 'chef')].name[]\") | list }}"

注意:to_json | from_jsonjson_query 和 jmespath 库

之间通信中当前 bug 的解决方法