Ansible无法在委托给后计算变量

Ansible无法在委托给后计算变量,ansible,Ansible,我有一个剧本,有一套角色。最里面的角色有一个委托任务,试图计算一个变量。并且在几层上碰到了一个未定义的问题 角色: 我有一个特定于应用程序的角色deploy\u app1,可以与play和host Var一起使用来部署此应用程序 特定于应用程序的角色使用服务角色deploy\u service-为应用程序设置负载平衡和IP地址。其他应用程序可能会使用此角色 负载平衡/服务角色使用DNS角色DNS\u记录,在需要的系统中创建DNS条目 因此,调用堆栈将是Playbook->deploy\u a

我有一个剧本,有一套角色。最里面的角色有一个委托任务,试图计算一个变量。并且在几层上碰到了一个未定义的问题

角色:

  • 我有一个特定于应用程序的角色
    deploy\u app1
    ,可以与play和host Var一起使用来部署此应用程序
  • 特定于应用程序的角色使用服务角色
    deploy\u service
    -为应用程序设置负载平衡和IP地址。其他应用程序可能会使用此角色
  • 负载平衡/服务角色使用DNS角色
    DNS\u记录
    ,在需要的系统中创建DNS条目
因此,调用堆栈将是Playbook->deploy\u app1->deploy\u service->dns\u记录

DNS角色有一个怪癖,它需要与WinRM交互。因此,它具有委托给的任务。我必须从该系统的主机变量设置连接变量,例如:
ansible\u连接:“{{hostvars[dns\u records\u winrm\u host]['ansible\u连接]]}”

存货的设置应确保:

  • host\u app1\u dev
    运行应用程序部署。它有一个变量来说明哪个winrm主机将进行部署<代码>app1\u dns\u winrm\u主机,以及所有dns gubbins
  • Winrm主机能够执行AD DNS任务。它有一个主机文件,其中包含winrm和credssp的连接变量
在角色中,变量被包装到堆栈中。我以winrm主机为例。还有其他变量

  • app1获取由
    host\u app1\u dev
    中的变量设置的变量。然后它将这些信息传递给子角色
  • deploy\u服务
    角色比app1更通用,适用于许多应用程序。因此,当包含时,它会得到一个名为
    deploy\u service\u dns\u winrm\u host:“{{app1\u dns\u winrm\u host}}”的变量
  • dns\u records
    角色可供多个服务使用,其中提供了需要创建的记录的详细信息(多个系统、多个记录层)。这还需要了解winrm_主机。因此,当服务包含时,其VAR包括:
    dns\u records\u winrm\u host:“{{deploy\u service\u dns\u winrm\u host}”
dns\u记录
角色中,这将被引用:

- name: Debug that we connected to winrm host
  delegate_to: "{{dns_records_winrm_host}}"
  vars:
      ansible_connection: "{{ hostvars[dns_records_winrm_host]['ansible_connection'] }}"
      .
      .
  debug: 
    msg: This role ran remotely.
因此,当我运行这个程序时,我希望调试输出它远程运行的结果。比如:

TASK [dns_records : Debug that we connected to winrm host] ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
ok: [app1_play] => {
    "msg": "This ran remotely"
}
实际情况是:

TASK [dns_records : Debug that we connected to winrm host]] *****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
fatal: [app1_play]: FAILED! => {"msg": "{{ deploy_service_dns_winrm_host }}: {{ app1_dns_winrm_host }}: 'app1_dns_winrm_host' is undefined"}

我错过了什么?我怎样才能使该委托_能够引用这些变量