var_prompt可以包含在角色中吗?



我写了一个简单的剧本master.yml,主要功能是查找角色并输入一个作为第二个剧本的输入。但它不会提示输入变量,即使我使用了var_prompt角色。

--- #master.yml
- name: show roles.
hosts: nodes
connection: ssh
gather_facts: no
tasks:
- include: showroles.yml
- name: createdb and map roles.
hosts: nodes
connection: ssh
gather_facts: no
roles:
- vars_prompt_role
tasks:
- include: createdb.yml

我的目录结构如下:

/playbooks/createdbandmaprole/
[user@localhost createdbandmaprole]$ ls
createdb.yml  hosts  master.yml  roles  script.sql.j2  showroles.yml
[user@localhost createdbandmaprole]$cd roles
[user@localhost roles]$ ls
var_prompt_role
[user@localhost roles]$ cd var_prompt_role/
[user@localhost var_prompt_role]$ ls
defaults  handlers  library  main.yml  meta  tasks  vars
[user@localhost var_prompt_role]$ vim main.yml
vars_prompt:
- name: "database"
prompt: "enter the name of database"
private: no
- name: "role"
prompt: "enter the name of role"
private: no
- name: "ad_group"
prompt: "enter the AD_Group"
private: no
[user@localhost createdbandmaprole]$ ansible-playbook master.yml -i hosts --check

但它不会提示输入变量

vars_prompt应该从剧本的顶层调用,而不是任务:

下面是一个最基本的示例:

---
- hosts: all
remote_user: root
vars:
from: "camelot"
vars_prompt:
- name: "name"
prompt: "what is your name?"
- name: "quest"
prompt: "what is your quest?"
- name: "favcolor"
prompt: "what is your favorite color?"

因此,根据此页面,您可能实际上希望按上所示调用vars_prompt

如果您有要调用的角色vars_prompt,它将在roles/目录下自己的文件中定义,该目录应与您的 playbook 位于同一级别。在您的情况下,它可能如下所示:

--- #master.yml
...
- name: createdb and map roles.
hosts: nodes
roles:
- vars_prompt_role
...

然后在roles/vars_prompt_role/tasks/main.yml中,您将定义vars_prompt_role角色的任务。有关角色的详细信息,请查看此页面,或参阅此页面以获取有关内容组织的最佳实践。

这是您的roles/目录的外观:

roles/
var_prompt_role/
files/
templates/
tasks/
main.yml
handlers/
vars/
defaults/
meta/

main.yml是您要为此角色执行的主要任务。

最新更新