只运行Ansible playbook中的一个任务和处理程序

3

我该如何从Ansible playbook中运行单个任务,并在该任务成功完成时通知处理程序,同时跳过相关playbook中的所有其他任务?

目前,我执行以下操作:

ansible-playbook --start-at-task "task1" --step -K -i hosts playbook.yml

任务完成后按下Ctrl+c。这也会跳过处理程序。

我知道我可以为任务添加标签并使用它,例如如何在Ansible Playbook中只运行一个任务?,但我更喜欢不添加标签就能做到这一点。这可能吗?


你能详细说明为什么你想避免添加标签吗?因为虽然有几种方法可以考虑,但它们都比添加标签更繁琐。 - undefined
1
仅仅是因为它看起来太繁琐了。而且,鉴于有一个直接跳过之前任务的选项,似乎也有必要有一个直接跳过后续任务的选项。根据这里的回答,然而事实似乎并非如此,所以我倾向于接受Cedric Morent的答案。 - undefined
2个回答

4

可以运行一个独立角色(从roles/目录):

ansible -i stage.yml -m include_role -a name=create-os-user localhost

还有一个单独的任务文件:

ansible -i stage.yml -m include_tasks -a file=tasks/create-os-user.yml localhost

如果你将任务从角色外部化到根目录的tasks/ 目录中(可以通过import_tasks: ../../../tasks/create-os-user.yml实现重用),则可以独立运行它,而不需要在剧本/角色中运行。

1
请注意,这个问题并不能正确加载模板文件。所以roles/foo/tasks/bar.yml无法在roles/foo/templates/baz.j2中找到其模板。 - undefined
@proc еҪ“дҪ еңЁAnsibleдёӯејҖе§ӢеӨ§йҮҸдҪҝз”Ёinclude / importж—¶пјҢжҗңзҙўи·Ҝеҫ„еҸҳеҫ—жңүдәӣзҘһз§ҳгҖӮеҫҲйҡҫзҗҶи§Јпјҡhttps://docs.ansible.com/ansible/latest/user_guide/playbook_pathing.html - undefined

2

目前ansible-playbook没有像--task这样的选项来允许您运行单个任务。因此,在我看来,标签与--tags选项一起使用是您在这里的最佳解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接