我写了一本简单的剧本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
答案 0 :(得分:2)
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?"
根据this page,您实际上可能希望如上所示调用vars_prompt
。
如果您有一个要调用vars_prompt
的角色,它将在roles/
目录下的自己的文件中定义,该目录应与您的剧本位于同一级别。在您的情况下,它可能如下所示:
--- #master.yml
...
- name: createdb and map roles.
hosts: nodes
roles:
- vars_prompt_role
...
然后在roles/vars_prompt_role/tasks/main.yml
中,您将定义vars_prompt_role
角色的任务。有关角色的详细信息,请查看this page,或参阅this page了解有关内容组织的最佳做法。
这是roles/
目录的外观:
roles/
var_prompt_role/
files/
templates/
tasks/
main.yml
handlers/
vars/
defaults/
meta/
main.yml
是您要为此角色执行的主要任务。