2017-07-19 81 views
0

我寫了一本簡單的書籍master.yml,主要功能是查找角色並輸入一個作爲第二個劇本的輸入。但是,儘管我使用了var_prompt角色,但它並不提示變量。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/ 
[[email protected] createdbandmaprole]$ ls 
createdb.yml hosts master.yml roles script.sql.j2 showroles.yml 
[[email protected] createdbandmaprole]$cd roles 
[[email protected] roles]$ ls 
var_prompt_role 
[[email protected] roles]$ cd var_prompt_role/ 
[[email protected] var_prompt_role]$ ls 
defaults handlers library main.yml meta tasks vars 
[[email protected] 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 
[[email protected] createdbandmaprole]$ ansible-playbook master.yml -i hosts --check 

,但它不會提示瓦爾

+0

標題中的問題與內容有什麼關係? – techraf

回答

1

vars_prompt應該從劇本的頂層被調用,而不是一個任務:

Here is a most basic example:

--- 
- 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如圖所示e,根據this page

如果您有一個角色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角色的任務。有關角色的更多信息,請查看this page,或參閱this page瞭解有關內容組織的最佳做法。

這是你roles/目錄應該是什麼樣子:

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

哪裏main.yml是要開展這個角色的主要任務。

+0

謝謝@McGlothlin。我試過你的建議,它提示變量,但它甚至在執行第一個劇本之前提示變量。有沒有一種方法可以讓我在第一部劇本出爐後輸入變量? – Nanda

+0

您引用了第二個劇本中的角色,對嗎?播放按您指定的順序從上到下運行。在這裏看到更多的信息:http://docs.ansible.com/ansible/latest/playbooks_intro.html#playbook-language-example – McGlothlin

+0

@南大拍攝,我沒有意識到'vars_prompt'是一個部分,而不是一個角色(對不起,這是一段時間)。相應地更新我的答案。 – McGlothlin