Ansible 角色中是否可以包含变量提示?
我写了一个简单的剧本大师.yml,主要功能是查找角色并输入一个作为第二个剧本的输入。但即使我使用了var_prompt角色,它也不会提示变量Ansible 角色中是否可以包含变量提示?,ansible,Ansible,我写了一个简单的剧本大师.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 co
--- #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\u应该从剧本的顶层调用提示
,而不是任务:
下面是一个最基本的例子:
---
- 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\u prompt
,如上图所示,根据
如果您有一个角色要调用vars\u prompt
,它将在roles/
目录下的自己的文件中定义,该目录应与您的剧本处于同一级别。在您的情况下,它可能如下所示:
--- #master.yml
...
- name: createdb and map roles.
hosts: nodes
roles:
- vars_prompt_role
...
然后在roles/vars\u prompt\u role/tasks/main.yml
中定义vars\u prompt\u role
角色的任务。有关角色的详细信息,请查看或参阅,以获取有关内容组织的最佳做法
以下是您的角色/
目录的外观:
roles/
var_prompt_role/
files/
templates/
tasks/
main.yml
handlers/
vars/
defaults/
meta/
其中,
main.yml
是您希望为该角色执行的主要任务。谢谢@McGlothlin。我尝试了你的建议,它提示输入变量,但它甚至在执行第一个剧本之前就提示输入变量。是否有一种方法可以在执行第一个剧本后输入变量??您在第二个剧本中引用了角色,对吗?播放按指定的顺序从上到下播放。更多信息请参见此处:@Nanda shoot,我不知道vars\u prompt
是一个部分而不是一个角色(抱歉,已经有一段时间了)。相应地更新了我的答案。是否有一种语法可以将vars_prompt定义为角色?因为我只看到将vars定义为角色语法。不,我认为没有必要。。。您可以将vars\u提示符
粘贴到它自己的角色中,也可以从第二个剧本中调用它,如上所示。这有意义吗?标题中的问题与内容有什么关系?