如何在其他剧本中使用变量? (2.7.10版)
username.yml
- hosts: host
vars_prompt:
- name: username
prompt: 'Username...'
private: no
tasks:
- name: Show username
debug:
msg: "{{username}}"
- import_playbook: dns.yml
dns.yml
- hosts: DNS
tasks:
- name: Mesaj
debug:
msg: "{{username}}"
失败! => {“ msg”:“该任务包含带有未定义变量的选项。错误是:'username'未定义
答案 0 :(得分:2)
vars_prompt 声明的变量的范围是 play 。使用set_fact在整个剧本中共享此类变量。
set_fact模块将键=值对作为变量,以在剧本范围中进行设置。
- hosts: host
vars_prompt:
- name: username
prompt: 'Username...'
private: no
tasks:
- name: Show username
debug:
msg: "{{ username }}"
- set_fact:
username: "{{ username }}"
在第二局(dns.yml)中,使用hostvars引用在第一局中 host 缓存的变量。
- hosts: DNS
tasks:
- name: Mesaj
debug:
msg: "{{ hostvars['host'].username }}"
答案 1 :(得分:0)
不打扰dns.yml
剧本。因此,您可以传递-e username=myuser
并在需要时单独执行。
添加具有不同变量名(uname)的事实集并将其传递给剧本(dns.yml)
- hosts: localhost
vars_prompt:
- name: username
prompt: 'Username...'
private: no
tasks:
- name: Show username
debug:
msg: "{{username}}"
- name: Set fact
set_fact:
uname: "{{ username }}"
- import_playbook: dns.yml
vars:
username: "{{ uname }}"
此剧本不变。
- hosts: DNS
tasks:
- name: Mesaj
debug:
msg: "{{username}}"