从包含的Ansible Playbook返回变量

时间:2017-05-09 12:10:44

标签: ansible

我已经看过如何在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 }}"

跨剧本分享是一样的想法吗?

2 个答案:

答案 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 变量来访问返回的值。