2016-10-01 157 views
2

我已經創建了自己的自定義庫,我在我的資源庫的公共文件夾中添加了自定義庫。在那我需要動態地傳遞變量。這是一個機密的密碼,所以我使用的是「Vault」。如何在ansible中使用include_vars

因爲我的要求是如何在主機前通過tasks\main.yml中的include_vars

如:mytasks.yml

- include_vars: sample_vault.yml 
- include: sample_tasks.yml 
- hosts: localhost 
    tasks: 
    name: "free task" 
    command: ls -a 

我的目錄結構是這樣的:

myfolder 
    - common 
     -library 
     -my file.py 
     - sample_tasks.yml 

    - mytasks 
     -mytasks.yml(my main master playbook file) 
     -sample_vault.yml (note:i create this using vault for confidential purpose) 
     - roles 
     -myrole 

在這裏,我需要使用sample_vault.yml文件中傳遞一個變量來運行sample_tasks文件之前,我使用執行任務的主機ansible。如果我使用額外的變量意味着密碼是可見的,所以我不需要。

當我在tasks/main.yml文件中使用include_vars,它顯示了以下錯誤:

ERROR! 'include_vars' is not a valid attribute for a Play

回答

7

不能使用include_vars這種方式,它僅適用於使用tasks下。
如果sample_tasks.yml是一個任務列表,您也不能在劇本級別上使用它。請參閱我的other answer以獲取解釋。

您可以使用vars_files這樣的:

- hosts: localhost 
    vars_files: 
    - sample_vault.yml 
    tasks: 
    name: "free task" 
    command: ls -a 

或傳遞文件作爲額外的變量:

ansible-playbook --ask-vault-pass -e @sample_vault.yml myplaybook.yml 
+0

感謝偉大的答覆!通過切換到'vars_files' evrything工作,我正在將來自'vaulted文件'的'include_vars'作爲''environment'in + 2+'出現問題! – andi