在 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_json
是 json_query
和 jmespath 库
之间通信中当前 bug 的解决方法
我想从一组服务器中删除与 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_json
是 json_query
和 jmespath 库