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

在RHEL机器上使用ansible删除多个RPM,ansible,rpm,rhel,Ansible,Rpm,Rhel,我希望从一组服务器中删除与厨师相关的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 p

我希望从一组服务器中删除与厨师相关的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,上述两个剧本是否会删除多个RPM


提前谢谢

这是在ansible中执行此操作的正确方法,所有操作都使用
yum
模块

您必须使用它两次:一次列出已安装的软件包,另一次删除选定的软件包

对于后面的操作,关键是过滤掉上一个操作的结果,以仅获取所需名称的列表,并将其直接传递给yum

-名称:列出已安装的软件包
百胜:
列表:已安装
注册:yum\u已安装
-名称:从chef开始删除所有包
百胜:
名称:{{yum_installed.results | map(attribute='name')| select('search','^chef.')| list}
国家:缺席

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

name:“{{yum_installed.results}to_json | from_json | json | json |查询(\“[?以(名称,'chef')开头]。name[]\”| list}”

注意:
to_json | from_json
是当前在
json\u query
和jmespath库

ansible
yum
模块之间通信的工作区,似乎不接受通配符。。。