2015-08-24 88 views
4
#file: cmservers.yml 

- hosts: cmservers 
    tasks: 
    - include_vars: /var/cm/local/ansible/vars/cmusers.yml 
    - debug: var=users 
    roles: 
    - ansible-users-master 

我發現角色任務正在被首先執行,但是用戶列表需要先被定義,這是不會發生的。 任何幫助表示讚賞。ansible include_vars訂購問題

+0

在其中創建一個包含'include'和'debug'的角色,這樣您就可以在同一級別擁有所有角色。 – chicks

回答

1

您可以使用pre_tasks來確保在角色和post_tasks之前執行某些任務,以確保在應用角色後執行某些任務。因此,將您的tasks更改爲pre_tasks將解決該問題。

- hosts: cmservers 

    pre_tasks: 
    - include_vars: /var/cm/local/ansible/vars/cmusers.yml 
    - debug: var=users 

    roles: 
    - ansible-users-master 

您可以檢查role documentation瞭解更多詳情。

+1

這個技巧。輝煌。現在我的變量被定義了。現在實際上有兩個include文件包含我所包含的變量。我已將合併標誌設置爲合理的hash_behaviuor,但最後加載的包含文件正在覆蓋用戶散列值。 –

+0

@SebastienHadjifotis我對'hash_behaviour'不太瞭解,但可能有一個錯誤,如下所述:https://github.com/ansible/ansible/issues/10446。不知道你是否遇到同樣的問題。 – taskinoor

+0

看起來像是同一個問題。我爲該帖子添加了評論。我希望有解決辦法。因爲我需要有能力合併散列。 –

2

或者,您可以在劇本中使用vars_files指令。當您將變量存儲在角色vars/main.yml中時,這會非常方便,但在執行劇本時可以包含一些其他變量或一些私有數據(您可以使用Ansible Vault)來包含這些變量。

#file: cmservers.yml 

- hosts: cmservers 
    vars_files: 
    - /var/cm/local/ansible/vars/cmusers.yml 
    roles: 
    - ansible-users-master 

由於include_vars是它更好地使用它的角色/ hanlders和劇本使用vars_files代替的任務。將Ansible命令行變量與vars_files一起傳遞也更容易。欲瞭解更多信息,請參閱:http://docs.ansible.com/ansible/playbooks_variables.html

+0

完全同意。即使pre_tasks值得注意,這是一個更好的答案。 –