2017-08-30 78 views
1

我已经加入了一个项目,该项目有大量的剧本和角色,并且大量使用include(通常以嵌套的方式),以便在现有剧本/角色中包含剧本/角色。 (不管这是好的还是坏的练习都应该被认为是超出了这个问题的范围,因为它不是我可以立即改变的东西。还要注意的是,没有使用include_role,因为这些剧本在2.2出来之前写得很好,并且仍然在)如何调试Ansible包含和依赖关系?

正常情况下,当runningansible-playbook时,输出只显示正在运行的每个任务,但它不显示包含哪个拉入额外任务。这使得剧本之间的整体流动跳跃很难。相比之下,include_vars任务包括在输出中。我猜这是因为它是一个Ansible模块,而include isn't really a module

因此,无需修改剧本,是否可以运行显示以下内容的剧本?

  • include指令被触发,并
  • (理想)也正在被包括在内,因为它并不总是显而易见的相对路径如何转换成绝对路径的确切文件

我已经发现很多关于调试剧本的方法,但没有任何实现这一点的建议。奖励积分,如果它还显示通过meta role dependencies包含角色时!

我知道有一些工具可以对剧本进行静态分析,但我希望能够在playbook运行时为我选择调用的任何剧本输出信息。

如果目前不可能,这是否是一个合理的功能要求?

回答

4

尝试执行ansible-playbook -vv,显示“任务路径”为每一个执行的任务,像这样:

TASK [debug] ********************************************* 
task path: /path/to/task/file.yml:5 
ok: [localhost] => { 
    "msg": "aaa" 
} 

所以,你可以轻松地跟踪实际的文件(包括或不包括)路径和行号。

至于includes,在当前的Ansible版本(2.2,2.3)中有不同类型的包含:静态和动态。
静态包括发生在解析时间和关于他们的信息被打印(与-vv详细)在剧本运行的一开始。
动态包含在运行时发生,您可以在输出中看到青色的“包含”行。

+0

这个'任务路径:'从1.9开始引入?我目前被迫使用这个古老的1.9版本,而我在使用'-vv'时看不到它。 –

+0

回答我自己的问题:我用2.2.1.0来看它,所以它一定是。即使这个答案对我没有任何帮助,因为我仍然不得不使用1.9,但我会接受它,因为对于没有疯狂地运行旧版本的人来说,这足够好。也就是说,我不确定它是否回答了问题的依赖部分。 –