[英]Ansible 2.8 Roles - using the vars/main directory
我正在嘗試將我的 Ansible 角色變量拆分為多個文件 - 根據這個答案,應該可以創建一個vars/main
目錄,並且應該自動加載該目錄中的所有 .yml 文件。
但是,在我的情況下似乎沒有發生這種情況。
我的目錄結構:
vars
└── main
├── gce_settings.yml
├── vsphere_settings.yml
└── vsphere_zone.yml
但是,當我嘗試使用 vsphere_settings.yml 中定義的變量時,Ansible 抱怨該變量未定義: {"msg": "The task includes an option with an undefined variable. The error was: 'vsphere_user' is undefined
如果我將變量聲明移動到vars/main.yml
中,一切都會按預期工作。 但是,當然,我更願意將我的變量分成多個文件。
我在官方 Ansible 文檔中找不到對此“功能”的任何引用,我不知道如何對其進行故障排除。 誰能指出我正確的方向?
我的 ansible 版本: Ubuntu 16.04 上的ansible 2.8.5
在你問之前:是的,我確實確保在嘗試加載vars/main/*.yml
時main.yml
不存在......
TL;DR 版本:這是 ansible 中的一個錯誤,由vars/main
中存在 empty.yml 文件引起。 已經有一個 PR 了。 見這里。
實際結果(如評論中所述)實際上取決於文件的處理順序(默認情況下,看起來我的 Ansible 按字母順序處理它們 - 但這可能取決於版本或底層操作系統):
ERROR, failed to combine variables, expected dicts but got a 'NoneType' and a 'AnsibleMapping'
更多詳細信息:由於我不知道如何在 Ansible 本身中解決此問題,因此我轉到代碼並開始添加print
語句以查看發生了什么。
就我而言,我在vars/main
目錄中有一些 empty.yml 文件(我計划稍后填充的文件。嗯......看起來當代碼遇到這樣一個空文件時,它會破壞整個字典到目前為止它已經建成。
要么我錯過了一些非常重要的東西,要么這是一個錯誤......重現的步驟:
vars/main
目錄,並用 some.yml 文件填充它 ansible# tree roles
roles
+-- test
+-- tasks
¦ +-- main.yml
+-- vars
+-- main
+-- correct_vars.yml
4 directories, 2 files
ansible# cat roles/test/vars/main/correct_vars.yml myname: bogd
ansible# ansible-playbook -i inventory.yml test.yml
...
ok: [localhost] => {
"myname": "bogd" }
...
ansible# echo > roles/test/vars/main/emptyfile.yml
ansible# ansible-playbook -i inventory.yml test.yml
... ok: [localhost] => {
"myname": "VARIABLE IS NOT DEFINED!" }
...
稍后編輯:是的,這是一個錯誤......見這里。
下面的例子
$ cat play.yml
- hosts: localhost
roles:
- role1
$ cat roles/role1/tasks/main.yml
- debug:
var: var1
$ cat roles/role1/vars/main/var1.yml
var1: test_var1
給
"var1": "test_var1"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.