1

是否有变量或方法允许列出应用于一组 ansible 主机的所有角色?例如:

- hosts: webservers
  gather_facts: true
  roles:
    - nginx
    - php-fpm
  tasks:
    - debug:
      msg: {{ item }} installed
      with_items: ansible_roles

或者也许是另一种实现这一目标的方法?

4

1 回答 1

2

这取决于您的问题中应用的含义。

该变量role_names包含当前播放的所有角色,因此它将是一个数组:[nginx, php-fpm]

- debug:
    msg: {{ item }} installed
  with_items: role_names

但这些角色不一定已应用于主机,如果您的意思是它们已被处理。一旦角色在主机上运行,​​就没有这样的东西会更新。

如果那是您正在寻找的内容,您可以使用回调插件自己实现它。AFAIK 没有用于启动/完成角色本身的回调。但是由于角色的名称出现在任务名称中,您可以简单地使用playbook_on_task_start,从任务名称中提取角色名称并以某种方式存储它。我还没有研究过 API 发生变化的 Ansible 2 中的回调插件,但我希望您可以访问全局变量列表并可以对其进行操作。

于 2016-03-02T08:14:42.117 回答