Ansible
將文件中的多個值載入到 ansible 劇本中
我正在嘗試創建一個 ansible 劇本,它將幫助我下載文件並使用來自某個網站的休息呼叫將其安裝到我們的系統中。我目前的劇本如下所示。
--- - name: install apps hosts: myserversservers tasks: - name: app installer uri: url: 'https://127.0.0.1:8089/services/apps/local' method: POST body: 'auth=XXXXXh&filename=true&name=https://XX.domain.com/app/2934/release/2.2.0/download' headers: Content-Type: application/x-www-form-urlencoded url_username: admin url_password: mypass validate_certs: false status_code: 201 register: result
有沒有一種方法可以在一段時間內將多個值載入到 URL 中讀取一種樣式,這樣我就可以簡單地使用 jinja 在一次播放中載入所有變數,而不是編寫多個任務來安裝多個應用程序,這樣所有的任務都可以完成應用程序安裝?例如,而不是像下面這樣寫 URL
https://XX.domain.com/app/**2934**/release/**2.2.0**/download
我可以通過引用 yaml 文件(包括 vars)以某種方式使用 Jinja 替換它嗎?如果可能,應該如何格式化 YAML 文件以及如何將其引用到劇本中?
https://XX.domain.com/app/{{ app number }}/release/{{ version number}}/download
我可以維護一個包含我需要的所有變數的文件
app1 ver3 app3 ver55 app99 ver99
例如,給定文件
shell> cat app_ver.csv app1 ver3 app3 ver55 app99 ver99
使用模組community.general.read_csv
- community.general.read_csv: path: app_ver.csv fieldnames: [app, ver] delimiter: ' ' register: app_ver
給
app_ver.list: - {app: app1, ver: ver3} - {app: app3, ver: ver55} - {app: app99, ver: ver99}
測試迭代
- debug: msg: | body: 'auth=XXXXXh&filename=true&name={{ http }}' loop: "{{ app_ver.list }}" vars: http: 'https://XX.domain.com/app/{{ item.app }}/release/{{ item.ver }}/download'
給
TASK [debug] ********************************************************************************** ok: [localhost] => (item={'app': 'app1', 'ver': 'ver3'}) => msg: |- body: 'auth=XXXXXh&filename=true&name=https://XX.domain.com/app/app1/release/ver3/download' ok: [localhost] => (item={'app': 'app3', 'ver': 'ver55'}) => msg: |- body: 'auth=XXXXXh&filename=true&name=https://XX.domain.com/app/app3/release/ver55/download' ok: [localhost] => (item={'app': 'app99', 'ver': 'ver99'}) => msg: |- body: 'auth=XXXXXh&filename=true&name=https://XX.domain.com/app/app99/release/ver99/download'
用於測試的完整劇本範例
- hosts: localhost tasks: - community.general.read_csv: path: app_ver.csv fieldnames: [app, ver] delimiter: ' ' register: app_ver - debug: var: app_ver.list|to_yaml - debug: msg: | body: 'auth=XXXXXh&filename=true&name={{ http }}' loop: "{{ app_ver.list }}" vars: http: 'https://XX.domain.com/app/{{ item.app }}/release/{{ item.ver }}/download'