簡體   English   中英

ansible-galaxy無法使用空meta / main.yml進行依賴

[英]ansible-galaxy fails on dependency with empty meta/main.yml

我有一個requirements.yml文件,其中列出了Ansible角色的依賴關系:

---

- src: git@gitrepo:group/dependency1.git
  scm: git
  name: name1

- src: git@gitrepo:group/dependency1.git
  scm: git
  name: name2

這些角色本身沒有任何依賴關系,並且由於它們位於私有SCM系統上(其他原因),因此它們不需要任何元數據。 但是,加載Ansible依賴項要求此文件存在。 因此,依賴項具有一個空白meta / main.yml以啟用使用ansible-galaxy。

使用以下方法安裝依賴項時:

ansible-galaxy install --role-file requirements.yml --roles-path foo

安裝第一個依賴項后,它將出現以下錯誤:

ERROR! Unexpected Exception: 'NoneType' object has no attribute 'get'

使用非常詳細的輸出,可以找到錯誤:

galaxy.py", line 394

經過試驗,多次運行該命令將逐步解決依賴關系,一次運行一次。 因此,嵌套的依賴項將失敗; 因為要么父級將安裝然后出錯,要么ansible-galaxy認為父級已經安裝並且跳過依賴項。

問題是:如何停止發生此錯誤並獲取ansible-galaxy以正確處理我的依賴關系?

我只是解決了這個問題devel 應該使2.4發布為Ansible。

事實證明,空白meta / main.yml不足以將角色作為依賴項進行處理。 我的假設是,如果文件為空,則角色對象初始化時沒有元數據字段,因為詳細輸出中提到的行是:

role_dependencies = role.metadata.get('dependencies') or []

在此行之前使用“角色”,因此將是一個實例,而這是“元數據”的第一次提及。

代碼的這一部分涉及安裝嵌套依賴關系,因為上面的行正在檢查以確定是否應該處理嵌套依賴關系。

if not no_deps and installed:
  role_dependencies = role.metadata.get('dependencies') or []
  ...

如果此行還檢查了元數據的存在,例如:

if not no_deps and installed and metadata:

然后將(正確地)跳過此部分。 但是,由於Ansible不會進行此檢查,因此元數據是“ NoneType”對象,它實際上沒有屬性“ get”。

這意味着meta / main.yml文件需要至少一個鍵才能作為依賴項進行處理。 具有以下meta / main.yml文件:

---

galaxy_info:

為此目的就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM