Ansible-使用标签运行时导入任务无法正确运行

时间:2018-10-31 20:25:36

标签: ansible

我的test.yml剧本看起来像这样:

- hosts: all
  roles:
    - role: test-role

test-role角色看起来像这样:

---
- import_tasks: a.yml
  tags:
    - a

- import_tasks: b.yml
  tags:
    - b

但是如果我使用以下命令运行它:

ansible-playbook -i inventories/dev --tags "b" playbooks/test.yml --check

我从a.yml运行中获得任务。 为什么?

仅供参考,a.yml如下:

- set_fact: test_file="/tmp/test.txt"

- name: Look for the test file
  stat:
      path: "{{ test_file }}"
  register: stat_result

- block:
    - name: If the file exists, end playbook
      debug: msg="Test file existed, ending play"
    - meta: end_play
  when: stat_result.stat.exists == True

错误是:

ERROR! The conditional check 'stat_result.stat.exists == True' failed. The error was: error while evaluating conditional (stat_result.stat.exists == True): 'stat_result' is undefined

The offending line appears to be:

      debug: msg="Test file existed, ending play"
    - meta: end_play
      ^ here

为什么a.yml甚至在我使用标签专门不包含标签时也被运行?!

1 个答案:

答案 0 :(得分:0)

如果要使用命令行包含/排除标签,则必须标记顶级剧本。就您而言,标记必须位于test.yml中,而不是角色中。

- hosts: all
  roles:
    - role: test-role
      tags:
        - a

我不确定您的设置,但是使用import_role一直对我有效:

- hosts: vpc
  tasks:
  - import_role:
      name: test-role
    tags:
      - a

但这对您可能没有任何影响。希望这会有所帮助。