我经常需要"自定义剧本"执行特定任务但仍在一个角色内,例如对于数据库备份任务,我希望它位于roles / databases / backup.yml中。像这样的自定义任务将享受与main.yml相同的"magic"(自动读取角色变量等)。
唯一的解决方法是依靠main.yml中的标签,但这很麻烦 - 需要创建一个"障碍课程"标签只是为了确保运行某些任务,并在命令行上指定标签(因为播放不能运行其他播放的标签过滤列表)。
我最终必须在自定义文件中手动和明确地执行所有操作。
答案 0 :(得分:1)
进一步思考,混淆是因为我试图解决Ansible的两个限制:(a)如上所述,there's no way for a task to run a list of tagged tasks; (b)there's no such thing (yet) as "explicit" tags,即除非明确调用标记,否则禁用任务的标记。这意味着在剧本中没有简单的方法来运行特殊/例外任务的特定子集。
我试图通过制作一个单独的剧本来解决这个限制。但是,无论如何,最终会从主角色剧本中复制一堆逻辑。
现在最好的方法是解决方法others have mentioned,它依赖于变量作为"白名单"的解决方法。某些任务。然后创建一个包装脚本来声明这些变量,也可以使用skip-tags来消除不必要/慢的任务。