如何访问ansible中一个角色中另一个不同角色中的寄存器变量
这是我的第一部戏 在my-task1/tasks/main.yaml中 在同一剧本中,我还有另外两个剧本 下面是剧本中的第三个剧本如何访问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 当我尝试使用上
- 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 != ""