我覺得這應該是非常直截了當的,但我一直在傾訴這些無用的文檔和其他答案,而且我被卡住了。循環作曲家需要完成任務
我想要做的是設置一個數組或作曲家包列表,用於使用作曲家對象在composer require
語句中使用。
所以,我已經有了一個set fact
像這樣來定義模塊:
- name: Define modules to be required
set_fact:
modules:
- vendor1/package1
- vendor2/package2
- vendorN/packageN
我已經把這個在我ansible項目,所以它的方便和編輯的頂部(它會是甜想知道如何簡單地將yaml文件中的包定義爲變量,然後在劇本中使用set_fact
,但我會堅持在這裏展示範圍)
考慮到這一點,我在項目中有一個角色與作曲家任務,我想要求每個這些:
- name: "Require packages"
composer:
command: require
arguments: {{ modules_to_be_required }}
working_dir: "{{ app['directory'] }}"
本來,我這樣做是使用with_items
像這樣:
- name: "Require packages"
composer:
command: require
arguments: "{{ item }}"
working_dir: "{{ app['directory'] }}"
with_items
- vendor1/package1
- vendor2/package2
- vendorN/packageN
這並不工作;然而,它會導致composer update
運行,每次迭代with_items
需要很長時間。對我來說,將需要的軟件包列表轉換爲由空格分隔的字符串,然後將其作爲參數傳遞是更有意義的。
在我的研究,我發現,我可以列表轉換與join
過濾字符串,所以我嘗試這樣做:
- name: "Require packages"
composer:
command: require
arguments: {{ modules | join(" ") }}
working_dir: "{{ app['directory'] }}"
但是,這給了我一個YAML語法錯誤:
The offending line appears to be:
command: require
arguments: {{ modules | join(" ") }}
^here
我試過包裝"{{ modules | join(" ") }}"
,但我在大括號中的引號大吼大叫。
我以正確的方式接近這個想法,或者我需要問什麼問題才能得到答案?任何指導表示讚賞。
這很好,謝謝你的詳細解釋 - 非常感謝。 –