我正在实现
v2_playbook_on_task_start(self, task, is_conditional)
的逻辑,并且想要获取应该运行任务的目标主机的主机名,但主机名未在任务对象中公开。
有没有办法在这个回调中获取目标主机?
看看 Ansible 代码的结构以及 2.3.1 中的执行方式,看起来没有办法或解决方法可以在上述回调中获取主机名。
PlayIterator 对象和 PlayContext 在 TaskQueueManager.run() 内部构造,然后这个 PlayIterator 对象被传递到执行任务的预选“策略”。问题出在这些“策略”的实现内部,例如“免费”策略,代码循环遍历主机列表,但不将主机详细信息传递给回调。也不可能使用 Templar 手动模板化
{{ inventory_hostname }}
,因为 Templar 需要主机名作为参数。