在Ansible角色中运行带有特定标签的任务

时间:2019-08-08 15:08:20

标签: ansible tags roles

我受到Ansibles文档中最佳实践部分的启发,具有以下文件夹结构:

my-playbook.yml
my-role
   |
   |── tasks
         |
         |── my-task.yml

我已经在角色的一部分my-task.yml文件中标记了任务。我使用ansible-playbook.yml --tags“ mytag”执行剧本。不幸的是,所有任务都被跳过。我可以只在剧本中直接过滤任务吗?

在我的剧本中,我做类似

- hosts: ansible_server
  connection: local
  gather_facts: no
  roles:
   - validate_properties

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该做的是使用role模块从task调用include_role。您可以在该task上应用tags。以这个playbook为例:

---
- name: Tag role test
  hosts: local
  connection: local
  gather_facts: no
  tasks:
    - include_role:
        name: debug
      tags:
        - dont_run

    - debug:
        msg: Solo shot first
      tags:
        - run

我的role/debug只是一个打印Hello, world!的任务。

如果直接调用此playbook,则会得到以下输出:

PLAY [Tag role test]

TASK [debug : debug] 
ok: [localhost] =>
  msg: Hello, world!

TASK [debug] 
ok: [localhost] =>
  msg: Solo shot first

PLAY RECAP
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

但是,如果您排除dont_run这样的任务:

ansible-playbook tag_roles.yml --skip-tags dont_run

这是输出:

PLAY [Diff test] 

TASK [debug] 
ok: [localhost] =>
  msg: Solo shot first

PLAY RECAP 
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

希望对您有帮助。

答案 1 :(得分:0)

您还必须使用您要运行的标签来标记子任务: 主要任务:

- name: "test tags on sub task"
  include_tasks: subtask.yml
  with_items: "{{ myList }}"
  loop_control:
    label: item
  tags: test

子任务:

debug: msg="Sub Task"
tags: test