首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在RHEL机上使用ansible去除多个rpms

在RHEL机上使用ansible去除多个rpms
EN

Stack Overflow用户
提问于 2020-07-03 13:21:43
回答 1查看 1.6K关注 0票数 1

我希望从一组服务器中删除与厨师相关的rpms。这在一本剧本里就够了吗?

第一种选择:

代码语言:javascript
运行
复制
- 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

第二种选择:

代码语言:javascript
运行
复制
- name: remove the chef package
  yum:
    name: chef*
    state: absent

如果输出有多个列表,上述两个剧本会删除多个rpm吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-03 14:21:24

在ansible中,这是正确的方法,所有这些都使用yum模块。

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

对于后面的操作,关键是筛选出上一次操作的结果,以获得所需名称的列表,并直接将其传递给yum。

代码语言:javascript
运行
复制
    - 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获得相同的结果:

代码语言:javascript
运行
复制
        name: "{{ yum_installed.results | to_json | from_json | json_query(\"[?starts_with(name, 'chef')].name[]\") | list }}"

注意:to_json | from_json是当前错误json_query与jmespath库之间的通信中的一个解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62716348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档