我已经看过如何在ansible playbook中的任务中注册变量,然后在同一个playbook中的其他地方使用这些变量,但是你可以在一个包含的playbook中注册一个变量然后在原始的playbook中访问这些变量吗?
这是我想要完成的事情:
这是我的主要剧本:
- include: sub-playbook.yml job_url="http://some-jenkins-job"
- hosts: localhost
roles:
- some_role
sub-playbook.yml
:
---
- hosts: localhost
tasks:
- name: Collect info from Jenkins Job
script: whatever.py --url "{{ job_url }}"
register: jenkins_artifacts
如果可能的话,我希望能够在main_playbook中访问jenkins_artifacts结果。我知道你可以从同一个剧本中的其他主机访问它,如下所示:"{{ hostvars['localhost']['jenkins_artifacts'].stdout_lines }}"
跨剧本分享是一样的想法吗?
答案 0 :(得分:1)
我对这个问题的含义感到困惑。只需使用变量名jenkins_artifacts
:
- include: sub-playbook.yml job_url="http://some-jenkins-job"
- hosts: localhost
debug:
var: jenkins_artifacts
答案 1 :(得分:0)
这看似复杂,但我喜欢在我的《 Playbooks》中这样做:
rc 定义包含返回值的变量的名称
ar 为包含任务提供参数
master.yml:
- name: verify_os
include_tasks: "verify_os/main.yml"
vars:
verify_os:
rc: "isos_present"
ar:
image: "{{ os.ar.to_os }}"
verify_os / main.yml:
---
- name: check image on device
ios_command:
commands:
- "sh bootflash: | inc {{ verify_os.ar.image }}"
register: image_check
- name: check if available
shell: "printf '{{ image_check.stdout_lines[0][0] }}\n' | grep {{ verify_os.ar.image }} | wc -l"
register: image_available
delegate_to: localhost
- set_fact: { "{{ verify_os.rc }}": "{{ true if image_available.stdout == '1' else false }}" }
...
我现在可以在master.yml中的任何地方使用 isos_present 变量来访问返回的值。