如何在列表上循环并使用“何时”条件

时间:2019-09-30 14:45:22

标签: ansible

我有一个保存为变量的软件包列表: pkg_list:   -dstat   -iftop   -创新   -MySQL-Python   -mytop   -Winrar

我很难创建一个任务来: 1)检查是否已安装(将yum模块与'list'命令配合使用) 2)在程序包不可用时在循环上创建when条件以运行任务

我试图了解条件循环如何作用于列表中的每个值/项目。

pkg_list:
  - dstat
  - iftop
  - innotop
  - MySQL-python
  - mytop
  - winrar

- name: "Check if package is installed - Oracle"
  yum:
    list: "{{ item }}"
  with_items: "{{ pkg_list }}"
  register: pkg_stats
- debug: msg={{ pkg_stats }}

我想结果应该是:

  • 检查每个项目是否存在

  • 对于项目1,如果不存在,请执行此操作...

  • 对于项目2,如果不存在,请执行此操作...

  • 如此...

2 个答案:

答案 0 :(得分:0)

因此,不知道如何设置存储库,您可能会有其他麻烦,但是此调试任务将是其中一项,如果仓库中不存在该软件包,则跳过调试,然后2,仅在以下情况下显示信息:软件包已安装。

pos = cmds.xform('pSphere1.vtx[*]', q=1, rp=True, ws=True)

我还加入了循环控制的内容,因为输出中的项目迭代器确实很难看,如果不将其配对,将不会很有用,但是您要做的事情并不需要。

因此,如果您的存储库中有多个存储库或同一软件包的多个版本,并且不知道下一步要做什么,则此任务可能不会显示过滤器的所有排列和时间,但这应该可以使您更接近。

答案 1 :(得分:0)

您可以使用package_facts模块来获取有关安装了哪些软件包的信息。结果将存储在ansible_facts.packages变量中。

- name: Gather package facts
  package_facts:
    manager: rpm

- name: Show package facts
  debug:
    var: ansible_facts.packages

然后,您可以执行取决于是否安装软件包的任务。例如,以下任务将仅打印列表中未安装的软件包的调试信息:

- name: Print debug info for missing packages
  debug:
    var: item
  with_items: '{{ pkg_list }}'
  when: item not in ansible_facts.packages