variables - 一个 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(' ') }}"
解决方案
您可以创建一个 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
推荐阅读
- php - 如何从在另一个表上找到该值的 id 的表中获取值
- python-3.x - 在scrapy的custom_settings中传递蜘蛛参数
- python - 如何计算方差?
- java - 正确执行 cURL 请求
- java - 如何解决 java.lang.IllegalArgumentException
- r - 将参数传递给 R 中的自定义函数并进行过滤
- bash - 有没有办法找到目录中所有文件共享的行?
- ios - 如何从 mapView 中删除我的自定义注释?
- java - 为什么一些开发人员以这种方式分配原始整数?诠释我 = 0x0001
- python - Pandas 计算满足条件时列之间的时间差