如何禁用未包含在给定标记内的子播放的事实

时间:2016-07-11 13:58:51

标签: ansible ansible-playbook ansible-2.x

我的一些剧本有这样的子剧本结构:

- hosts: sites
  user: root
  tags:
    - configuration
  tasks:
  (...)

- hosts: sites
  user: root
  tags:
    - db
  tasks:
  (...)

- hosts: sites
  user: "{{ site_vars.user }}"
  tags:
    - app
  tasks:
  (...)

在Ansible 1.x中,管理员和开发人员都能够使用这样的剧本。管理员可以使用所有标记(root和用户访问)运行它,而开发人员只能访问最后一个标记,其中任务位于用户访问级别。当开发人员使用 app 标记运行此playbook时,前两个标记会跳过收集事实。然而,现在,在Ansible 2.1中,它没有被跳过,这导致没有root访问权限的用户失败。

是否存在修复此行为的机制或简单修改?是否有一种新方法应该适用于此类案例?

1 个答案:

答案 0 :(得分:26)

There is an easy mod – turn off facts gathering and call setup explicitly:

- hosts: sites
  user: root
  tags:
    - configuration
  gather_facts: no
  tasks:
    - setup:
    (...)