Ansible

不帶引號的 Ansible 變數

  • February 14, 2022

要使用從 json 收集的變數,我需要它是原始的,不帶引號:

我有

ok: [device] => {
   "fact": {
       "int": "7"
   },
}

我想

ok: [device] => {
   "fact": {
       "int": 7
   },
}

問題是引號不是變數的一部分,所以我不能使用| int| replace刪除引號。

有辦法嗎?

Jinja表達式的結果總是一個字元串。你不能得到一個整數。我猜你真正想要的是字典中屬性int的值**fact是一個整數。測試目前值,例如

       - debug:
           var: fact.int
       - debug:
           var: fact.int|type_debug

如果屬性int的值是一個字元串,你會得到(刪節)

 fact.int: '7'
 fact.int|type_debug: AnsibleUnicode

您可以將字元串轉換為整數,例如

       - set_fact:
           fact: "{{ fact|combine({'int': _int|int}) }}"
         vars:
           _int: "{{ fact.int }}"
       - debug:
           var: fact.int
       - debug:
           var: fact.int|type_debug

你會得到(刪節)

 fact.int: '7'
 fact.int|type_debug: int

現在,屬性int的值是一個整數。但是,Jinja 表達式的結果var: fact.int仍然是一個字元串fact.int: '7'


筆記

  • 請注意,調試模組的var選項已經在 Jinja2 上下文中執行並且具有隱式 {{ }} 包裝。

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