首页 > 解决方案 > 一个 ansible playbook 的输入需要传递给另一个 playbook

问题描述

请参考以下示例,其中我使用“import_playbook”执行了 2 个不同的剧本。在这里,我将在第一个剧本中使用 vars_prompt 获取密码作为输入,我需要在第二个剧本中使用相同的密码变量。请建议最好的选项,{注意:我不能将两个播放合并为单个播放,因为它们在不同的主机上执行}播放 1:

---
- name: Install PCS cluster
  hosts: cluster_nodes
  vars_prompt:
    - name: password
      prompt: Enter the HACLUSTER user password
  tasks:
    - name: Configure password for hacluster user
      user:
        name: hacluster
        password: "{{ password | password_hash('sha512') }}"

播放 2:

- name: Configuring Cluster
  hosts: 172.17.254.3
  vars:
    cluster_nodes:
      - node1.domain.com
      - node2.domain.com
  tasks:
    - name: Authenticate the cluster nodes
      shell: "pcs host auth -u hacluster -p {{ password }}  {{ ha_nodes | join(' ') }}"

标签: variablesansible

解决方案


您可以创建一个 dummy_host 并将变量放入其中,如下所示:

- name: vartest1
  hosts: cluster_nodes
  vars_prompt:
    - name: pass
      prompt: Enter the HACLUSTER user password
  tasks:

    - name: hashpassword
      set_fact:
        password: "{{ pass | password_hash('sha512') }}"

    - debug: msg="{{password}}"

    - name: Register dummy host with variable
      add_host:
        name: "DUMMY_HOST"
        PLAYVAR1: "{{ password }}"      


- name: vartest2
  hosts: 172.17.254.3

  tasks:
    - name: Echo the output 
      set_fact:
        password: "{{ hostvars['DUMMY_HOST']['PLAYVAR1'] }}"

    - debug: msg="{{password}}"

如果 node1.domain.com 是 cluster_nodes 组中的服务器之一,您可以尝试

- name: vartest2
  hosts: groupe2

  tasks:
    - name: trap password
      set_fact:
        password: "{{ hostvars['node1.domain.com']['password'] }}"

    - debug: msg="{{password}}"

我更喜欢第一个解决方案,因为使用第二个解决方案,如果服务器处于脱机状态,您将无法访问 hostvars


推荐阅读