代码之家  ›  专栏  ›  技术社区  ›  Snowcrash

Ansible-导入中的任务在使用标记运行时运行不正确

  •  0
  • Snowcrash  · 技术社区  · 6 年前

    我的 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 为什么?

    仅供参考, 看起来像这样:

    - 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
    

    为什么 甚至当我使用标签来明确不包含它时也会被运行?!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Nick Miller    6 年前

    如果要使用命令行包含/排除标记,则必须标记顶级行动手册。在您的例子中,标记需要在test.yml中,而不是角色中。

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

    我不确定您的设置,但使用import_角色对我来说一直很有效:

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

    但这可能对你没什么影响。希望这有帮助。