var_prompt可以包含在角色中吗?

时间:2017-07-19 21:17:27

标签: ansible

我写了一本简单的剧本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

1 个答案:

答案 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是您要为此角色执行的主要任务。