如何访问ansible中一个角色中另一个不同角色中的寄存器变量

如何访问ansible中一个角色中另一个不同角色中的寄存器变量,ansible,Ansible,这是我的第一部戏 在my-task1/tasks/main.yaml中 在同一剧本中,我还有另外两个剧本 下面是剧本中的第三个剧本 - name: mytask1 in role shell: sometask with_items: "{{ path.stdout_lines }}" register: task_status 我想在my-task2中使用task_status变量 my-task2/tasks/main.yaml 当我尝试使用上

这是我的第一部戏

在my-task1/tasks/main.yaml中

在同一剧本中,我还有另外两个剧本

下面是剧本中的第三个剧本

 - name: mytask1 in role
    shell: sometask
    with_items: "{{ path.stdout_lines }}"
    register: task_status
我想在my-task2中使用task_status变量

my-task2/tasks/main.yaml

当我尝试使用上面提到的方法时,我发现下面的错误

致命:[主机名]:失败!=>{ “msg”:“'dict object'没有'results'属性” }

我可以在第二次播放中使用注册变量任务状态吗

提前感谢

Q:我可以在第二个剧本中使用注册变量task\u status吗?

A:是的。如果仅将此变量用于此目的,则可以。比如说

-hosts:localhost
任务:
-命令:“echo{{item}”
循环:[1,2,3]
注册:任务状态
-主机:本地主机
任务:
-调试:
msg:{{task_status.results}json_查询('[].stdout')}
给予

ok:[localhost]=>
味精:
- '1'
- '2'
- '3'
这些变量存在于hostvars中。例如,您也可以使用来自其他主机的变量

-主机:主机A
任务:
-命令:“echo{{item}”
循环:[1,2,3]
注册:任务状态
-主持人:主持人B
任务:
-调试:
msg:{{hostvars.host_A.task_status.results}json_查询('[].stdout')}
给予

ok:[主机B]=>
味精:
- '1'
- '2'
- '3'

您是否尝试简单地使用/debug
任务状态
?因为您在注册它的任务上没有循环,我严重怀疑它是否包含
results
键(错误消息清楚地报告了这一点).Hi@Zeitounator它确实有我错过的循环。我还尝试在
-role:my-task1
中的两个角色中调试我得到了正确的输出,但在
-role:my-task2
中我没有得到预期的输出
 - name: mytask1 in role
    shell: sometask
    with_items: "{{ path.stdout_lines }}"
    register: task_status
 - name: mytask2
   hosts: "{{app_name | upper}}_{{ env | upper }}_myhost1"
   remote_user: "{{ tom_user }}"
   vars_files:
    - "envs/{{ env|lower }}/{{app_name|lower}}_{{env|lower}}_hc.yml"
   serial: 1
   gather_facts: False
   roles:
   - role: my-task2
  - name: do some activity
    command: "sh {{ item.stdout }}/task.sh"
    with_items: "{{ task_status .results }}"
    when: item.stdout != ""