Ansible

將渲染的 Jinja 保存到變數

  • October 29, 2021

我想將一些 Jinja 模板拆分為多行以保持行數低於 120 個字元,並註冊一個變數以便於重用。有沒有辦法做類似下面的事情?是否有內置(或社區)模組?如果可能的話,我想在不使用臨時文件的情況下這樣做。

- jinja: "https://{{ username }}:{{ token }}@hosting.com/organization"
 vars:
   username: "{{ hashivault_secrets.value.data.USERNAME }}"
   token: "{{ hashivault_secrets.value.data.TOKEN }}"
 register: url

所以使用/重用可能看起來像

  - pip:
      name: my-internal-package
    env:
      PIP_EXTRA_INDEX_URL: "{{ url }}"

我目前正在使用 Ansible 2.9。

您可以直接設置一個var:

 vars:
   url: https://{{ username }}:{{ token }}@hosting.com/organization
   username: "{{ hashivault_secrets.value.data.USERNAME }}"
   token: "{{ hashivault_secrets.value.data.TOKEN }}"

或者您可以使用set_fact

- set_fact:
   url: https://{{ username }}:{{ token }}@hosting.com/organization
 vars:
   username: "{{ hashivault_secrets.value.data.USERNAME }}"
   token: "{{ hashivault_secrets.value.data.TOKEN }}"

主要的實際區別(除了設置變數不需要額外的任務)是變數在使用時進行評估,因此如果變化,第一個值url可能會隨著時間hashivault_secrets而變化,而set_fact基於對變數的評估將導致靜態值set_fact任務執行時的模板。這兩種行為都是有用的,具體取決於具體情況。

引用自:https://serverfault.com/questions/1082120